<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/tasks/rspec.rake</filename>
    </added>
    <added>
      <filename>script/autospec</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/.gitignore</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/History.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/Manifest.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/Readme.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/calendar_date_select.gemspec</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/js_test/functional/.tmp_cds_test.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/lib/calendar_date_select/calendar_date_select.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/lib/calendar_date_select/form_helpers.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/lib/calendar_date_select/includes_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/blank_iframe.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_db.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_euro_24hr_ymd.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_iso_date.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/de.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/fr.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/pl.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/pt.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/ru.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/spec/calendar_date_select/calendar_date_select_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/spec/calendar_date_select/form_helpers_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/calendar_date_select/spec/spec_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/CHANGELOG</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/LICENSE</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/Manifest</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/README</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/TODO</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/examples/hmph.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/tagging_generator.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/migration.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tag.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tag_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging_extensions.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/taggings.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/generators/tagging/templates/tags.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/init.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/association.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/autoload.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/base.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/class_methods.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/configuration.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/debugging_tools.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/rake_task_redefine_task.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/reflection.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/support_methods.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/bow_wows.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/cats.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/eaters_foodstuffs.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/fish.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/frogs.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/keep_your_enemies_close.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/little_whale_pupils.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/people.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/petfoods.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/whales.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/fixtures/wild_boars.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/generator/tagging_generator_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/README</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/controllers/application.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/controllers/bones_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/addresses_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/application_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/bones_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/sellers_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/states_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/users_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/bone.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/double_sti_parent.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/double_sti_parent_relationship.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/organic_substance.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/single_sti_parent.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/single_sti_parent_relationship.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/stick.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/models/stone.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/edit.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/index.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/new.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/show.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/bones/index.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/addresses.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/sellers.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/states.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/users.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/edit.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/index.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/new.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/show.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/edit.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/index.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/new.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/show.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/edit.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/index.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/new.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/show.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/boot.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/database.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/environment.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/environment.rb.canonical</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/development.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/production.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/locomotive.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/routes.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/ultrasphinx/default.base</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/config/ultrasphinx/development.conf.canonical</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/001_create_sticks.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/002_create_stones.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/003_create_organic_substances.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/004_create_bones.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/005_create_single_sti_parents.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/006_create_double_sti_parents.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/007_create_single_sti_parent_relationships.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/008_create_double_sti_parent_relationships.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/009_create_library_model.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/doc/README_FOR_APP</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/generators/commenting_generator_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/lib/library_model.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/.htaccess</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/404.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/500.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.cgi</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.fcgi</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/favicon.ico</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/images/rails.png</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/index.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/application.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/controls.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/dragdrop.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/effects.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/prototype.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/robots.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/public/stylesheets/scaffold.css</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/about</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/breakpointer</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/console</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/destroy</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/generate</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/performance/benchmarker</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/performance/profiler</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/plugin</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/process/inspector</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/process/reaper</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/process/spawner</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/runner</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/script/server</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/double_sti_parent_relationships.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/double_sti_parents.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/organic_substances.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/single_sti_parent_relationships.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/single_sti_parents.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/sticks.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/stones.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/addresses_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/bones_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/sellers_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/states_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/users_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/test_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/bone_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/double_sti_parent_relationship_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/double_sti_parent_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/organic_substance_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/single_sti_parent_relationship_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/single_sti_parent_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/stick_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/stone_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/integration/server_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/aquatic/fish.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/aquatic/pupils_whale.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/aquatic/whale.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/beautiful_fight_relationship.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/canine.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/cat.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/dog.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/eaters_foodstuff.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/frog.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/kitten.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/parentship.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/person.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/petfood.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/tabby.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/models/wild_boar.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/modules/extension_module.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/modules/other_extension_module.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/patches/symlinked_plugins_1.2.6.diff</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/schema.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/setup.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/test_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/has_many_polymorphs/test/unit/has_many_polymorphs_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/History.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/License.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/Manifest.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/README.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/TODO.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/features/step_definitions/people.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/features/support/env.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/features/transactions/transactions_should_rollback.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/generators/rspec/templates/rspec.rake</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/generators/rspec/templates/script/autospec</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/generators/rspec_default_values.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/cookies_proxy.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/spec/runner/configuration.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/interop/testcase.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers/ar_be_valid.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers/change.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/rspec-rails.gemspec</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/autotest/mappings_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/action_view_base_spec_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/application.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/controller_spec_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/redirect_spec_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/render_spec_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/controllers/rjs_spec_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/helpers/addition_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/helpers/explicit_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/helpers/more_explicit_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/helpers/plugin_application_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/helpers/view_spec_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/models/animal.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/models/person.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/models/thing.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/action_setting_the_assigns_hash.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/action_with_errors_in_template.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/controller_spec/action_with_template.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/layouts/application.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/layouts/simple.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/objects/_object.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/render_spec/_a_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/render_spec/action_with_alternate_layout.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/render_spec/some_action.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/render_spec/some_action.js.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/render_spec/some_action.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/_replacement_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/hide_div.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/hide_page_element.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/insert_html.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/replace.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/replace_html.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/replace_html_with_partial.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/visual_effect.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/rjs_spec/visual_toggle_effect.rjs</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/tag_spec/no_tags.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/tag_spec/single_div_with_no_attributes.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/tag_spec/single_div_with_one_attribute.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/_partial_used_twice.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/_partial_with_local_variable.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/_partial_with_sub_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/_spacer.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/accessor.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/block_helper.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/entry_form.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/explicit_helper.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/foo/show.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/implicit_helper.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/multiple_helpers.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/path_params.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/should_not_receive.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/template_with_partial.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/template_with_partial_using_collection.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/resources/views/view_spec/template_with_partial_with_array.rhtml</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/assigns_hash_proxy_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/configuration_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/controller_isolation_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/controller_spec_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/cookies_proxy_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/example_group_factory_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/helper_spec_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/model_spec_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/shared_behaviour_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/example/view_spec_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/extensions/action_controller_rescue_action_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/extensions/action_view_base_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/extensions/active_record_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/interop/testcase_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/ar_be_valid_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/assert_select_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/errors_on_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/have_text_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/include_text_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/redirect_to_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/render_template_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/matchers/should_change_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/mocks/ar_classes.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/mocks/mock_model_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/mocks/stub_model_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/sample_modified_fixture.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/sample_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/spec_server_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec-rails/spec/spec/rails/spec_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/History.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/License.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/Manifest.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/README.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/TODO.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/README.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/diffing_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/failing_autogenerated_docstrings_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/failure_in_after.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/failure_in_before.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/mocking_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/mocking_with_flexmock.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/mocking_with_mocha.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/mocking_with_rr.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/partial_mock_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/predicate_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/raising_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/spec_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/syntax_error_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/team_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/failing/timeout_behaviour.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/autogenerated_docstrings_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/before_and_after_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/behave_as_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/custom_expectation_matchers.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/custom_formatter.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/dynamic_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/file_accessor.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/file_accessor_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/greeter_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/helper_method_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/io_processor.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/io_processor_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/legacy_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/mocking_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/multi_threaded_behaviour_runner.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/nested_classes_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/partial_mock_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/pending_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/predicate_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/priority.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/shared_example_group_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/shared_stack_examples.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/simple_matcher_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/spec_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/stack.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/stack_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/stack_spec_with_nested_example_groups.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/stubbing_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/examples/passing/yielding_example.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/before_and_after_blocks/before_and_after_blocks.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/example_groups/autogenerated_docstrings.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/example_groups/example_group_with_should_methods.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/example_groups/nested_groups.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/example_groups/output.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/interop/examples_and_tests_together.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/interop/test_but_not_test_unit.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/interop/test_case_with_should_methods.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/mock_framework_integration/use_flexmock.feature</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/step_definitions/running_rspec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/support/env.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/support/helpers/cmdline.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/support/helpers/story_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/features/support/matchers/smart_match.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/adapters/mock_frameworks/flexmock.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/adapters/mock_frameworks/mocha.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/adapters/mock_frameworks/rr.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/adapters/mock_frameworks/rspec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/dsl.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/dsl/main.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/example/before_and_after_hooks.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/matchers/errors.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/matchers/generated_descriptions.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/matchers/match_array.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/matchers/method_missing.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/matchers/wrap_expectation.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/argument_constraints.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/ruby.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/runner/configuration.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/story/progress_bar_formatter.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/rake/examples.rake</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/rake/examples_with_rcov.rake</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/rake/failing_examples_with_html.rake</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/rake/verify_rcov.rake</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/spec/example_group_with_should_methods.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/spec/simple_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/spec/spec_with_flexmock.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/test/spec_and_test_together.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/test/spec_including_test_but_not_unit.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/resources/test/test_case_with_should_methods.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/rspec.gemspec</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/autotest/autotest_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/autotest/autotest_matchers.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/autotest/failed_results_re_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/dsl/main_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/example/helper_method_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/expectations/wrap_expectation_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/matchers/match_array_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/bug_report_496.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/bug_report_600_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/hash_not_including_matcher_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/nil_expectation_warning_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/stubbed_message_expectations_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/configuration_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/base_formatter_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/base_text_formatter_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.7.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.9.1.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/resources/custom_example_group_runner.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/spec_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
 $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + &quot;/../vendor/plugins/rspec/lib&quot;))
+require 'rubygems'
 require 'spec'
 exit ::Spec::Runner::CommandLine.run(::Spec::Runner::OptionParser.parse(ARGV, STDERR, STDOUT))</diff>
      <filename>script/spec</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,4 @@
 #!/usr/bin/env ruby
-$LOAD_PATH.unshift File.dirname(__FILE__) + '/../../rspec/lib' # For svn
 $LOAD_PATH.unshift File.dirname(__FILE__) + '/../vendor/plugins/rspec/lib' # For rspec installed as plugin
 require 'rubygems'
 require 'drb/drb'
@@ -14,29 +13,47 @@ module Spec
       def run(argv, stderr, stdout)
         $stdout = stdout
         $stderr = stderr
-
-        base = ActiveRecord::Base
-        def base.clear_reloadable_connections!
-          active_connections.each do |name, conn|
-            if conn.requires_reloading?
-              conn.disconnect!
-              active_connections.delete(name)
+        
+        unless ActiveRecord::Base.respond_to?(:clear_reloadable_connections!)
+          base = ActiveRecord::Base
+          def base.clear_reloadable_connections!
+            active_connections.each do |name, conn|
+              if conn.requires_reloading?
+                conn.disconnect!
+                active_connections.delete(name)
+              end
             end
           end
-        end        
+        end
+
+        ActiveRecord::Base.clear_reloadable_connections!
 
         if ActionController.const_defined?(:Dispatcher)
           dispatcher = ::ActionController::Dispatcher.new($stdout)
-          dispatcher.cleanup_application(true)
+          dispatcher.cleanup_application
         elsif ::Dispatcher.respond_to?(:reset_application!)
           ::Dispatcher.reset_application!
         else
           raise &quot;Application reloading failed&quot;
         end
-        ::Dependencies.mechanism = :load
+        if Object.const_defined?(:Fixtures) &amp;&amp; Fixtures.respond_to?(:reset_cache)
+          Fixtures.reset_cache
+        end
+        
+        if ::ActiveSupport.const_defined?(:Dependencies)
+          ::ActiveSupport::Dependencies.mechanism = :load
+        else
+          ::Dependencies.mechanism = :load
+        end
+
         require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
         load File.dirname(__FILE__) + '/../spec/spec_helper.rb'
 
+        if in_memory_database?
+          load &quot;#{RAILS_ROOT}/db/schema.rb&quot; # use db agnostic schema by default
+          ActiveRecord::Migrator.up('db/migrate') # use migrations
+        end
+
         ::Spec::Runner::CommandLine.run(
           ::Spec::Runner::OptionParser.parse(
             argv,
@@ -45,6 +62,12 @@ module Spec
           )
         )
       end
+
+      def in_memory_database?
+        ENV[&quot;RAILS_ENV&quot;] == &quot;test&quot; and
+        ::ActiveRecord::Base.connection.class.to_s == &quot;ActiveRecord::ConnectionAdapters::SQLite3Adapter&quot; and
+        ::Rails::Configuration.new.database_configuration['test']['database'] == ':memory:'
+      end
     end
   end
 end
@@ -91,7 +114,7 @@ opts.parse!(ARGV)
 puts &quot;Ready&quot;
 exec_server = lambda {
   trap(&quot;USR2&quot;) { restart_test_server } if Signal.list.has_key?(&quot;USR2&quot;)
-  DRb.start_service(&quot;druby://localhost:8989&quot;, Spec::Runner::RailsSpecServer.new)
+  DRb.start_service(&quot;druby://127.0.0.1:8989&quot;, Spec::Runner::RailsSpecServer.new)
   DRb.thread.join
 }
 </diff>
      <filename>script/spec_server</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ describe OptionType do
   ['name', 'presentation'].each do |field|
     it &quot;should require #{field}&quot; do
       @option_type.should_not be_valid
-      @option_type.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @option_type.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/option_type_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -95,7 +95,6 @@ describe &quot;PreferenceDefinition with :boolean type&quot; do
   end
 
   it &quot;should type_cast to false if value is not true string&quot; do
-    @definition.type_cast('').should be_false
     @definition.type_cast('false').should be_false
     @definition.type_cast('hola').should be_false
   end</diff>
      <filename>spec/models/preference_definition_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,7 +23,7 @@ describe ProductProperty do
   ['value'].each do |field|
     it &quot;should require #{field}&quot; do
       @product_property.should_not be_valid
-      @product_property.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @product_property.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/product_property_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,7 @@ describe Product do
   ['name', 'master_price', 'description'].each do |field|
     it &quot;should require #{field}&quot; do
       @product.should_not be_valid
-      @product.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @product.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/product_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ describe Property do
   ['name', 'presentation'].each do |field|
     it &quot;should require #{field}&quot; do
       @property.should_not be_valid
-      @property.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @property.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/property_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,7 +23,7 @@ describe Prototype do
   ['name'].each do |field|
     it &quot;should require #{field}&quot; do
       @prototype.should_not be_valid
-      @prototype.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @prototype.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/prototype_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ describe State do
   ['country', 'name'].each do |field|
     it &quot;should require #{field}&quot; do
       @state.should_not be_valid
-      @state.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @state.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
   </diff>
      <filename>spec/models/state_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,7 @@ describe Variant do
   ['product'].each do |field|
     it &quot;should require #{field}&quot; do
       @variant.should_not be_valid
-      @variant.errors.full_messages.should include(&quot;#{field.intern.l(field).humanize} #{:error_message_blank.l}&quot;)
+      @variant.errors.full_messages.should include(&quot;#{field.humanize} #{I18n.translate(&quot;activerecord.errors.messages.blank&quot;)}&quot;)
     end
   end
 </diff>
      <filename>spec/models/variant_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,4 @@
 --colour
---format
-specdoc
---loadby
-mtime
+--format progress
+--loadby mtime
 --reverse</diff>
      <filename>spec/spec.opts</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ describe '/admin/products/edit' do
     )
     assigns[:product] = @product
     
-    template.stub!(:object_url).and_return(admin_product_url(@product))
+    template.stub!(:object_url).and_return('')
     template.stub!(:collection_url).and_return('')
 
     assigns[:product_admin_tabs] = []
@@ -37,7 +37,7 @@ describe '/admin/products/edit' do
   it &quot;should display the standard edit form&quot; do
     render '/admin/products/edit'
     
-    response.should have_tag('form[method=?][action=?]', 'post', admin_product_url(@product)) do
+    response.should have_tag('form[method=?][action=?]', 'post', '') do
       with_tag(&quot;input[type=?][id=?][value=?]&quot;, 'text', 'product_name', @product.name)
       with_tag(&quot;textarea[id=?]&quot;, 'product_description', :text =&gt; @product.description)
       with_tag(&quot;input[type=?][id=?][value=?]&quot;, 'text', 'product_master_price', @product.master_price)
@@ -74,7 +74,7 @@ describe '/admin/products/edit' do
  
     render '/admin/products/edit'
     
-    response.should have_tag('form[method=?][action=?]', 'post', admin_product_url(@product)) do     
+    response.should have_tag('form[method=?][action=?]', 'post', '') do     
       with_tag(&quot;input[type=?][id=?][value=?]&quot;, 'text', 'product_weight', '1200')
       with_tag(&quot;input[type=?][id=?][value=?]&quot;, 'text', 'product_height', '99.00') #format present
       </diff>
      <filename>spec/views/admin/products/edit.html.erb_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -50,14 +50,14 @@ describe ProductsHelper do
   describe &quot;format_price&quot; do
     before :each do
       @price = 100
-      Locale.code = &quot;en-US&quot;
+      I18n.locale = &quot;en-US&quot;
     end
     describe &quot;localization in general&quot; do
       it &quot;should format the price using $ when locale is en-US&quot; do
         helper.format_price(@price).should include(&quot;$100.00&quot;)
       end
-      it &quot;should format the price using $ when locale is es-ES&quot; do
-        Locale.code = &quot;es-ES&quot;
+      it &quot;should format the price using $ when locale is es&quot; do
+        I18n.locale = &quot;es&quot;
         helper.format_price(@price).should include(&quot;100,00 &#8364;&quot;)
       end
     end</diff>
      <filename>vendor/extensions/tax_calculator/spec/helpers/products_helper_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1 @@
-%w[calendar_date_select includes_helper].each { |file| 
-  require File.join( File.dirname(__FILE__), &quot;lib&quot;,file) 
-}
-
-ActionView::Helpers::FormHelper.send(:include, CalendarDateSelect::FormHelper)
-ActionView::Base.send(:include, CalendarDateSelect::FormHelper)
-ActionView::Base.send(:include, CalendarDateSelect::IncludesHelper)
-
-# install files
-['/public/javascripts/calendar_date_select', '/public/stylesheets/calendar_date_select', '/public/images/calendar_date_select'].each{|dir|
-  source = File.join(directory,dir)
-  dest = RAILS_ROOT + dir
-  FileUtils.mkdir_p(dest)
-  FileUtils.cp_r(Dir.glob(source+'/*.*'), dest)
-} unless File.exists?(RAILS_ROOT + '/public/javascripts/calendar_date_select/calendar_date_select.js')
+require File.dirname(__FILE__) + &quot;/lib/calendar_date_select.rb&quot;</diff>
      <filename>vendor/plugins/calendar_date_select/init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -32,8 +32,9 @@
       $(&quot;cds_test&quot;).readOnly = false;
     }},
     teardown: function() { with(this){
-      if (typeof(cds)!=&quot;undefined&quot;)
-        assert(cds.closed,&quot;all tests should close their calendar control&quot;);
+      if (typeof(cds)!=&quot;undefined&quot;) assert(cds.closed,&quot;all tests should close their calendar control&quot;);
+      Date.first_day_of_week = 0;
+      Date.weekdays = $w(&quot;S M T W T F S&quot;)
     }},
     testMixedTime_feedDateWithAndWithoutTime_shouldSetAccordingly: function() { with(this) {
       $A([&quot;January 2, 2007 5:00 pm&quot;, &quot;January 2, 2007 0:00 pm&quot;]).each(function(d) {
@@ -157,7 +158,7 @@
     test_timePassed_notUsingTime_shouldIgnore: function() {with(this) {
       $(&quot;cds_test&quot;).value = &quot;May 10, 2007 5:00 pm&quot;;
       cds = new CalendarDateSelect($(&quot;cds_test&quot;), {time:false});
-      assert(cds.options.get(&quot;close_on_click&quot;), &quot;should set close_on_click to true when not using time&quot;)
+      assert(cds.closeOnClick(), &quot;should set close_on_click to true when not using time&quot;)
       assertEqual(false, cds.use_time, &quot;When parsing time&quot;);
       cds.today();
       assert(cds.closed, &quot;should close when clicking today&quot;);
@@ -316,6 +317,15 @@
       });
       
       cds.close();
+    }},
+    test__should_pull_up_dec_07_when_first_day_of_week_is_1: function() {with (this) {
+      Date.first_day_of_week = 1;
+      Date.weekdays = $w(&quot;M T W T F S S&quot;);
+      $('cds_test').value = &quot;December 1, 2007&quot;;
+      cds = new CalendarDateSelect($(&quot;cds_test&quot;));
+      
+      assertEqual(1, $$(&quot;.calendar_date_select&quot;).length);
+      cds.close();
     }}
   });
 // ]]&gt;</diff>
      <filename>vendor/plugins/calendar_date_select/js_test/functional/cds_test.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,192 +1,33 @@
-class CalendarDateSelect
-  FORMATS = {
-    :natural =&gt; {
-      :date =&gt; &quot;%B %d, %Y&quot;,
-      :time =&gt; &quot; %I:%M %p&quot;
-    },
-    :hyphen_ampm =&gt; {
-      :date =&gt; &quot;%Y-%m-%d&quot;,
-      :time =&gt; &quot; %I:%M %p&quot;,
-      :javascript_include =&gt; &quot;format_hyphen_ampm&quot;
-    },
-    :finnish =&gt; {
-      :date =&gt; &quot;%d.%m.%Y&quot;,
-      :time =&gt; &quot; %H:%M&quot;,
-      :javascript_include =&gt; &quot;format_finnish&quot;
-    },
-    :american =&gt; {
-      :date =&gt; &quot;%m/%d/%Y&quot;,
-      :time =&gt; &quot; %I:%M %p&quot;,
-      :javascript_include =&gt; &quot;format_american&quot;
-    },
-    :euro_24hr =&gt; {
-      :date =&gt; &quot;%d %B %Y&quot;,
-      :time =&gt; &quot; %H:%M&quot;, 
-      :javascript_include =&gt; &quot;format_euro_24hr&quot;
-    },
-    :italian =&gt; {
-      :date =&gt; &quot;%d/%m/%Y&quot;,
-      :time =&gt; &quot; %H:%M&quot;,
-      :javascript_include =&gt; &quot;format_italian&quot;
-    }
-  }
-  
-  cattr_accessor :image
-  @@image = &quot;calendar_date_select/calendar.gif&quot;
-  
-  cattr_reader :format
-  @@format = FORMATS[:natural]
-  
-  class &lt;&lt; self
-    def format=(format)
-      raise &quot;CalendarDateSelect: Unrecognized format specification: #{format}&quot; unless FORMATS.has_key?(format)
-      @@format = FORMATS[format]
-    end
-    
-    def javascript_format_include
-      @@format[:javascript_include] &amp;&amp; &quot;calendar_date_select/#{@@format[:javascript_include]}&quot;
-    end
-    
-    def date_format_string(time=false)
-      @@format[:date] + ( time ? @@format[:time] : &quot;&quot; )
-    end
-    
-    def format_date(date)
-      if Date===date
-        date.strftime(date_format_string(false))
-      else
-        date.strftime(date_format_string(true))
-      end
-    end
-    
-    def has_time?(value)
-      /[0-9]:[0-9]{2}/.match(value.to_s)
-    end
-  end
-  
-  module FormHelper
-    def calendar_date_select_tag( name, value = nil, options = {})
-      calendar_options = calendar_date_select_process_options(options)
-      value = (value.strftime(calendar_options[:format]) rescue value) if (value.respond_to?(&quot;strftime&quot;))
-      
-      calendar_options.delete(:format)
-      
-      options[:id] ||= name
-      tag = calendar_options[:hidden] || calendar_options[:embedded] ? 
-        hidden_field_tag(name, value, options) :
-        text_field_tag(name, value, options)
-      
-      calendar_date_select_output(tag, calendar_options)
-    end
-    
-    # extracts any options passed into calendar date select, appropriating them to either the Javascript call or the html tag.
-    def calendar_date_select_process_options(options)
-      calendar_options = {}
-      callbacks = [:before_show, :before_close, :after_show, :after_close, :after_navigate]
-      for key in [:time, :valid_date_check, :embedded, :buttons, :format, :year_range, :month_year, :popup, :hidden] + callbacks
-        calendar_options[key] = options.delete(key) if options.has_key?(key)
-      end
-      
-      # if passing in mixed, pad it with single quotes
-      calendar_options[:time] = &quot;'mixed'&quot; if calendar_options[:time].to_s==&quot;mixed&quot;
-      calendar_options[:month_year] = &quot;'#{calendar_options[:month_year]}'&quot; if calendar_options[:month_year]
-      
-      # if we are forcing the popup, automatically set the readonly property on the input control.
-      if calendar_options[:popup].to_s == &quot;force&quot;
-        calendar_options[:popup] = &quot;'force'&quot;
-        options[:readonly] = true 
-      end
-      
-      if (vdc=calendar_options.delete(:valid_date_check))
-        if vdc.include?(&quot;;&quot;) || vdc.include?(&quot;function&quot;)
-          throw &quot;:valid_date_check function is missing a 'return' statement.  Try something like: :valid_date_check =&gt; 'if (date &gt; new(Date)) return true; else return false;'&quot; unless vdc.include?(&quot;return&quot;);
-        end
-        
-        vdc = &quot;return(#{vdc})&quot; unless vdc.include?(&quot;return&quot;)
-        vdc = &quot;function(date) { #{vdc} }&quot; unless vdc.include?(&quot;function&quot;)
-        calendar_options[:valid_date_check] = vdc
-      end
-      
-      calendar_options[:popup_by] ||= &quot;this&quot; if calendar_options[:hidden]
-      
-      # surround any callbacks with a function, if not already done so
-      for key in callbacks
-        calendar_options[key] = &quot;function(param) { #{calendar_options[key]} }&quot; unless calendar_options[key].include?(&quot;function&quot;) if calendar_options[key]
-      end
-      
-      calendar_options[:year_range] = format_year_range(calendar_options[:year_range] || 10)
-      calendar_options
-    end
-    
-    def calendar_date_select(object, method, options={})
-      obj = options.include?(:object) ? options[:object] : instance_eval(&quot;@#{object}&quot;)
-      
-      if !options.include?(:time) &amp;&amp; obj.class.respond_to?(&quot;columns_hash&quot;)
-        column_type = (obj.class.columns_hash[method.to_s].type rescue nil)
-        options[:time] = true if column_type == :datetime
-      end
-      
-      use_time = options[:time]
-      
-      if options[:time].to_s==&quot;mixed&quot;
-        use_time = false if Date===obj.send(method)
-      end
-      
-      calendar_options = calendar_date_select_process_options(options)
-      
-      options[:value] ||= 
-        if(obj.respond_to?(method) &amp;&amp; obj.send(method).respond_to?(:strftime))
-          obj.send(method).strftime(CalendarDateSelect.date_format_string(use_time))
-        elsif obj.respond_to?(&quot;#{method}_before_type_cast&quot;) 
-          obj.send(&quot;#{method}_before_type_cast&quot;)
-        elsif obj.respond_to?(method)
-          obj.send(method).to_s
-        else
-          nil
-        end
-
-      tag = ActionView::Helpers::InstanceTag.new(object, method, self, nil, options.delete(:object))
-      calendar_date_select_output(
-        tag.to_input_field_tag( (calendar_options[:hidden] || calendar_options[:embedded]) ? &quot;hidden&quot; : &quot;text&quot;, options), 
-        calendar_options
-      )
-    end  
-    
-    def calendar_date_select_output(input, calendar_options = {})
-      out = input
-      if calendar_options[:embedded]
-        uniq_id = &quot;cds_placeholder_#{(rand*100000).to_i}&quot;
-        # we need to be able to locate the target input element, so lets stick an invisible span tag here we can easily locate
-        out &lt;&lt; content_tag(:span, nil, :style =&gt; &quot;display: none; position: absolute;&quot;, :id =&gt; uniq_id)
-        
-        out &lt;&lt; javascript_tag(&quot;new CalendarDateSelect( $('#{uniq_id}').previous(), #{options_for_javascript(calendar_options)} ); &quot;)
-      else
-        out &lt;&lt; &quot; &quot;
-        
-        out &lt;&lt; image_tag(CalendarDateSelect.image, 
-            :onclick =&gt; &quot;new CalendarDateSelect( $(this).previous(), #{options_for_javascript(calendar_options)} );&quot;,
-            :style =&gt; 'border:0px; cursor:pointer;')
-      end
-      
-      out
-    end
-    
-  private
-    def format_year_range(year) # nodoc
-      return year unless year.respond_to?(:first)
-      return &quot;[#{year.first}, #{year.last}]&quot; unless year.first.respond_to?(:strftime)
-      return &quot;[#{year.first.year}, #{year.last.year}]&quot;
-    end
-  end
-end
-
-
-module ActionView
-  module Helpers
-    class FormBuilder
-      def calendar_date_select(method, options = {})
-        @template.calendar_date_select(@object_name, method, options.merge(:object =&gt; @object))
-      end
-    end
-  end
-end
+require &quot;calendar_date_select/calendar_date_select.rb&quot;
+require &quot;calendar_date_select/form_helpers.rb&quot;
+require &quot;calendar_date_select/includes_helper.rb&quot;
+
+if Object.const_defined?(:Rails) &amp;&amp; File.directory?(Rails.root + &quot;/public&quot;)
+  ActionView::Helpers::FormHelper.send(:include, CalendarDateSelect::FormHelpers)
+  ActionView::Base.send(:include, CalendarDateSelect::FormHelpers)
+  ActionView::Base.send(:include, CalendarDateSelect::IncludesHelper)
+  
+  # Filthy backwards compatibility hooks... grumble
+  if ([Rails::VERSION::MAJOR, Rails::VERSION::MINOR] &lt;=&gt; [2, 2]) == -1
+    ActionView::Helpers::InstanceTag.class_eval do
+      def self.new_with_backwards_compatibility(object_name, method_name, template_object, object = nil)
+        new(object_name, method_name, template_object, nil, object)
+      end
+    end
+    
+  else
+    ActionView::Helpers::InstanceTag.class_eval do
+      class &lt;&lt; self; alias new_with_backwards_compatibility new; end
+    end
+  end
+
+  # install files
+  unless File.exists?(RAILS_ROOT + '/public/javascripts/calendar_date_select/calendar_date_select.js')
+    ['/public', '/public/javascripts/calendar_date_select', '/public/stylesheets/calendar_date_select', '/public/images/calendar_date_select', '/public/javascripts/calendar_date_select/locale'].each do |dir|
+      source = File.dirname(__FILE__) + &quot;/../#{dir}&quot;
+      dest = RAILS_ROOT + dir
+      FileUtils.mkdir_p(dest)
+      FileUtils.cp(Dir.glob(source+'/*.*'), dest)
+    end
+  end
+end
\ No newline at end of file</diff>
      <filename>vendor/plugins/calendar_date_select/lib/calendar_date_select.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,22 @@
-// CalendarDateSelect version 1.10.0 - a prototype based date picker
-// Questions, comments, bugs? - email the Author - Tim Harper &lt;&quot;timseeharper@gmail.seeom&quot;.gsub(&quot;see&quot;, &quot;c&quot;)&gt; 
+// CalendarDateSelect version 1.13 - a prototype based date picker
+// Questions, comments, bugs? - see the project page: http://code.google.com/p/calendardateselect
 if (typeof Prototype == 'undefined') alert(&quot;CalendarDateSelect Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (.g. &lt;%= javascript_include_tag :defaults %&gt;) *before* it includes calendar_date_select.js (.g. &lt;%= calendar_date_select_includes %&gt;).&quot;);
 if (Prototype.Version &lt; &quot;1.6&quot;) alert(&quot;Prototype 1.6.0 is required.  If using earlier version of prototype, please use calendar_date_select version 1.8.3&quot;);
 
 Element.addMethods({
   purgeChildren: function(element) { $A(element.childNodes).each(function(e){$(e).remove();}); },
   build: function(element, type, options, style) {
-    var newElement = Element.build(type, options, style);
+    var newElement = Element.buildAndAppend(type, options, style);
     element.appendChild(newElement);
     return newElement;
   }
 });
 
-Element.build = function(type, options, style)
+Element.buildAndAppend = function(type, options, style)
 {
   var e = $(document.createElement(type));
-  $H(options).each(function(pair) { eval(&quot;e.&quot; + pair.key + &quot; = pair.value&quot; ); });
-  if (style) 
-    $H(style).each(function(pair) { eval(&quot;e.style.&quot; + pair.key + &quot; = pair.value&quot; ); });
+  $H(options).each(function(pair) { e[pair.key] = pair.value });
+  if (style) e.setStyle(style);
   return e;
 };
 nil = null;
@@ -47,7 +46,8 @@ window.f_scrollTop = function() { return ([window.pageYOffset ? window.pageYOffs
 _translations = {
   &quot;OK&quot;: &quot;OK&quot;,
   &quot;Now&quot;: &quot;Now&quot;,
-  &quot;Today&quot;: &quot;Today&quot;
+  &quot;Today&quot;: &quot;Today&quot;,
+  &quot;Clear&quot;: &quot;Clear&quot;
 }
 SelectBox = Class.create();
 SelectBox.prototype = {
@@ -72,7 +72,7 @@ CalendarDateSelect.prototype = {
   initialize: function(target_element, options) {
     this.target_element = $(target_element); // make sure it's an element, not a string
     if (!this.target_element) { alert(&quot;Target element &quot; + target_element + &quot; not found!&quot;); return false;}
-    if (down = this.target_element.down(&quot;INPUT&quot;)) this.target_element = down;
+    if (this.target_element.tagName != &quot;INPUT&quot;) this.target_element = this.target_element.down(&quot;INPUT&quot;)
     
     this.target_element.calendar_date_select = this;
     this.last_click_at = 0;
@@ -82,8 +82,8 @@ CalendarDateSelect.prototype = {
       popup: nil,
       time: false,
       buttons: true,
+      clear_button: true,
       year_range: 10,
-      calendar_div: nil,
       close_on_click: nil,
       minute_interval: 5,
       popup_by: this.target_element,
@@ -91,39 +91,16 @@ CalendarDateSelect.prototype = {
       onchange: this.target_element.onchange,
       valid_date_check: nil
     }).merge(options || {});
-    
-    this.selection_made = $F(this.target_element).strip()!==&quot;&quot;;
     this.use_time = this.options.get(&quot;time&quot;);
-    
-    this.callback(&quot;before_show&quot;)
-    this.calendar_div = $(this.options.get(&quot;calendar_div&quot;));
-    
     this.parseDate();
-    
-    // by default, stick it by the target element (if embedded, that's where we'll want it to show up)
-    if (this.calendar_div == nil) { this.calendar_div = $( this.options.get(&quot;embedded&quot;) ? this.target_element.parentNode : document.body ).build('div'); }
-    if (!this.options.get(&quot;embedded&quot;)) this.calendar_div.setStyle( { position:&quot;absolute&quot;, visibility: &quot;hidden&quot;, left:0, top:0 } )
-    
-    this.calendar_div.addClassName(&quot;calendar_date_select&quot;);
-    
-    if (this.options.get(&quot;embedded&quot;)) this.options.set(&quot;close_on_click&quot;, false);
-    // logic for close on click
-    if (this.options.get(&quot;close_on_click&quot;)===nil )
-    {
-      if (this.options.get(&quot;time&quot;))
-        this.options.set(&quot;close_on_click&quot;, false);
-      else
-        this.options.set(&quot;close_on_click&quot;, true);
-    }
-    
-    // set the click handler to check if a user has clicked away from the document
+    this.callback(&quot;before_show&quot;)
+    this.initCalendarDiv();
     if(!this.options.get(&quot;embedded&quot;)) {
+      this.positionCalendarDiv()
+      // set the click handler to check if a user has clicked away from the document
       Event.observe(document, &quot;mousedown&quot;, this.closeIfClickedOut_handler = this.closeIfClickedOut.bindAsEventListener(this));
       Event.observe(document, &quot;keypress&quot;, this.keyPress_handler = this.keyPress.bindAsEventListener(this));
     }
-    
-    this.init();
-    if(!this.options.get(&quot;embedded&quot;)) { this.positionCalendarDiv() };
     this.callback(&quot;after_show&quot;)
   },
   positionCalendarDiv: function() {
@@ -140,9 +117,18 @@ CalendarDateSelect.prototype = {
     this.calendar_div.setStyle({visibility:&quot;&quot;});
     
     // draw an iframe behind the calendar -- ugly hack to make IE 6 happy
-    if(navigator.appName==&quot;Microsoft Internet Explorer&quot;) this.iframe = $(document.body).build(&quot;iframe&quot;, {className: &quot;ie6_blocker&quot;}, { left: left_px, top: top_px, height: c_height.toString()+&quot;px&quot;, width: c_width.toString()+&quot;px&quot;, border: &quot;0px&quot;})
+    if(navigator.appName==&quot;Microsoft Internet Explorer&quot;) this.iframe = $(document.body).build(&quot;iframe&quot;, {src: &quot;javascript:false&quot;, className: &quot;ie6_blocker&quot;}, { left: left_px, top: top_px, height: c_height.toString()+&quot;px&quot;, width: c_width.toString()+&quot;px&quot;, border: &quot;0px&quot;})
   },
-  init: function() {
+  initCalendarDiv: function() {
+    if (this.options.get(&quot;embedded&quot;)) {
+      var parent = this.target_element.parentNode;
+      var style = {}
+    } else {
+      var parent = document.body
+      var style = { position:&quot;absolute&quot;, visibility: &quot;hidden&quot;, left:0, top:0 }
+    }
+    this.calendar_div = $(parent).build('div', {className: &quot;calendar_date_select&quot;}, style);
+    
     var that = this;
     // create the divs
     $w(&quot;top header body buttons footer bottom&quot;).each(function(name) {
@@ -152,7 +138,7 @@ CalendarDateSelect.prototype = {
     this.initHeaderDiv();
     this.initButtonsDiv();
     this.initCalendarGrid();
-    this.updateFooter(&quot;&amp;nbsp;&quot;);
+    this.updateFooter(&quot;&amp;#160;&quot;);
     
     this.refresh();
     this.setUseTime(this.use_time);
@@ -231,14 +217,14 @@ CalendarDateSelect.prototype = {
     } else if (! this.options.get(&quot;buttons&quot;)) buttons_div.remove();
     
     if (this.options.get(&quot;buttons&quot;)) {
-      buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;nbsp;&quot;});
+      buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;#160;&quot;});
       if (this.options.get(&quot;time&quot;)==&quot;mixed&quot; || !this.options.get(&quot;time&quot;)) b = buttons_div.build(&quot;a&quot;, {
           innerHTML: _translations[&quot;Today&quot;],
           href: &quot;#&quot;,
           onclick: function() {this.today(false); return false;}.bindAsEventListener(this)
         });
       
-      if (this.options.get(&quot;time&quot;)==&quot;mixed&quot;) buttons_div.build(&quot;span&quot;, {innerHTML: &quot; | &quot;, className:&quot;button_seperator&quot;})
+      if (this.options.get(&quot;time&quot;)==&quot;mixed&quot;) buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;#160;|&amp;#160;&quot;, className:&quot;button_seperator&quot;})
       
       if (this.options.get(&quot;time&quot;)) b = buttons_div.build(&quot;a&quot;, {
         innerHTML: _translations[&quot;Now&quot;],
@@ -246,11 +232,15 @@ CalendarDateSelect.prototype = {
         onclick: function() {this.today(true); return false}.bindAsEventListener(this)
       });
       
-      if (!this.options.get(&quot;embedded&quot;))
+      if (!this.options.get(&quot;embedded&quot;) &amp;&amp; !this.closeOnClick())
       {
-        buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;nbsp;&quot;});
+        buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;#160;|&amp;#160;&quot;, className:&quot;button_seperator&quot;})
         buttons_div.build(&quot;a&quot;, { innerHTML: _translations[&quot;OK&quot;], href: &quot;#&quot;, onclick: function() {this.close(); return false;}.bindAsEventListener(this) });
       }
+      if (this.options.get('clear_button')) {
+        buttons_div.build(&quot;span&quot;, {innerHTML: &quot;&amp;#160;|&amp;#160;&quot;, className:&quot;button_seperator&quot;})
+        buttons_div.build(&quot;a&quot;, { innerHTML: _translations[&quot;Clear&quot;], href: &quot;#&quot;, onclick: function() {this.clearDate(); if (!this.options.get(&quot;embedded&quot;)) this.close(); return false;}.bindAsEventListener(this) });
+      }
     }
   },
   refresh: function ()
@@ -287,7 +277,7 @@ CalendarDateSelect.prototype = {
     
     if (this.today_cell) this.today_cell.removeClassName(&quot;today&quot;);
     
-    if ( $R( 0, 42 ).include(days_until = this.beginning_date.daysDistance(today)) ) {
+    if ( $R( 0, 41 ).include(days_until = this.beginning_date.stripTime().daysDistance(today)) ) {
       this.today_cell = this.calendar_day_grid[days_until];
       this.today_cell.addClassName(&quot;today&quot;);
     }
@@ -327,12 +317,10 @@ CalendarDateSelect.prototype = {
     this.updateFooter(hover_date.toFormattedString(this.use_time));
   },
   dayHoverOut: function(element) { this.updateFooter(); },
+  clearSelectedClass: function() {if (this.selected_cell) this.selected_cell.removeClassName(&quot;selected&quot;);},
   setSelectedClass: function() {
     if (!this.selection_made) return;
-    
-    // clear selection
-    if (this.selected_cell) this.selected_cell.removeClassName(&quot;selected&quot;);
-    
+    this.clearSelectedClass()
     if ($R(0,42).include( days_until = this.beginning_date.stripTime().daysDistance(this.selected_date.stripTime()) )) {
       this.selected_cell = this.calendar_day_grid[days_until];
       this.selected_cell.addClassName(&quot;selected&quot;);
@@ -340,11 +328,12 @@ CalendarDateSelect.prototype = {
   },
   reparse: function() { this.parseDate(); this.refresh(); },
   dateString: function() {
-    return (this.selection_made) ? this.selected_date.toFormattedString(this.use_time) : &quot;&amp;nbsp;&quot;;
+    return (this.selection_made) ? this.selected_date.toFormattedString(this.use_time) : &quot;&amp;#160;&quot;;
   },
   parseDate: function()
   {
     var value = $F(this.target_element).strip()
+    this.selection_made = (value != &quot;&quot;);
     this.date = value==&quot;&quot; ? NaN : Date.parseFormattedString(this.options.get(&quot;date&quot;) || value);
     if (isNaN(this.date)) this.date = new Date();
     if (!this.validYear(this.date.getFullYear())) this.date.setYear( (this.date.getFullYear() &lt; this.yearRange().start) ? this.yearRange().start : this.yearRange().end);
@@ -353,6 +342,14 @@ CalendarDateSelect.prototype = {
     this.date.setDate(1);
   },
   updateFooter:function(text) { if (!text) text = this.dateString(); this.footer_div.purgeChildren(); this.footer_div.build(&quot;span&quot;, {innerHTML: text }); },
+  clearDate:function() {
+    if ((this.target_element.disabled || this.target_element.readOnly) &amp;&amp; this.options.get(&quot;popup&quot;) != &quot;force&quot;) return false;
+    var last_value = this.target_element.value;
+    this.target_element.value = &quot;&quot;;
+    this.clearSelectedClass();
+    this.updateFooter('&amp;#160;');
+    if (last_value!=this.target_element.value) this.callback(&quot;onchange&quot;);
+  },
   updateSelectedDate:function(partsOrElement, via_click) {
     var parts = $H(partsOrElement);
     if ((this.target_element.disabled || this.target_element.readOnly) &amp;&amp; this.options.get(&quot;popup&quot;) != &quot;force&quot;) return false;
@@ -378,12 +375,19 @@ CalendarDateSelect.prototype = {
     this.setSelectedClass();
     
     if (this.selection_made) this.updateValue();
-    if (this.options.get(&quot;close_on_click&quot;)) { this.close(); }
+    if (this.closeOnClick()) { this.close(); }
     if (via_click &amp;&amp; !this.options.get(&quot;embedded&quot;)) {
       if ((new Date() - this.last_click_at) &lt; 333) this.close();
       this.last_click_at = new Date();
     }
   },
+  closeOnClick: function() {
+    if (this.options.get(&quot;embedded&quot;)) return false;
+    if (this.options.get(&quot;close_on_click&quot;)===nil )
+      return (this.options.get(&quot;time&quot;)) ? false : true
+    else
+      return (this.options.get(&quot;close_on_click&quot;))
+  },
   navMonth: function(month) { (target_date = new Date(this.date)).setMonth(month); return (this.navTo(target_date)); },
   navYear: function(year) { (target_date = new Date(this.date)).setYear(year); return (this.navTo(target_date)); },
   navTo: function(date) {
@@ -426,7 +430,7 @@ CalendarDateSelect.prototype = {
     Event.stopObserving(document, &quot;keypress&quot;, this.keyPress_handler);
     this.calendar_div.remove(); this.closed = true;
     if (this.iframe) this.iframe.remove();
-    if (this.target_element.type!=&quot;hidden&quot;) this.target_element.focus();
+    if (this.target_element.type != &quot;hidden&quot; &amp;&amp; ! this.target_element.disabled) this.target_element.focus();
     this.callback(&quot;after_close&quot;);
   },
   closeIfClickedOut: function(e) {</diff>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/calendar_date_select.js</filename>
    </modified>
    <modified>
      <diff>@@ -8,10 +8,18 @@ Date.prototype.toFormattedString = function(include_time){
   return str;
 }
 Date.parseFormattedString = function (string) {
-  var regexp = '([0-9]{1,2})\.(([0-9]{1,2})\.(([0-9]{4})( ([0-9]{1,2}):([0-9]{2})? *)?)?)?';
+  var regexp = '([0-9]{1,2})\.(([0-9]{1,2})\.(([0-9]{2,4})( ([0-9]{1,2}):([0-9]{2})? *)?)?)?';
   var d = string.match(new RegExp(regexp, &quot;i&quot;));
   if (d==null) return Date.parse(string); // at least give javascript a crack at it.
   var offset = 0;
+  if (d[5] &amp;&amp; d[5].length == 2) {
+    // we got only two digits for the year...
+    d[5] = Number(d[5]);
+    if (d[5] &gt; 30)
+      d[5] += 1900;
+    else
+      d[5] += 2000;
+  }
   var date = new Date(d[5], 0, 1);
   if (d[3]) { date.setMonth(d[3] - 1); }
   if (d[5]) { date.setDate(d[1]); }</diff>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_finnish.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,36 +1,36 @@
-Date.prototype.toFormattedString = function(include_time){
-  str = this.getFullYear() + &quot;-&quot; + Date.padded2(this.getMonth() + 1) + &quot;-&quot; +Date.padded2(this.getDate()); 
-
-if (include_time) { hour=this.getHours(); str += &quot; &quot; + this.getAMPMHour() + &quot;:&quot; + this.getPaddedMinutes() + &quot; &quot; + this.getAMPM() }
-return str;
-}
-
-Date.parseFormattedString = function (string) {
-  var regexp = &quot;([0-9]{4})(-([0-9]{2})(-([0-9]{2})&quot; +
-      &quot;( ([0-9]{1,2}):([0-9]{2})? *(pm|am)&quot; +
-      &quot;?)?)?)?&quot;;
-  var d = string.match(new RegExp(regexp, &quot;i&quot;));
-  if (d==null) return Date.parse(string); // at least give javascript a crack at it.
-  var offset = 0;
-  var date = new Date(d[1], 0, 1);
-  if (d[3]) { date.setMonth(d[3] - 1); }
-  if (d[5]) { date.setDate(d[5]); }
-  if (d[7]) {
-    hours = parseInt(d[7], 10);
-    offset=0;
-    is_pm = (d[9].toLowerCase()==&quot;pm&quot;)
-    if (is_pm &amp;&amp; hours &lt;= 11) hours+=12;
-    if (!is_pm &amp;&amp; hours == 12) hours=0;
-    date.setHours(hours); 
-    
-  }
-  if (d[8]) { date.setMinutes(d[8]); }
-  if (d[10]) { date.setSeconds(d[10]); }
-  if (d[12]) { date.setMilliseconds(Number(&quot;0.&quot; + d[12]) * 1000); }
-  if (d[14]) {
-      offset = (Number(d[16]) * 60) + Number(d[17]);
-      offset *= ((d[15] == '-') ? 1 : -1);
-  }
-
-  return date;
+Date.prototype.toFormattedString = function(include_time){
+  str = this.getFullYear() + &quot;-&quot; + Date.padded2(this.getMonth() + 1) + &quot;-&quot; +Date.padded2(this.getDate()); 
+
+if (include_time) { hour=this.getHours(); str += &quot; &quot; + this.getAMPMHour() + &quot;:&quot; + this.getPaddedMinutes() + &quot; &quot; + this.getAMPM() }
+return str;
+}
+
+Date.parseFormattedString = function (string) {
+  var regexp = &quot;([0-9]{4})(-([0-9]{2})(-([0-9]{2})&quot; +
+      &quot;( ([0-9]{1,2}):([0-9]{2})? *(pm|am)&quot; +
+      &quot;?)?)?)?&quot;;
+  var d = string.match(new RegExp(regexp, &quot;i&quot;));
+  if (d==null) return Date.parse(string); // at least give javascript a crack at it.
+  var offset = 0;
+  var date = new Date(d[1], 0, 1);
+  if (d[3]) { date.setMonth(d[3] - 1); }
+  if (d[5]) { date.setDate(d[5]); }
+  if (d[7]) {
+    hours = parseInt(d[7], 10);
+    offset=0;
+    is_pm = (d[9].toLowerCase()==&quot;pm&quot;)
+    if (is_pm &amp;&amp; hours &lt;= 11) hours+=12;
+    if (!is_pm &amp;&amp; hours == 12) hours=0;
+    date.setHours(hours); 
+    
+  }
+  if (d[8]) { date.setMinutes(d[8]); }
+  if (d[10]) { date.setSeconds(d[10]); }
+  if (d[12]) { date.setMilliseconds(Number(&quot;0.&quot; + d[12]) * 1000); }
+  if (d[14]) {
+      offset = (Number(d[16]) * 60) + Number(d[17]);
+      offset *= ((d[15] == '-') ? 1 : -1);
+  }
+
+  return date;
 }
\ No newline at end of file</diff>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_hyphen_ampm.js</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 
 Date.prototype.toFormattedString = function(include_time){
   str = this.getDate() + &quot;/&quot; + (this.getMonth() + 1) + &quot;/&quot; + this.getFullYear();
-  if (include_time) { hour=this.getHours(); str += &quot; &quot; + this.getAMPMHour() + &quot;:&quot; + this.getPaddedMinutes() }
+  if (include_time) { str += &quot; &quot; + this.getHours() + &quot;:&quot; + this.getPaddedMinutes() }
   return str;
 }
 </diff>
      <filename>vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_italian.js</filename>
    </modified>
    <modified>
      <diff>@@ -3,3 +3,5 @@ tmtags
 .emacs-project
 *~
 pkg
+doc
+email.txt</diff>
      <filename>vendor/plugins/rspec-rails/.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,64 +1,51 @@
-$:.unshift('lib')
-require 'rake'
-require 'rake/rdoctask'
 require 'rubygems'
-require 'rake/gempackagetask'
+require 'hoe'
+require './lib/spec/rails/version'
+require 'cucumber/rake/task'
 
-begin
-  
-  module Spec
-    module VERSION
-      BUILD_TIME_UTC = 'place_holder'
-    end
-  end  
-  
-  require 'spec/rails/version'
+$:.unshift(File.join(File.dirname(__FILE__), &quot;/../rspec/lib&quot;))
 
-rescue
-  # Catch the BUILD_TIME_UTC verification exception.
-  # This exception is not relevant when running these tasks and hinders the gem installation.
-end
+require 'spec/rake/spectask'
 
-desc 'Generate RDoc'
-rd = Rake::RDocTask.new do |rdoc|
-  rdoc.rdoc_dir = '../doc/output/rdoc-rails'
-  rdoc.options &lt;&lt; '--title' &lt;&lt; 'Spec::Rails' &lt;&lt; '--line-numbers' &lt;&lt; '--inline-source' &lt;&lt; '--main' &lt;&lt; 'Spec::Rails'
-  rdoc.rdoc_files.include('MIT-LICENSE', 'lib/**/*.rb')
+class Hoe
+  def extra_deps
+    @extra_deps.reject! { |x| Array(x).first == 'hoe' }
+    @extra_deps
+  end
 end
 
-PKG_NAME = &quot;rspec-rails&quot;
-PKG_VERSION   = Spec::Rails::VERSION::STRING
-PKG_FILE_NAME = &quot;#{PKG_NAME}-#{PKG_VERSION}&quot;
-PKG_FILES = FileList[
-  '[A-Z]*',
-  'lib/**/*.rb', 
-  'spec/**/*',
-  'spec_resources/**/*',
-  'generators/**/*',
-  'stories/**/*',
-  'tasks/**/*'
-]
+Hoe.new('rspec-rails', Spec::Rails::VERSION::STRING) do |p|
+  p.summary = Spec::Rails::VERSION::SUMMARY
+  p.url = 'http://rspec.info/'
+  p.description = &quot;Behaviour Driven Development for Ruby on Rails.&quot;
+  p.rubyforge_name = 'rspec'
+  p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
+  p.extra_deps = [[&quot;rspec&quot;,&quot;1.1.11.4&quot;]]
+  p.extra_dev_deps = [[&quot;cucumber&quot;,&quot;&gt;= 0.1.13&quot;]]
+  p.remote_rdoc_dir = &quot;rspec-rails/#{Spec::Rails::VERSION::STRING}&quot;
+end
 
-rspec_rails = Gem::Specification.new do |s|
-  s.name = PKG_NAME
-  s.version = PKG_VERSION
-  s.summary = Spec::Rails::VERSION::DESCRIPTION
-  s.description = &lt;&lt;-EOF
-    rpsec-rails is a Ruby on Rails plugin that allows you to drive the development
-    of your RoR application using RSpec, a framework that aims to enable BDD in Ruby.
-  EOF
+['audit','test','test_deps','default','post_blog', 'release'].each do |task|
+  Rake.application.instance_variable_get('@tasks').delete(task)
+end
 
-  s.files = PKG_FILES.to_a
-  s.require_path = 'lib'
+task :release =&gt; [:clean, :package] do |t|
+  version = ENV[&quot;VERSION&quot;] or abort &quot;Must supply VERSION=x.y.z&quot;
+  abort &quot;Versions don't match #{version} vs #{Spec::Rails::VERSION::STRING}&quot; unless version == Spec::Rails::VERSION::STRING
+  pkg = &quot;pkg/rspec-rails-#{version}&quot;
 
-  s.has_rdoc = true
-  s.rdoc_options = rd.options
+  rubyforge = RubyForge.new.configure
+  puts &quot;Logging in to rubyforge ...&quot;
+  rubyforge.login
 
-  s.author = &quot;RSpec Development Team&quot;
-  s.email = &quot;rspec-devel@rubyforge.org&quot;
-  s.homepage = Spec::Rails::VERSION::URL  
-  s.platform = Gem::Platform::RUBY
+  puts &quot;Releasing rspec-rails version #{version} ...&quot;
+  [&quot;#{pkg}.gem&quot;, &quot;#{pkg}.tgz&quot;].each do |file|
+    rubyforge.add_file('rspec', 'rspec', Spec::Rails::VERSION::STRING, file)
+  end
 end
 
-Rake::GemPackageTask.new(rspec_rails) do |pkg|
-end
+Spec::Rake::SpecTask.new
+
+Cucumber::Rake::Task.new
+
+task :default =&gt; [:features]
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec-rails/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,7 @@ class RspecGenerator &lt; Rails::Generator::Base
                               Config::CONFIG['ruby_install_name'])
 
   def initialize(runtime_args, runtime_options = {})
+    Dir.mkdir('lib/tasks') unless File.directory?('lib/tasks')
     super
   end
 
@@ -13,16 +14,16 @@ class RspecGenerator &lt; Rails::Generator::Base
     record do |m|
       script_options     = { :chmod =&gt; 0755, :shebang =&gt; options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
 
-      m.directory 'spec'
-      m.template  'spec_helper.rb',                'spec/spec_helper.rb'
-      m.file      'spec.opts',                     'spec/spec.opts'
-      m.file      'rcov.opts',                     'spec/rcov.opts'
-      m.file      'script/spec_server',            'script/spec_server', script_options
+      m.file      'rspec.rake',                    'lib/tasks/rspec.rake'
+
+      m.file      'script/autospec',               'script/autospec',    script_options
       m.file      'script/spec',                   'script/spec',        script_options
+      m.file      'script/spec_server',            'script/spec_server', script_options
 
-      m.directory 'stories'
-      m.file      'all_stories.rb',                'stories/all.rb'
-      m.file      'stories_helper.rb',             'stories/helper.rb'
+      m.directory 'spec'
+      m.file      'rcov.opts',                     'spec/rcov.opts'
+      m.file      'spec.opts',                     'spec/spec.opts'
+      m.template  'spec_helper.rb',                'spec/spec_helper.rb'
     end
   end
 </diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec/rspec_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
 $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + &quot;/../vendor/plugins/rspec/lib&quot;))
+require 'rubygems'
 require 'spec'
 exit ::Spec::Runner::CommandLine.run(::Spec::Runner::OptionParser.parse(ARGV, STDERR, STDOUT))</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec/templates/script/spec</filename>
    </modified>
    <modified>
      <diff>@@ -13,17 +13,21 @@ module Spec
       def run(argv, stderr, stdout)
         $stdout = stdout
         $stderr = stderr
-
-        base = ActiveRecord::Base
-        def base.clear_reloadable_connections!
-          active_connections.each do |name, conn|
-            if conn.requires_reloading?
-              conn.disconnect!
-              active_connections.delete(name)
+        
+        unless ActiveRecord::Base.respond_to?(:clear_reloadable_connections!)
+          base = ActiveRecord::Base
+          def base.clear_reloadable_connections!
+            active_connections.each do |name, conn|
+              if conn.requires_reloading?
+                conn.disconnect!
+                active_connections.delete(name)
+              end
             end
           end
         end
 
+        ActiveRecord::Base.clear_reloadable_connections!
+
         if ActionController.const_defined?(:Dispatcher)
           dispatcher = ::ActionController::Dispatcher.new($stdout)
           dispatcher.cleanup_application
@@ -35,8 +39,13 @@ module Spec
         if Object.const_defined?(:Fixtures) &amp;&amp; Fixtures.respond_to?(:reset_cache)
           Fixtures.reset_cache
         end
+        
+        if ::ActiveSupport.const_defined?(:Dependencies)
+          ::ActiveSupport::Dependencies.mechanism = :load
+        else
+          ::Dependencies.mechanism = :load
+        end
 
-        ::Dependencies.mechanism = :load
         require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
         load File.dirname(__FILE__) + '/../spec/spec_helper.rb'
 </diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec/templates/script/spec_server</filename>
    </modified>
    <modified>
      <diff>@@ -43,5 +43,5 @@ Spec::Runner.configure do |config|
   #
   # == Notes
   # 
-  # For more information take a look at Spec::Example::Configuration and Spec::Runner
+  # For more information take a look at Spec::Runner::Configuration and Spec::Runner
 end</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec/templates/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,5 @@
 require 'rails_generator/generators/components/model/model_generator'
+require File.dirname(__FILE__) + '/../rspec_default_values'
 
 class RspecModelGenerator &lt; ModelGenerator
 
@@ -11,12 +12,16 @@ class RspecModelGenerator &lt; ModelGenerator
       # Model, spec, and fixture directories.
       m.directory File.join('app/models', class_path)
       m.directory File.join('spec/models', class_path)
-      m.directory File.join('spec/fixtures', class_path)
+      unless options[:skip_fixture]
+        m.directory File.join('spec/fixtures', class_path)
+      end
 
       # Model class, spec and fixtures.
       m.template 'model:model.rb',      File.join('app/models', class_path, &quot;#{file_name}.rb&quot;)
-      m.template 'model:fixtures.yml',  File.join('spec/fixtures', class_path, &quot;#{table_name}.yml&quot;)
       m.template 'model_spec.rb',       File.join('spec/models', class_path, &quot;#{file_name}_spec.rb&quot;)
+      unless options[:skip_fixture]
+        m.template 'model:fixtures.yml',  File.join('spec/fixtures', &quot;#{table_name}.yml&quot;)
+      end
 
       unless options[:skip_migration]
         m.migration_template 'model:migration.rb', 'db/migrate', :assigns =&gt; {</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_model/rspec_model_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,5 @@
+require File.dirname(__FILE__) + '/../rspec_default_values'
+
 class RspecScaffoldGenerator &lt; Rails::Generator::NamedBase
   default_options :skip_migration =&gt; false
   
@@ -140,20 +142,6 @@ end
 module Rails
   module Generator
     class GeneratedAttribute
-      def default_value
-        @default_value ||= case type
-          when :int, :integer               then &quot;\&quot;1\&quot;&quot;
-          when :float                       then &quot;\&quot;1.5\&quot;&quot;
-          when :decimal                     then &quot;\&quot;9.99\&quot;&quot;
-          when :datetime, :timestamp, :time then &quot;Time.now&quot;
-          when :date                        then &quot;Date.today&quot;
-          when :string, :text               then &quot;\&quot;value for #{@name}\&quot;&quot;
-          when :boolean                     then &quot;false&quot;
-          else
-            &quot;&quot;
-        end      
-      end
-
       def input_type
         @input_type ||= case type
           when :text                        then &quot;textarea&quot;</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/rspec_scaffold_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,327 +1,173 @@
 require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_depth %&gt;/../spec_helper')
 
 describe &lt;%= controller_class_name %&gt;Controller do
-  describe &quot;responding to GET /&lt;%= table_name %&gt;&quot; do
 
-    before(:each) do
-      &lt;%= class_name %&gt;.stub!(:find)
-    end
-  
-    def do_get
-      get :index
-    end
-  
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
-
-    it &quot;should render the 'index' template&quot; do
-      do_get
-      response.should render_template('index')
-    end
-  
-    it &quot;should find all &lt;%= table_name %&gt;&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).with(:all).and_return([@&lt;%= file_name %&gt;])
-      do_get
-    end
-  
-    it &quot;should assign the found &lt;%= table_name %&gt; for the view&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).and_return([&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;)] )
-      do_get
-      assigns[:&lt;%= table_name %&gt;].should == [&lt;%= file_name %&gt;]
-    end
+  def mock_&lt;%= file_name %&gt;(stubs={})
+    @mock_&lt;%= file_name %&gt; ||= mock_model(&lt;%= class_name %&gt;, stubs)
   end
-
-  describe &quot;responding to GET /&lt;%= table_name %&gt;.xml&quot; do
-
-    before(:each) do
-      &lt;%= class_name %&gt;.stub!(:find)
-    end
   
-    def do_get
-      @request.env[&quot;HTTP_ACCEPT&quot;] = &quot;application/xml&quot;
-      get :index
-    end
-  
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
+  describe &quot;responding to GET index&quot; do
 
-    it &quot;should find all &lt;%= table_name %&gt;&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).with(:all)
-      do_get
-    end
-  
-    it &quot;should render the found &lt;%= table_name %&gt; as xml&quot; do
-      &lt;%= file_name.pluralize %&gt; = mock(&quot;Array of &lt;%= class_name.pluralize %&gt;&quot;)
-      &lt;%= class_name %&gt;.should_receive(:find).and_return(&lt;%= file_name.pluralize %&gt;)
-      &lt;%= file_name.pluralize %&gt;.should_receive(:to_xml).and_return(&quot;generated XML&quot;)
-      do_get
-      response.body.should == &quot;generated XML&quot;
+    it &quot;should expose all &lt;%= table_name.pluralize %&gt; as @&lt;%= table_name.pluralize %&gt;&quot; do
+      &lt;%= class_name %&gt;.should_receive(:find).with(:all).and_return([mock_&lt;%= file_name %&gt;])
+      get :index
+      assigns[:&lt;%= table_name %&gt;].should == [mock_&lt;%= file_name %&gt;]
     end
-  end
 
-  describe &quot;responding to GET /&lt;%= table_name %&gt;/1&quot; do
-
-    before(:each) do
-      &lt;%= class_name %&gt;.stub!(:find)
-    end
+    describe &quot;with mime type of xml&quot; do
   
-    def do_get(id=&quot;1&quot;)
-      get :show, :id =&gt; id
+      it &quot;should render all &lt;%= table_name.pluralize %&gt; as xml&quot; do
+        request.env[&quot;HTTP_ACCEPT&quot;] = &quot;application/xml&quot;
+        &lt;%= class_name %&gt;.should_receive(:find).with(:all).and_return(&lt;%= file_name.pluralize %&gt; = mock(&quot;Array of &lt;%= class_name.pluralize %&gt;&quot;))
+        &lt;%= file_name.pluralize %&gt;.should_receive(:to_xml).and_return(&quot;generated XML&quot;)
+        get :index
+        response.body.should == &quot;generated XML&quot;
+      end
+    
     end
 
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
-  
-    it &quot;should render the 'show' template&quot; do
-      do_get
-      response.should render_template('show')
-    end
-  
-    it &quot;should find the &lt;%= file_name %&gt; requested&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;)
-      do_get(&quot;37&quot;)
-    end
-  
-    it &quot;should assign the found &lt;%= file_name %&gt; for the view&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).and_return(&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;))
-      do_get
-      assigns[:&lt;%= file_name %&gt;].should equal(&lt;%= file_name %&gt;)
-    end
   end
 
-  describe &quot;responding to GET /&lt;%= table_name %&gt;/1.xml&quot; do
+  describe &quot;responding to GET show&quot; do
 
-    before(:each) do
-      &lt;%= class_name %&gt;.stub!(:find)
-    end
-  
-    def do_get(id=&quot;1&quot;)
-      @request.env[&quot;HTTP_ACCEPT&quot;] = &quot;application/xml&quot;
-      get :show, :id =&gt; id
+    it &quot;should expose the requested &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+      get :show, :id =&gt; &quot;37&quot;
+      assigns[:&lt;%= file_name %&gt;].should equal(mock_&lt;%= file_name %&gt;)
     end
+    
+    describe &quot;with mime type of xml&quot; do
+
+      it &quot;should render the requested &lt;%= file_name %&gt; as xml&quot; do
+        request.env[&quot;HTTP_ACCEPT&quot;] = &quot;application/xml&quot;
+        &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+        mock_&lt;%= file_name %&gt;.should_receive(:to_xml).and_return(&quot;generated XML&quot;)
+        get :show, :id =&gt; &quot;37&quot;
+        response.body.should == &quot;generated XML&quot;
+      end
 
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
-  
-    it &quot;should find the &lt;%= file_name %&gt; requested&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;)
-      do_get(&quot;37&quot;)
-    end
-  
-    it &quot;should render the found &lt;%= file_name %&gt; as xml&quot; do
-      &lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;)
-      &lt;%= class_name %&gt;.should_receive(:find).and_return(&lt;%= file_name %&gt;)
-      &lt;%= file_name %&gt;.should_receive(:to_xml).and_return(&quot;generated XML&quot;)
-      do_get
-      response.body.should == &quot;generated XML&quot;
     end
+    
   end
 
-  describe &quot;responding to GET /&lt;%= table_name %&gt;/new&quot; do
-
-    def do_get
+  describe &quot;responding to GET new&quot; do
+  
+    it &quot;should expose a new &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+      &lt;%= class_name %&gt;.should_receive(:new).and_return(mock_&lt;%= file_name %&gt;)
       get :new
+      assigns[:&lt;%= file_name %&gt;].should equal(mock_&lt;%= file_name %&gt;)
     end
 
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
-  
-    it &quot;should render the 'new' template&quot; do
-      do_get
-      response.should render_template('new')
-    end
-  
-    it &quot;should create an new &lt;%= file_name %&gt;&quot; do
-      &lt;%= class_name %&gt;.should_receive(:new)
-      do_get
-    end
-  
-    it &quot;should not save the new &lt;%= file_name %&gt;&quot; do
-      &lt;%= class_name %&gt;.should_receive(:new).and_return(&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;))
-      &lt;%= file_name %&gt;.should_not_receive(:save)
-      do_get
-    end
-  
-    it &quot;should assign the new &lt;%= file_name %&gt; for the view&quot; do
-      &lt;%= class_name %&gt;.should_receive(:new).and_return(&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;))
-      do_get
-      assigns[:&lt;%= file_name %&gt;].should equal(&lt;%= file_name %&gt;)
-    end
   end
 
-  describe &quot;responding to GET /&lt;%= table_name %&gt;/1/edit&quot; do
-
-    before(:each) do
-      &lt;%= class_name %&gt;.stub!(:find)
-    end
+  describe &quot;responding to GET edit&quot; do
   
-    def do_get
-      get :edit, :id =&gt; &quot;1&quot;
+    it &quot;should expose the requested &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+      get :edit, :id =&gt; &quot;37&quot;
+      assigns[:&lt;%= file_name %&gt;].should equal(mock_&lt;%= file_name %&gt;)
     end
 
-    it &quot;should succeed&quot; do
-      do_get
-      response.should be_success
-    end
-  
-    it &quot;should render the 'edit' template&quot; do
-      do_get
-      response.should render_template('edit')
-    end
-  
-    it &quot;should find the &lt;%= file_name %&gt; requested&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find)
-      do_get
-    end
-  
-    it &quot;should assign the found &lt;%= class_name %&gt; for the view&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).and_return(&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;))
-      do_get
-      assigns[:&lt;%= file_name %&gt;].should equal(&lt;%= file_name %&gt;)
-    end
   end
 
-  describe &quot;responding to POST /&lt;%= table_name %&gt;&quot; do
+  describe &quot;responding to POST create&quot; do
 
-    before(:each) do
-      @&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;, :to_param =&gt; &quot;1&quot;)
-      &lt;%= class_name %&gt;.stub!(:new).and_return(@&lt;%= file_name %&gt;)
-    end
-    
-    describe &quot;with successful save&quot; do
-  
-      def do_post
-        @&lt;%= file_name %&gt;.should_receive(:save).and_return(true)
-        post :create, :&lt;%= file_name %&gt; =&gt; {}
-      end
-  
-      it &quot;should create a new &lt;%= file_name %&gt;&quot; do
-        &lt;%= class_name %&gt;.should_receive(:new).with({}).and_return(@&lt;%= file_name %&gt;)
-        do_post
-      end
-
-      it &quot;should assign the created &lt;%= file_name %&gt; for the view&quot; do
-        do_post
-        assigns(:&lt;%= file_name %&gt;).should equal(@&lt;%= file_name %&gt;)
+    describe &quot;with valid params&quot; do
+      
+      it &quot;should expose a newly created &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.should_receive(:new).with({'these' =&gt; 'params'}).and_return(mock_&lt;%= file_name %&gt;(:save =&gt; true))
+        post :create, :&lt;%= file_name %&gt; =&gt; {:these =&gt; 'params'}
+        assigns(:&lt;%= file_name %&gt;).should equal(mock_&lt;%= file_name %&gt;)
       end
 
       it &quot;should redirect to the created &lt;%= file_name %&gt;&quot; do
-        do_post
-        response.should redirect_to(&lt;%= table_name.singularize %&gt;_url(&quot;1&quot;))
+        &lt;%= class_name %&gt;.stub!(:new).and_return(mock_&lt;%= file_name %&gt;(:save =&gt; true))
+        post :create, :&lt;%= file_name %&gt; =&gt; {}
+        response.should redirect_to(&lt;%= table_name.singularize %&gt;_url(mock_&lt;%= file_name %&gt;))
       end
       
     end
     
-    describe &quot;with failed save&quot; do
+    describe &quot;with invalid params&quot; do
 
-      def do_post
-        @&lt;%= file_name %&gt;.should_receive(:save).and_return(false)
-        post :create, :&lt;%= file_name %&gt; =&gt; {}
-      end
-  
-      it &quot;should assign the invalid &lt;%= file_name %&gt; for the view&quot; do
-        do_post
-        assigns(:&lt;%= file_name %&gt;).should equal(@&lt;%= file_name %&gt;)
+      it &quot;should expose a newly created but unsaved &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.stub!(:new).with({'these' =&gt; 'params'}).and_return(mock_&lt;%= file_name %&gt;(:save =&gt; false))
+        post :create, :&lt;%= file_name %&gt; =&gt; {:these =&gt; 'params'}
+        assigns(:&lt;%= file_name %&gt;).should equal(mock_&lt;%= file_name %&gt;)
       end
 
       it &quot;should re-render the 'new' template&quot; do
-        do_post
+        &lt;%= class_name %&gt;.stub!(:new).and_return(mock_&lt;%= file_name %&gt;(:save =&gt; false))
+        post :create, :&lt;%= file_name %&gt; =&gt; {}
         response.should render_template('new')
       end
       
     end
+    
   end
 
-  describe &quot;responding to PUT /&lt;%= table_name %&gt;/1&quot; do
+  describe &quot;responding to PUT udpate&quot; do
 
-    before(:each) do
-      @&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;, :to_param =&gt; &quot;1&quot;)
-      &lt;%= class_name %&gt;.stub!(:find).and_return(@&lt;%= file_name %&gt;)
-    end
-    
-    describe &quot;with successful update&quot; do
-
-      def do_put
-        @&lt;%= file_name %&gt;.should_receive(:update_attributes).and_return(true)
-        put :update, :id =&gt; &quot;1&quot;
-      end
+    describe &quot;with valid params&quot; do
 
-      it &quot;should find the &lt;%= file_name %&gt; requested&quot; do
-        &lt;%= class_name %&gt;.should_receive(:find).with(&quot;1&quot;).and_return(@&lt;%= file_name %&gt;)
-        do_put
+      it &quot;should update the requested &lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+        mock_&lt;%= file_name %&gt;.should_receive(:update_attributes).with({'these' =&gt; 'params'})
+        put :update, :id =&gt; &quot;37&quot;, :&lt;%= file_name %&gt; =&gt; {:these =&gt; 'params'}
       end
 
-      it &quot;should update the found &lt;%= file_name %&gt;&quot; do
-        do_put
-        assigns(:&lt;%= file_name %&gt;).should equal(@&lt;%= file_name %&gt;)
-      end
-
-      it &quot;should assign the found &lt;%= file_name %&gt; for the view&quot; do
-        do_put
-        assigns(:&lt;%= file_name %&gt;).should equal(@&lt;%= file_name %&gt;)
+      it &quot;should expose the requested &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.stub!(:find).and_return(mock_&lt;%= file_name %&gt;(:update_attributes =&gt; true))
+        put :update, :id =&gt; &quot;1&quot;
+        assigns(:&lt;%= file_name %&gt;).should equal(mock_&lt;%= file_name %&gt;)
       end
 
       it &quot;should redirect to the &lt;%= file_name %&gt;&quot; do
-        do_put
-        response.should redirect_to(&lt;%= table_name.singularize %&gt;_url(&quot;1&quot;))
+        &lt;%= class_name %&gt;.stub!(:find).and_return(mock_&lt;%= file_name %&gt;(:update_attributes =&gt; true))
+        put :update, :id =&gt; &quot;1&quot;
+        response.should redirect_to(&lt;%= table_name.singularize %&gt;_url(mock_&lt;%= file_name %&gt;))
       end
 
     end
     
-    describe &quot;with failed update&quot; do
+    describe &quot;with invalid params&quot; do
 
-      def do_put
-        @&lt;%= file_name %&gt;.should_receive(:update_attributes).and_return(false)
-        put :update, :id =&gt; &quot;1&quot;
+      it &quot;should update the requested &lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+        mock_&lt;%= file_name %&gt;.should_receive(:update_attributes).with({'these' =&gt; 'params'})
+        put :update, :id =&gt; &quot;37&quot;, :&lt;%= file_name %&gt; =&gt; {:these =&gt; 'params'}
       end
 
-      it &quot;should assign the found &lt;%= file_name %&gt; for the view&quot; do
-        do_put
-        assigns(:&lt;%= file_name %&gt;).should equal(@&lt;%= file_name %&gt;)
+      it &quot;should expose the &lt;%= file_name %&gt; as @&lt;%= file_name %&gt;&quot; do
+        &lt;%= class_name %&gt;.stub!(:find).and_return(mock_&lt;%= file_name %&gt;(:update_attributes =&gt; false))
+        put :update, :id =&gt; &quot;1&quot;
+        assigns(:&lt;%= file_name %&gt;).should equal(mock_&lt;%= file_name %&gt;)
       end
 
       it &quot;should re-render the 'edit' template&quot; do
-        do_put
+        &lt;%= class_name %&gt;.stub!(:find).and_return(mock_&lt;%= file_name %&gt;(:update_attributes =&gt; false))
+        put :update, :id =&gt; &quot;1&quot;
         response.should render_template('edit')
       end
 
     end
-  end
 
-  describe &quot;responding to DELETE /&lt;%= table_name %&gt;/1&quot; do
+  end
 
-    before(:each) do
-      @&lt;%= file_name %&gt; = mock_model(&lt;%= class_name %&gt;, :destroy =&gt; true)
-      &lt;%= class_name %&gt;.stub!(:find).and_return(@&lt;%= file_name %&gt;)
-    end
-  
-    def do_delete
-      delete :destroy, :id =&gt; &quot;1&quot;
-    end
+  describe &quot;responding to DELETE destroy&quot; do
 
-    it &quot;should find the &lt;%= file_name %&gt; requested&quot; do
-      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;1&quot;).and_return(@&lt;%= file_name %&gt;)
-      do_delete
-    end
-  
-    it &quot;should call destroy on the found &lt;%= file_name %&gt;&quot; do
-      @&lt;%= file_name %&gt;.should_receive(:destroy)
-      do_delete
+    it &quot;should destroy the requested &lt;%= file_name %&gt;&quot; do
+      &lt;%= class_name %&gt;.should_receive(:find).with(&quot;37&quot;).and_return(mock_&lt;%= file_name %&gt;)
+      mock_&lt;%= file_name %&gt;.should_receive(:destroy)
+      delete :destroy, :id =&gt; &quot;37&quot;
     end
   
     it &quot;should redirect to the &lt;%= table_name %&gt; list&quot; do
-      do_delete
+      &lt;%= class_name %&gt;.stub!(:find).and_return(mock_&lt;%= file_name %&gt;(:destroy =&gt; true))
+      delete :destroy, :id =&gt; &quot;1&quot;
       response.should redirect_to(&lt;%= table_name %&gt;_url)
     end
+
   end
+
 end</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/controller_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,15 @@
 require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_depth %&gt;/../../spec_helper')
 
+&lt;% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%&gt;
 describe &quot;/&lt;%= table_name %&gt;/edit.&lt;%= default_file_extension %&gt;&quot; do
   include &lt;%= controller_class_name %&gt;Helper
   
   before(:each) do
     assigns[:&lt;%= file_name %&gt;] = @&lt;%= file_name %&gt; = stub_model(&lt;%= class_name %&gt;,
-      :new_record? =&gt; false&lt;%= attributes.empty? ? '' : ',' %&gt;
-&lt;% attributes.each_with_index do |attribute, attribute_index| -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == attributes.length - 1 ? '' : ','%&gt;
-&lt;% end -%&gt;&lt;% end -%&gt;
+      :new_record? =&gt; false&lt;%= output_attributes.empty? ? '' : ',' %&gt;
+&lt;% output_attributes.each_with_index do |attribute, attribute_index| -%&gt;
+      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == output_attributes.length - 1 ? '' : ','%&gt;
+&lt;% end -%&gt;
     )
   end
 
@@ -16,9 +17,9 @@ describe &quot;/&lt;%= table_name %&gt;/edit.&lt;%= default_file_extension %&gt;&quot; do
     render &quot;/&lt;%= table_name %&gt;/edit.&lt;%= default_file_extension %&gt;&quot;
     
     response.should have_tag(&quot;form[action=#{&lt;%= file_name %&gt;_path(@&lt;%= file_name %&gt;)}][method=post]&quot;) do
-&lt;% for attribute in attributes -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
+&lt;% for attribute in output_attributes -%&gt;
       with_tag('&lt;%= attribute.input_type -%&gt;#&lt;%= file_name %&gt;_&lt;%= attribute.name %&gt;[name=?]', &quot;&lt;%= file_name %&gt;[&lt;%= attribute.name %&gt;]&quot;)
-&lt;% end -%&gt;&lt;% end -%&gt;
+&lt;% end -%&gt;
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/edit_erb_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,17 @@
 require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_depth %&gt;/../../spec_helper')
 
+&lt;% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%&gt;
 describe &quot;/&lt;%= table_name %&gt;/index.&lt;%= default_file_extension %&gt;&quot; do
   include &lt;%= controller_class_name %&gt;Helper
   
   before(:each) do
     assigns[:&lt;%= table_name %&gt;] = [
 &lt;% [1,2].each_with_index do |id, model_index| -%&gt;
-      stub_model(&lt;%= class_name %&gt;&lt;%= attributes.empty? ? (model_index == 1 ? ')' : '),') : ',' %&gt;
-&lt;% attributes.each_with_index do |attribute, attribute_index| -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-        :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == attributes.length - 1 ? '' : ','%&gt;
-&lt;% end -%&gt;&lt;% end -%&gt;
-&lt;% if !attributes.empty? -%&gt;
+      stub_model(&lt;%= class_name %&gt;&lt;%= output_attributes.empty? ? (model_index == 1 ? ')' : '),') : ',' %&gt;
+&lt;% output_attributes.each_with_index do |attribute, attribute_index| -%&gt;
+        :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == output_attributes.length - 1 ? '' : ','%&gt;
+&lt;% end -%&gt;
+&lt;% if !output_attributes.empty? -%&gt;
       &lt;%= model_index == 1 ? ')' : '),' %&gt;
 &lt;% end -%&gt;
 &lt;% end -%&gt;
@@ -19,9 +20,9 @@ describe &quot;/&lt;%= table_name %&gt;/index.&lt;%= default_file_extension %&gt;&quot; do
 
   it &quot;should render list of &lt;%= table_name %&gt;&quot; do
     render &quot;/&lt;%= table_name %&gt;/index.&lt;%= default_file_extension %&gt;&quot;
-&lt;% for attribute in attributes -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-    response.should have_tag(&quot;tr&gt;td&quot;, &lt;%= attribute.default_value %&gt;, 2)
-&lt;% end -%&gt;&lt;% end -%&gt;
+&lt;% for attribute in output_attributes -%&gt;
+    response.should have_tag(&quot;tr&gt;td&quot;, &lt;%= attribute.default_value %&gt;.to_s, 2)
+&lt;% end -%&gt;
   end
 end
 </diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/index_erb_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,15 @@
 require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_depth %&gt;/../../spec_helper')
 
+&lt;% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%&gt;
 describe &quot;/&lt;%= table_name %&gt;/new.&lt;%= default_file_extension %&gt;&quot; do
   include &lt;%= controller_class_name %&gt;Helper
   
   before(:each) do
     assigns[:&lt;%= file_name %&gt;] = stub_model(&lt;%= class_name %&gt;,
-      :new_record? =&gt; true&lt;%= attributes.empty? ? '' : ',' %&gt;
-&lt;% attributes.each_with_index do |attribute, attribute_index| -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == attributes.length - 1 ? '' : ','%&gt;
-&lt;% end -%&gt;&lt;% end -%&gt;
+      :new_record? =&gt; true&lt;%= output_attributes.empty? ? '' : ',' %&gt;
+&lt;% output_attributes.each_with_index do |attribute, attribute_index| -%&gt;
+      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == output_attributes.length - 1 ? '' : ','%&gt;
+&lt;% end -%&gt;
     )
   end
 
@@ -16,9 +17,9 @@ describe &quot;/&lt;%= table_name %&gt;/new.&lt;%= default_file_extension %&gt;&quot; do
     render &quot;/&lt;%= table_name %&gt;/new.&lt;%= default_file_extension %&gt;&quot;
     
     response.should have_tag(&quot;form[action=?][method=post]&quot;, &lt;%= table_name %&gt;_path) do
-&lt;% for attribute in attributes -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
+&lt;% for attribute in output_attributes -%&gt;
       with_tag(&quot;&lt;%= attribute.input_type -%&gt;#&lt;%= file_name %&gt;_&lt;%= attribute.name %&gt;[name=?]&quot;, &quot;&lt;%= file_name %&gt;[&lt;%= attribute.name %&gt;]&quot;)
-&lt;% end -%&gt;&lt;% end -%&gt;
+&lt;% end -%&gt;
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/new_erb_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,59 +2,57 @@ require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_dep
 
 describe &lt;%= controller_class_name %&gt;Controller do
   describe &quot;route generation&quot; do
-
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'index' } to /&lt;%= table_name %&gt;&quot; do
+    it &quot;should map #index&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;index&quot;).should == &quot;/&lt;%= table_name %&gt;&quot;
     end
   
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'new' } to /&lt;%= table_name %&gt;/new&quot; do
+    it &quot;should map #new&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;new&quot;).should == &quot;/&lt;%= table_name %&gt;/new&quot;
     end
   
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'show', :id =&gt; 1 } to /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should map #show&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;show&quot;, :id =&gt; 1).should == &quot;/&lt;%= table_name %&gt;/1&quot;
     end
   
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'edit', :id =&gt; 1 } to /&lt;%= table_name %&gt;/1&lt;%= resource_edit_path %&gt;&quot; do
+    it &quot;should map #edit&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;edit&quot;, :id =&gt; 1).should == &quot;/&lt;%= table_name %&gt;/1&lt;%= resource_edit_path %&gt;&quot;
     end
   
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'update', :id =&gt; 1} to /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should map #update&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;update&quot;, :id =&gt; 1).should == &quot;/&lt;%= table_name %&gt;/1&quot;
     end
   
-    it &quot;should map { :controller =&gt; '&lt;%= table_name %&gt;', :action =&gt; 'destroy', :id =&gt; 1} to /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should map #destroy&quot; do
       route_for(:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;destroy&quot;, :id =&gt; 1).should == &quot;/&lt;%= table_name %&gt;/1&quot;
     end
   end
 
   describe &quot;route recognition&quot; do
-
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'index' } from GET /&lt;%= table_name %&gt;&quot; do
+    it &quot;should generate params for #index&quot; do
       params_from(:get, &quot;/&lt;%= table_name %&gt;&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;index&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'new' } from GET /&lt;%= table_name %&gt;/new&quot; do
+    it &quot;should generate params for #new&quot; do
       params_from(:get, &quot;/&lt;%= table_name %&gt;/new&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;new&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'create' } from POST /&lt;%= table_name %&gt;&quot; do
+    it &quot;should generate params for #create&quot; do
       params_from(:post, &quot;/&lt;%= table_name %&gt;&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;create&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'show', id =&gt; '1' } from GET /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should generate params for #show&quot; do
       params_from(:get, &quot;/&lt;%= table_name %&gt;/1&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;show&quot;, :id =&gt; &quot;1&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'edit', id =&gt; '1' } from GET /&lt;%= table_name %&gt;/1;edit&quot; do
+    it &quot;should generate params for #edit&quot; do
       params_from(:get, &quot;/&lt;%= table_name %&gt;/1&lt;%= resource_edit_path %&gt;&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;edit&quot;, :id =&gt; &quot;1&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'update', id =&gt; '1' } from PUT /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should generate params for #update&quot; do
       params_from(:put, &quot;/&lt;%= table_name %&gt;/1&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;update&quot;, :id =&gt; &quot;1&quot;}
     end
   
-    it &quot;should generate params { :controller =&gt; '&lt;%= table_name %&gt;', action =&gt; 'destroy', id =&gt; '1' } from DELETE /&lt;%= table_name %&gt;/1&quot; do
+    it &quot;should generate params for #destroy&quot; do
       params_from(:delete, &quot;/&lt;%= table_name %&gt;/1&quot;).should == {:controller =&gt; &quot;&lt;%= table_name %&gt;&quot;, :action =&gt; &quot;destroy&quot;, :id =&gt; &quot;1&quot;}
     end
   end</diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/routing_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,23 @@
 require File.expand_path(File.dirname(__FILE__) + '&lt;%= '/..' * class_nesting_depth %&gt;/../../spec_helper')
 
+&lt;% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%&gt;
 describe &quot;/&lt;%= table_name %&gt;/show.&lt;%= default_file_extension %&gt;&quot; do
   include &lt;%= controller_class_name %&gt;Helper
-  
   before(:each) do
-    assigns[:&lt;%= file_name %&gt;] = @&lt;%= file_name %&gt; = stub_model(&lt;%= class_name %&gt;&lt;%= attributes.empty? ? ')' : ',' %&gt;
-&lt;% attributes.each_with_index do |attribute, attribute_index| -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == attributes.length - 1 ? '' : ','%&gt;
-&lt;% end -%&gt;&lt;% end -%&gt;
-&lt;% if !attributes.empty? -%&gt;
+    assigns[:&lt;%= file_name %&gt;] = @&lt;%= file_name %&gt; = stub_model(&lt;%= class_name %&gt;&lt;%= output_attributes.empty? ? ')' : ',' %&gt;
+&lt;% output_attributes.each_with_index do |attribute, attribute_index| -%&gt;
+      :&lt;%= attribute.name %&gt; =&gt; &lt;%= attribute.default_value %&gt;&lt;%= attribute_index == output_attributes.length - 1 ? '' : ','%&gt;
+&lt;% end -%&gt;
+&lt;% if !output_attributes.empty? -%&gt;
     )
 &lt;% end -%&gt;
   end
 
   it &quot;should render attributes in &lt;p&gt;&quot; do
     render &quot;/&lt;%= table_name %&gt;/show.&lt;%= default_file_extension %&gt;&quot;
-&lt;% for attribute in attributes -%&gt;&lt;% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%&gt;
-    response.should have_text(/&lt;%= Regexp.escape(attribute.default_value)[1..-2]%&gt;/)
-&lt;% end -%&gt;&lt;% end -%&gt;
+&lt;% for attribute in output_attributes -%&gt;
+    response.should have_text(/&lt;%= Regexp.escape(attribute.default_value).gsub(/^&quot;|&quot;$/, '')%&gt;/)
+&lt;% end -%&gt;
   end
 end
 </diff>
      <filename>vendor/plugins/rspec-rails/generators/rspec_scaffold/templates/show_erb_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -73,9 +73,4 @@ Autotest.add_hook :initialize do |at|
 end
 
 class Autotest::RailsRspec &lt; Autotest::Rspec
-
-  def spec_command
-    &quot;script/spec&quot;
-  end
-    
 end</diff>
      <filename>vendor/plugins/rspec-rails/lib/autotest/rails_rspec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,11 @@
 silence_warnings { RAILS_ENV = &quot;test&quot; }
 
-require 'application'
+begin
+  require_dependency 'application_controller'
+rescue MissingSourceFile
+  require_dependency 'application'
+end
+
 require 'action_controller/test_process'
 require 'action_controller/integration'
 require 'active_record/fixtures' if defined?(ActiveRecord::Base)
@@ -12,41 +17,4 @@ require 'spec/rails/matchers'
 require 'spec/rails/mocks'
 require 'spec/rails/example'
 require 'spec/rails/extensions'
-require 'spec/rails/version'
-
-module Spec
-  # = Spec::Rails
-  #
-  # Spec::Rails (a.k.a. RSpec on Rails) is a Ruby on Rails plugin that allows you to drive the development
-  # of your RoR application using RSpec, a framework that aims to enable Example Driven Development
-  # in Ruby.
-  # 
-  # == Features
-  # 
-  # * Use RSpec to independently specify Rails Models, Views, Controllers and Helpers
-  # * Integrated fixture loading
-  # * Special generators for Resources, Models, Views and Controllers that generate Specs instead of Tests.
-  # 
-  # == Vision
-  # 
-  # For people for whom TDD is a brand new concept, the testing support built into Ruby on Rails
-  # is a huge leap forward. The fact that it is built right in is fantastic, and Ruby on Rails
-  # apps are generally much easier to maintain than they might have been without such support.
-  # 
-  # For those of us coming from a history with TDD, and now BDD, the existing support presents some problems related to dependencies across specs. To that end, RSpec on Rails supports 4 types of specs. We&#8217;ve also built in first class mocking and stubbing support in order to break dependencies across these different concerns.
-  # 
-  # == More Information
-  #
-  # See Spec::Rails::Runner for information about the different kinds of contexts
-  # you can use to spec the different Rails components
-  # 
-  # See Spec::Rails::Expectations for information about Rails-specific expectations
-  # you can set on responses and models, etc.
-  #
-  # == License
-  # 
-  # RSpec on Rails is licensed under the same license as RSpec itself,
-  # the MIT-LICENSE.
-  module Rails
-  end
-end
+require 'spec/rails/interop/testcase'
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,7 @@ require &quot;spec/rails/example/functional_example_group&quot;
 require &quot;spec/rails/example/controller_example_group&quot;
 require &quot;spec/rails/example/helper_example_group&quot;
 require &quot;spec/rails/example/view_example_group&quot;
+require &quot;spec/rails/example/cookies_proxy&quot;
 
 module Spec
   module Rails</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,27 +2,24 @@ module Spec
   module Rails
     module Example
       class AssignsHashProxy #:nodoc:
-        def initialize(object)
-          @object = object
+        def initialize(example_group, &amp;block)
+          @target = block.call
+          @example_group = example_group
         end
 
-        def [](ivar)
-          if assigns.include?(ivar.to_s)
-            assigns[ivar.to_s]
-          elsif assigns.include?(ivar)
-            assigns[ivar]
-          else
-            nil
-          end
+        def [](key)
+          return false if assigns[key] == false
+          return false if assigns[key.to_s] == false
+          assigns[key] || assigns[key.to_s] || @target.instance_variable_get(&quot;@#{key}&quot;)
         end
 
-        def []=(ivar, val)
-          @object.instance_variable_set &quot;@#{ivar}&quot;, val
-          assigns[ivar.to_s] = val
+        def []=(key, val)
+          @target.instance_variable_set(&quot;@#{key}&quot;, val)
         end
 
-        def delete(name)
-          assigns.delete(name.to_s)
+        def delete(key)
+          assigns.delete(key.to_s)
+          @target.instance_variable_set(&quot;@#{key}&quot;, nil)
         end
 
         def each(&amp;block)
@@ -35,7 +32,7 @@ module Spec
 
         protected
         def assigns
-          @object.assigns
+          @example_group.orig_assigns
         end
       end
     end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/assigns_hash_proxy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -125,7 +125,7 @@ module Spec
 
         attr_reader :response, :request, :controller
 
-        def initialize(defined_description, &amp;implementation) #:nodoc:
+        def initialize(defined_description, options={}, &amp;implementation) #:nodoc:
           super
           controller_class_name = self.class.controller_class_name
           if controller_class_name
@@ -158,7 +158,9 @@ module Spec
 
         protected
         def _assigns_hash_proxy
-          @_assigns_hash_proxy ||= AssignsHashProxy.new @controller
+          @_assigns_hash_proxy ||= AssignsHashProxy.new self do
+            @response.template
+          end
         end
 
         private
@@ -183,61 +185,49 @@ module Spec
               unless integrate_views?
                 if @template.respond_to?(:finder)
                   (class &lt;&lt; @template.finder; self; end).class_eval do
-                    define_method :file_exists? do
-                      true
-                    end
+                    define_method :file_exists? do; true; end
                   end
                 else
                   (class &lt;&lt; @template; self; end).class_eval do
-                    define_method :file_exists? do
-                      true
-                    end
+                    define_method :file_exists? do; true; end
                   end
                 end
                 (class &lt;&lt; @template; self; end).class_eval do
                   define_method :render_file do |*args|
-                    @first_render ||= args[0]
+                    @first_render ||= args[0] unless args[0] =~ /^layouts/
+                    @_first_render ||= args[0] unless args[0] =~ /^layouts/
+                  end
+                  
+                  define_method :_pick_template do |*args|
+                    @_first_render ||= args[0] unless args[0] =~ /^layouts/
+                    PickedTemplate.new
+                  end
+                  
+                  define_method :render do |*args|
+                    if @_rendered
+                      opts = args[0]
+                      (@_rendered[:template] ||= opts[:file]) if opts[:file]
+                      (@_rendered[:partials][opts[:partial]] += 1) if opts[:partial]
+                    else
+                      super
+                    end
                   end
                 end
               end
             end
 
             if matching_message_expectation_exists(options)
-              expect_render_mock_proxy.render(options, &amp;block)
+              render_proxy.render(options, &amp;block)
               @performed_render = true
             else
-              unless matching_stub_exists(options)
+              if matching_stub_exists(options)
+                @performed_render = true
+              else
                 super(options, deprecated_status_or_extra_options, &amp;block)
               end
             end
           end
           
-          def raise_with_disable_message(old_method, new_method)
-            raise %Q|
-      controller.#{old_method}(:render) has been disabled because it
-      can often produce unexpected results. Instead, you should
-      use the following (before the action):
-
-      controller.#{new_method}(*args)
-
-      See the rdoc for #{new_method} for more information.
-            |
-          end
-          def should_receive(*args)
-            if args[0] == :render
-              raise_with_disable_message(&quot;should_receive&quot;, &quot;expect_render&quot;)
-            else
-              super
-            end
-          end
-          def stub!(*args)
-            if args[0] == :render
-              raise_with_disable_message(&quot;stub!&quot;, &quot;stub_render&quot;)
-            else
-              super
-            end
-          end
-
           def response(&amp;block)
             # NOTE - we're setting @update for the assert_select_spec - kinda weird, huh?
             @update = block
@@ -255,17 +245,25 @@ module Spec
           end
 
           def matching_message_expectation_exists(options)
-            expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
+            render_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
           end
         
           def matching_stub_exists(options)
-            expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
+            render_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
           end
         
         end
 
         Spec::Example::ExampleGroupFactory.register(:controller, self)
       end
+      
+      # Returned by _pick_template when running controller examples in isolation mode.
+      class PickedTemplate 
+        # Do nothing when running controller examples in isolation mode.
+        def render_template(*ignore_args); end
+        # Do nothing when running controller examples in isolation mode.
+        def render_partial(*ignore_args);  end
+      end
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/controller_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ module Spec
 
         attr_reader :request, :response
         before(:each) do
-          @controller_class = Object.path2class @controller_class_name
+          @controller_class = @controller_class_name.split('::').inject(Object) { |k,n| k.const_get n }
           raise &quot;Can't determine controller class for #{@controller_class_name}&quot; if @controller_class.nil?
 
           @controller = @controller_class.new
@@ -15,18 +15,57 @@ module Spec
           @response = ActionController::TestResponse.new
           @response.session = @request.session
         end
-
+        
         def params
           request.parameters
         end
 
         def flash
-          response.flash
+          @controller.__send__ :flash
         end
 
         def session
           response.session
         end
+        
+        # Overrides the &lt;tt&gt;cookies()&lt;/tt&gt; method in
+        # ActionController::TestResponseBehaviour, returning a proxy that
+        # accesses the requests cookies when setting a cookie and the
+        # responses cookies when reading one. This allows you to set and read
+        # cookies in examples using the same API with which you set and read
+        # them in controllers.
+        #
+        # == Examples (Rails &gt;= 1.2.6)
+        #
+        #   cookies[:user_id] = '1234'
+        #   get :index
+        #   assigns[:user].id.should == '1234'
+        #
+        #   post :login
+        #   cookies[:login].expires.should == 1.week.from_now
+        #
+        # == Examples (Rails 2.0 &gt; 2.2)
+        #
+        #   cookies[:user_id] = {:value =&gt; '1234', :expires =&gt; 1.minute.ago}
+        #   get :index
+        #   response.should be_redirect
+        #
+        # == Examples (Rails 2.3)
+        #
+        # Rails 2.3 changes the way cookies are made available to functional
+        # tests (and therefore rspec controller specs), only making single
+        # values available with no access to other aspects of the cookie. This
+        # is backwards-incompatible, so you have to change your examples to
+        # look like this:
+        #
+        #   cookies[:foo] = 'bar'
+        #   get :index
+        #   cookies[:foo].should == 'bar'
+        def cookies
+          @cookies ||= Spec::Rails::Example::CookiesProxy.new(self)
+        end
+        
+        alias_method :orig_assigns, :assigns
 
         # :call-seq:
         #   assigns()
@@ -44,7 +83,7 @@ module Spec
         #   assigns[:registration].should == Thing.new
         #--
         # NOTE - Even though docs only use assigns[:key] format, this supports
-        # assigns(:key) in order to avoid breaking old specs.
+        # assigns(:key) for backwards compatibility.
         #++
         def assigns(key = nil)
           if key.nil?
@@ -53,6 +92,7 @@ module Spec
             _assigns_hash_proxy[key]
           end
         end
+
       end
     end
   end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/functional_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -96,7 +96,11 @@ module Spec
         def helper
           self.class.helper
         end
-
+        
+        def orig_assigns
+          helper.assigns
+        end
+        
         # Reverse the load order so that custom helpers which are defined last
         # are also loaded last.
         ActionView::Base.included_modules.reverse.each do |mod|
@@ -148,7 +152,9 @@ module Spec
 
         protected
         def _assigns_hash_proxy
-          @_assigns_hash_proxy ||= AssignsHashProxy.new helper
+          @_assigns_hash_proxy ||= AssignsHashProxy.new self do
+            helper
+          end
         end
 
       end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/helper_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,22 +8,21 @@ module Spec
   module Rails
 
     module Example
-      class RailsExampleGroup &lt; Test::Unit::TestCase
-        
-        # Rails &gt;= r8570 uses setup/teardown_fixtures explicitly
-        before(:each) do
-          setup_fixtures if self.respond_to?(:setup_fixtures)
+      if ActiveSupport.const_defined?(:TestCase)
+        class RailsExampleGroup &lt; ActiveSupport::TestCase
+          include ActionController::Assertions::SelectorAssertions
         end
-        after(:each) do
-          teardown_fixtures if self.respond_to?(:teardown_fixtures)
+      else
+        class RailsExampleGroup &lt; Test::Unit::TestCase
         end
-        
+      end
+      
+      class RailsExampleGroup
         include Spec::Rails::Matchers
         include Spec::Rails::Mocks
-        
         Spec::Example::ExampleGroupFactory.default(self)
-        
       end
+      
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/rails_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,61 +3,39 @@ require 'spec/mocks/framework'
 module Spec
   module Rails
     module Example
-      # Provides specialized mock-like behaviour for controller and view examples,
-      # allowing you to mock or stub calls to render with specific arguments while
-      # ignoring all other calls.
+      # Extends the #should_receive, #should_not_receive and #stub! methods in rspec's
+      # mocking framework to handle #render calls to controller in controller examples
+      # and template and view examples
       module RenderObserver
 
-        # Similar to mocking +render+ with the exception that calls to +render+ with
-        # any other options are passed on to the receiver (i.e. controller in
-        # controller examples, template in view examples).
-        #
-        # This is necessary because Rails uses the +render+ method on both
-        # controllers and templates as a dispatcher to render different kinds of
-        # things, sometimes resulting in many calls to the render method within one
-        # request. This approach makes it impossible to use a normal mock object, which
-        # is designed to observe all incoming messages with a given name.
-        #
-        # +expect_render+ is auto-verifying, so failures will be reported without
-        # requiring you to explicitly request verification.
-        #
-        # Also, +expect_render+ uses parts of RSpec's mock expectation framework. Because
-        # it wraps only a subset of the framework, using this will create no conflict with
-        # other mock frameworks if you choose to use them. Additionally, the object returned
-        # by expect_render is an RSpec mock object, which means that you can call any of the
-        # chained methods available in RSpec's mocks.
-        #
-        # == Controller Examples
-        #
-        #   controller.expect_render(:partial =&gt; 'thing', :object =&gt; thing)
-        #   controller.expect_render(:partial =&gt; 'thing', :collection =&gt; things).once
-        #
-        #   controller.stub_render(:partial =&gt; 'thing', :object =&gt; thing)
-        #   controller.stub_render(:partial =&gt; 'thing', :collection =&gt; things).twice
-        #
-        # == View Examples
-        #
-        #   template.expect_render(:partial =&gt; 'thing', :object =&gt; thing)
-        #   template.expect_render(:partial =&gt; 'thing', :collection =&gt; things)
-        #
-        #   template.stub_render(:partial =&gt; 'thing', :object =&gt; thing)
-        #   template.stub_render(:partial =&gt; 'thing', :collection =&gt; things)
+        # DEPRECATED
         #
+        # Use should_receive(:render).with(opts) instead
         def expect_render(opts={})
+          warn_deprecation(&quot;expect_render&quot;, &quot;should_receive&quot;)
           register_verify_after_each
-          expect_render_mock_proxy.should_receive(:render, :expected_from =&gt; caller(1)[0]).with(opts)
+          render_proxy.should_receive(:render, :expected_from =&gt; caller(1)[0]).with(opts)
         end
 
-        # This is exactly like expect_render, with the exception that the call to render will not
-        # be verified. Use this if you are trying to isolate your example from a complicated render
-        # operation but don't care whether it is called or not.
+        # DEPRECATED
+        #
+        # Use stub!(:render).with(opts) instead
         def stub_render(opts={})
+          warn_deprecation(&quot;stub_render&quot;, &quot;stub!&quot;)
           register_verify_after_each
-          expect_render_mock_proxy.stub!(:render, :expected_from =&gt; caller(1)[0]).with(opts)
+          render_proxy.stub!(:render, :expected_from =&gt; caller(1)[0]).with(opts)
+        end
+        
+        def warn_deprecation(deprecated_method, new_method)
+          Kernel.warn &lt;&lt;-WARNING
+#{deprecated_method} is deprecated and will be removed from a future version of rspec-rails.
+
+Please just use object.#{new_method} instead.
+WARNING
         end
   
         def verify_rendered # :nodoc:
-          expect_render_mock_proxy.rspec_verify
+          render_proxy.rspec_verify
         end
   
         def unregister_verify_after_each #:nodoc:
@@ -65,7 +43,32 @@ module Spec
           Spec::Example::ExampleGroup.remove_after(:each, &amp;proc)
         end
 
-        protected
+        def should_receive(*args)
+          if args[0] == :render
+            register_verify_after_each
+            render_proxy.should_receive(:render, :expected_from =&gt; caller(1)[0])
+          else
+            super
+          end
+        end
+        
+        def should_not_receive(*args)
+          if args[0] == :render
+            register_verify_after_each
+            render_proxy.should_not_receive(:render)
+          else
+            super
+          end
+        end
+        
+        def stub!(*args)
+          if args[0] == :render
+            register_verify_after_each
+            render_proxy.stub!(:render, :expected_from =&gt; caller(1)[0])
+          else
+            super
+          end
+        end
 
         def verify_rendered_proc #:nodoc:
           template = self
@@ -80,8 +83,8 @@ module Spec
           Spec::Example::ExampleGroup.after(:each, &amp;proc)
         end
   
-        def expect_render_mock_proxy #:nodoc:
-          @expect_render_mock_proxy ||= Spec::Mocks::Mock.new(&quot;expect_render_mock_proxy&quot;)
+        def render_proxy #:nodoc:
+          @render_proxy ||= Spec::Mocks::Mock.new(&quot;render_proxy&quot;)
         end
   
       end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/render_observer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,7 @@ module Spec
           ensure_that_base_view_path_is_not_set_across_example_groups
         end
 
-        def initialize(defined_description, &amp;implementation) #:nodoc:
+        def initialize(defined_description, options={}, &amp;implementation) #:nodoc:
           super
           @controller_class_name = &quot;Spec::Rails::Example::ViewExampleGroupController&quot;
         end
@@ -63,7 +63,7 @@ module Spec
 
         def derived_action_name(options) #:nodoc:
           parts = subject_of_render(options).split('/').reject { |part| part.empty? }
-          &quot;#{parts.last}&quot;
+          &quot;#{parts.last}&quot;.split('.').first
         end
 
         def subject_of_render(options) #:nodoc:
@@ -103,11 +103,11 @@ module Spec
           add_helpers(options)
 
           assigns[:action_name] = @action_name
-
-          @request.path_parameters = {
-          :controller =&gt; derived_controller_name(options),
-          :action =&gt; derived_action_name(options)
-          }
+          
+          @request.path_parameters = @request.path_parameters.merge(
+            :controller =&gt; derived_controller_name(options),
+            :action =&gt; derived_action_name(options)
+          ).merge(options[:path_parameters] || {})
 
           defaults = { :layout =&gt; false }
           options = defaults.merge options
@@ -150,7 +150,9 @@ module Spec
 
         protected
         def _assigns_hash_proxy
-          @_assigns_hash_proxy ||= AssignsHashProxy.new @controller
+          @_assigns_hash_proxy ||= AssignsHashProxy.new self do
+            @response.template
+          end
         end
       end
 
@@ -172,6 +174,9 @@ module Spec
             include helper_module
           end
         end
+        
+        def forget_variables_added_to_assigns
+        end
       end
     end
   end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/view_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,6 @@
 require 'spec'
 
-require 'spec/rails/extensions/object'
-
-require 'spec/rails/extensions/spec/example/configuration'
+require 'spec/rails/extensions/spec/runner/configuration'
 require 'spec/rails/extensions/spec/matchers/have'
 
 require 'spec/rails/extensions/active_record/base'</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActionController
   class Base
     class &lt;&lt; self
       def set_view_path(path)
-        [:append_view_path, :view_paths=, :template_root=].each do |method|
+        [:append_view_path, :template_root=].each do |method|
           if respond_to?(method)
             return send(method, path)
           end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/action_controller/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,16 @@ module ActionController #:nodoc:
     def capture(name)
       template.instance_variable_get &quot;@content_for_#{name.to_s}&quot;
     end
-    alias [] capture
-
+    
+    if ::Rails::VERSION::STRING &lt; &quot;2.3&quot;
+      def [](name)
+        Kernel.warn &lt;&lt;-WARNING
+[](name) as an alias for capture(name) (TestResponse extension in rspec-rails)
+is deprecated and will be removed in the rspec-rails release that follows the
+rails-2.3.0 release.
+WARNING
+        capture(name)
+      end
+    end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/action_controller/test_response.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,8 @@ module ActionView #:nodoc:
   class Base #:nodoc:
     include Spec::Rails::Example::RenderObserver
     cattr_accessor :base_view_path
+
+    alias_method :orig_render_partial, :render_partial
     def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc:
       if partial_path.is_a?(String)
         unless partial_path.include?(&quot;/&quot;)
@@ -10,15 +12,19 @@ module ActionView #:nodoc:
           end
         end
       end
-      super(partial_path, local_assigns, deprecated_local_assigns)
+      begin
+        orig_render_partial(partial_path, local_assigns, deprecated_local_assigns)
+      rescue ArgumentError # edge rails &gt; 2.1 changed render_partial to accept only one arg
+        orig_render_partial(partial_path)
+      end
     end
 
     alias_method :orig_render, :render
     def render(options = {}, old_local_assigns = {}, &amp;block)
-      if expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
-        expect_render_mock_proxy.render(options)
+      if render_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
+        render_proxy.render(options)
       else
-        unless expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
+        unless render_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
           orig_render(options, old_local_assigns, &amp;block)
         end
       end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/action_view/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,7 @@
 if defined?(ActiveRecord::Base)
   module ActiveRecord #:nodoc:
     class Base
-
-      (class &lt;&lt; self; self; end).class_eval do
+      class &lt;&lt; self
         # Extension for &lt;tt&gt;should have&lt;/tt&gt; on AR Model classes
         #
         #   ModelClass.should have(:no).records</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/active_record/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,8 +5,8 @@ module Spec #:nodoc:
     class Have #:nodoc:
       alias_method :__original_failure_message, :failure_message
       def failure_message
-        return &quot;expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@actual}&quot; if @collection_name == :errors_on
-        return &quot;expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}&quot; if @collection_name == :error_on
+        return &quot;expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@given}&quot; if @collection_name == :errors_on
+        return &quot;expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@given}&quot; if @collection_name == :error_on
         return __original_failure_message
       end
       </diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/extensions/spec/matchers/have.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 dir = File.dirname(__FILE__)
+require 'spec/rails/matchers/ar_be_valid'
 require 'spec/rails/matchers/assert_select'
+require 'spec/rails/matchers/change'
 require 'spec/rails/matchers/have_text'
 require 'spec/rails/matchers/include_text'
 require 'spec/rails/matchers/redirect_to'</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,7 @@ module Spec # :nodoc:
         def matches?(response_or_text, &amp;block)
           if ActionController::TestResponse === response_or_text and
                    response_or_text.headers.key?('Content-Type') and
+                   !response_or_text.headers['Content-Type'].blank? and
                    response_or_text.headers['Content-Type'].to_sym == :xml
             @args.unshift(HTML::Document.new(response_or_text.body, false, true).root)           
           elsif String === response_or_text</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers/assert_select.rb</filename>
    </modified>
    <modified>
      <diff>@@ -74,13 +74,15 @@ module Spec
         end
 
         def description
-          &quot;redirect to #{@actual.inspect}&quot;
+          &quot;redirect to #{@expected.inspect}&quot;
         end
 
         class QueryParameterParser
           def self.parse_query_parameters(query, request)
             if defined?(CGIMethods)
               CGIMethods.parse_query_parameters(query)
+            elsif defined?(ActionController::RequestParser)
+              ActionController::RequestParser.parse_query_parameters(query)
             else
               request.class.parse_query_parameters(query)
             end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers/redirect_to.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,10 +10,28 @@ module Spec
         end
       
         def matches?(response)
-          @actual = response.rendered_file
-          full_path(@actual) == full_path(@expected)
+          if response.respond_to?(:rendered_file)
+            @actual = response.rendered_file
+          elsif response.respond_to?(:rendered)
+            case template = response.rendered[:template]
+            when nil
+              unless response.rendered[:partials].empty?
+                @actual = path_and_file(response.rendered[:partials].keys.first).join(&quot;/_&quot;)
+              end
+            when ActionView::Template
+              @actual = template.path
+            when String
+              @actual = template
+            end
+          else
+            @actual = response.rendered_template.to_s
+          end
+          return false if @actual.blank?
+          given_controller_path, given_file = path_and_file(@actual)
+          expected_controller_path, expected_file = path_and_file(@expected)
+          given_controller_path == expected_controller_path &amp;&amp; given_file.match(expected_file)
         end
-
+        
         def failure_message
           &quot;expected #{@expected.inspect}, got #{@actual.inspect}&quot;
         end
@@ -27,22 +45,43 @@ module Spec
         end
       
         private
-          def full_path(path)
-            return nil if path.nil?
-            path.include?('/') ? path : &quot;#{@controller.class.to_s.underscore.gsub('_controller','')}/#{path}&quot;
+          def path_and_file(path)
+            parts = path.split('/')
+            file = parts.pop
+            controller = parts.empty? ? current_controller_path : parts.join('/')
+            return controller, file
           end
         
-      end
+          def controller_path_from(path)
+            parts = path.split('/')
+            parts.pop
+            parts.join('/')
+          end
 
+          def current_controller_path
+            @controller.class.to_s.underscore.gsub(/_controller$/,'')
+          end
+        
+      end
+      
       # :call-seq:
-      #   response.should render_template(path)
-      #   response.should_not render_template(path)
+      #   response.should render_template(template)
+      #   response.should_not render_template(template)
+      #
+      # For use in controller code examples (integration or isolation mode).
+      #
+      # Passes if the specified template (view file) is rendered by the
+      # response. This file can be any view file, including a partial. However
+      # if it is a partial it must be rendered directly i.e. you can't detect
+      # that a partial has been rendered as part of a view using
+      # render_template. For that you should use a message expectation
+      # (mock) instead:
       #
-      # Passes if the specified template is rendered by the response.
-      # Useful in controller specs (integration or isolation mode).
+      #   controller.should_receive(:render).with(:partial =&gt; 'path/to/partial')
       #
-      # &lt;code&gt;path&lt;/code&gt; can include the controller path or not. It
-      # can also include an optional extension (no extension assumes .rhtml).
+      # &lt;code&gt;template&lt;/code&gt; can include the controller path. It can also
+      # include an optional extension, which you only need to use when there
+      # is ambiguity.
       #
       # Note that partials must be spelled with the preceding underscore.
       #
@@ -52,12 +91,13 @@ module Spec
       #   response.should render_template('same_controller/list')
       #   response.should render_template('other_controller/list')
       #
-      #   #rjs
+      #   # with extensions
       #   response.should render_template('list.rjs')
+      #   response.should render_template('list.haml')
       #   response.should render_template('same_controller/list.rjs')
       #   response.should render_template('other_controller/list.rjs')
       #
-      #   #partials
+      #   # partials
       #   response.should render_template('_a_partial')
       #   response.should render_template('same_controller/_a_partial')
       #   response.should render_template('other_controller/_a_partial')</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/matchers/render_template.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,15 +9,21 @@ module Spec
       # methods stubbed out. Additional methods may be easily stubbed (via
       # add_stubs) if +stubs+ is passed.
       def mock_model(model_class, options_and_stubs = {})
-        id = next_id
-        options_and_stubs.reverse_merge!({
+        id = options_and_stubs[:id] || next_id
+        options_and_stubs = options_and_stubs.reverse_merge({
           :id =&gt; id,
           :to_param =&gt; id.to_s,
           :new_record? =&gt; false,
           :errors =&gt; stub(&quot;errors&quot;, :count =&gt; 0)
         })
-        m = mock(&quot;#{model_class.name}_#{options_and_stubs[:id]}&quot;, options_and_stubs)
+        m = mock(&quot;#{model_class.name}_#{id}&quot;, options_and_stubs)
         m.send(:__mock_proxy).instance_eval &lt;&lt;-CODE
+          def @target.as_new_record
+            self.stub!(:id).and_return nil
+            self.stub!(:to_param).and_return nil
+            self.stub!(:new_record?).and_return true
+            self
+          end
           def @target.is_a?(other)
             #{model_class}.ancestors.include?(other)
           end
@@ -98,21 +104,24 @@ module Spec
               model[k] = stubs.delete(k)
             end
           end
-          add_stubs(model, stubs)
+          model.stub!(stubs)
           yield model if block_given?
         end
       end
       
-      #--
-      # TODO - Shouldn't this just be an extension of stub! ??
-      # - object.stub!(:method =&gt; return_value, :method2 =&gt; return_value2, :etc =&gt; etc)
-      #++
+      # DEPRECATED - use object.stub!(:method =&gt; value, :method2 =&gt; value)
+      #
       # Stubs methods on +object+ (if +object+ is a symbol or string a new mock
       # with that name will be created). +stubs+ is a Hash of +method=&gt;value+
       def add_stubs(object, stubs = {}) #:nodoc:
-        m = [String, Symbol].index(object.class) ? mock(object.to_s) : object
-        stubs.each {|k,v| m.stub!(k).and_return(v)}
-        m
+        Kernel.warn &lt;&lt;-WARNING
+DEPRECATION NOTICE: add_stubs is deprecated and will be removed
+from a future version of rspec-rails. Use this instead:
+  
+  object.stub!(:method =&gt; value, :method2 =&gt; value)
+  
+WARNING
+        object.stub!(stubs)
       end
 
       private
@@ -123,4 +132,4 @@ module Spec
 
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/mocks.rb</filename>
    </modified>
    <modified>
      <diff>@@ -40,15 +40,23 @@ class ActiveRecordSafetyListener
   include Singleton
   def scenario_started(*args)
     if defined?(ActiveRecord::Base)
-      ActiveRecord::Base.send :increment_open_transactions unless Rails::VERSION::STRING == &quot;1.1.6&quot;
-      ActiveRecord::Base.connection.begin_db_transaction
+      if ActiveRecord::Base.connection.respond_to?(:increment_open_transactions)
+        ActiveRecord::Base.connection.increment_open_transactions
+      else
+        ActiveRecord::Base.send :increment_open_transactions
+      end
     end
+    ActiveRecord::Base.connection.begin_db_transaction
   end
 
   def scenario_succeeded(*args)
     if defined?(ActiveRecord::Base)
       ActiveRecord::Base.connection.rollback_db_transaction
-      ActiveRecord::Base.send :decrement_open_transactions unless Rails::VERSION::STRING == &quot;1.1.6&quot;
+      if ActiveRecord::Base.connection.respond_to?(:decrement_open_transactions)
+        ActiveRecord::Base.connection.decrement_open_transactions
+      else
+        ActiveRecord::Base.send :decrement_open_transactions
+      end
     end
   end
   alias :scenario_pending :scenario_succeeded</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/story_adapter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,39 +1,16 @@
-module Spec
-  module Rails
-    module VERSION #:nodoc:
-      unless defined? MAJOR
-        MAJOR  = 1
-        MINOR  = 1
-        TINY   = 4
-        RELEASE_CANDIDATE = nil
-
-        BUILD_TIME_UTC = 20080628203842
-
-        STRING = [MAJOR, MINOR, TINY].join('.')
-        TAG = &quot;REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}&quot;.upcase.gsub(/\.|-/, '_')
-        FULL_VERSION = &quot;#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})&quot;
-
-        NAME   = &quot;RSpec-Rails&quot;
-        URL    = &quot;http://github.com/dchelimsky/rspec-rails&quot;  
-
-        DESCRIPTION = &quot;#{NAME}-#{FULL_VERSION} - BDD for Ruby on Rails\n#{URL}&quot;
-      end
-    end
-  end
-end
-
-# Verify that the plugin has the same revision as RSpec
-if Spec::Rails::VERSION::BUILD_TIME_UTC != Spec::VERSION::BUILD_TIME_UTC
-  raise &lt;&lt;-EOF
-
-############################################################################
-Your RSpec on Rails plugin is incompatible with your installed RSpec.
-
-RSpec          : #{Spec::VERSION::BUILD_TIME_UTC}
-RSpec on Rails : #{Spec::Rails::VERSION::BUILD_TIME_UTC}
-
-Make sure your RSpec on Rails plugin is compatible with your RSpec gem.
-See http://rspec.rubyforge.org/documentation/rails/install.html for details.
-############################################################################
-EOF
-end
+module Spec
+  module Rails
+    module VERSION #:nodoc:
+      unless defined? MAJOR
+        MAJOR  = 1
+        MINOR  = 1
+        TINY   = 11
+        MINESCULE = 4
+
+        STRING = [MAJOR, MINOR, TINY, MINESCULE].join('.')
+
+        SUMMARY = &quot;rspec-rails #{STRING}&quot;
+      end
+    end
+  end
+end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,35 @@
 dir = File.dirname(__FILE__)
 $LOAD_PATH.unshift(File.expand_path(&quot;#{dir}/../rspec/lib&quot;))
-$LOAD_PATH.unshift(File.expand_path(&quot;#{dir}/../spec_resources/controllers&quot;))
-$LOAD_PATH.unshift(File.expand_path(&quot;#{dir}/../spec_resources/helpers&quot;))
+$LOAD_PATH.unshift(File.expand_path(&quot;#{dir}/resources/controllers&quot;))
+$LOAD_PATH.unshift(File.expand_path(&quot;#{dir}/resources/helpers&quot;))
 require File.expand_path(&quot;#{dir}/../../../../spec/spec_helper&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/controllers/render_spec_controller&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/controllers/rjs_spec_controller&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/controllers/redirect_spec_controller&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/controllers/action_view_base_spec_controller&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/helpers/explicit_helper&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/helpers/more_explicit_helper&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/helpers/view_spec_helper&quot;)
-require File.expand_path(&quot;#{dir}/../spec_resources/helpers/plugin_application_helper&quot;)
+require File.expand_path(&quot;#{dir}/resources/controllers/application&quot;)
+require File.expand_path(&quot;#{dir}/resources/controllers/render_spec_controller&quot;)
+require File.expand_path(&quot;#{dir}/resources/controllers/rjs_spec_controller&quot;)
+require File.expand_path(&quot;#{dir}/resources/controllers/redirect_spec_controller&quot;)
+require File.expand_path(&quot;#{dir}/resources/controllers/action_view_base_spec_controller&quot;)
+require File.expand_path(&quot;#{dir}/resources/helpers/addition_helper&quot;)
+require File.expand_path(&quot;#{dir}/resources/helpers/explicit_helper&quot;)
+require File.expand_path(&quot;#{dir}/resources/helpers/more_explicit_helper&quot;)
+require File.expand_path(&quot;#{dir}/resources/helpers/view_spec_helper&quot;)
+require File.expand_path(&quot;#{dir}/resources/helpers/plugin_application_helper&quot;)
 
-ActionController::Routing.controller_paths &lt;&lt; &quot;#{dir}/../spec_resources/controllers&quot;
+require File.expand_path(&quot;#{dir}/resources/models/animal&quot;)
+require File.expand_path(&quot;#{dir}/resources/models/person&quot;)
+require File.expand_path(&quot;#{dir}/resources/models/thing&quot;)
+
+extra_controller_paths = File.expand_path(&quot;#{dir}/resources/controllers&quot;)
+
+unless ActionController::Routing.controller_paths.include?(extra_controller_paths)
+  ActionController::Routing.instance_eval {@possible_controllers = nil}
+  ActionController::Routing.controller_paths &lt;&lt; extra_controller_paths
+end
 
 module Spec
   module Rails
     module Example
       class ViewExampleGroupController
-        set_view_path File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;spec_resources&quot;, &quot;views&quot;)
+        set_view_path File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;spec&quot;, &quot;resources&quot;, &quot;views&quot;)
       end
     end
   end
@@ -38,6 +49,13 @@ class Proc
   end
 end
 
+Spec::Runner.configure do |config|
+  config.before(:each, :type =&gt; :controller) do
+  end
+end
+
+
+ActionController::Routing::Routes.clear! # only since we're drawing routes here
 ActionController::Routing::Routes.draw do |map|
   map.resources :rspec_on_rails_specs
   map.connect 'custom_route', :controller =&gt; 'custom_route_spec', :action =&gt; 'custom_route'</diff>
      <filename>vendor/plugins/rspec-rails/spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
 Autotest.add_hook :initialize do |at|
   at.add_exception(&quot;spec/interop/test/unit/resources&quot;)
+  at.add_exception(&quot;spec/spec/runner/drb_command_line_spec.rb&quot;)
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/.autotest</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,9 @@
 pkg
 doc
+coverage
 tmtags
 story_server/prototype/rspec_stories.html
 .DS_Store
 .emacs-project
 *~
+email.txt</diff>
      <filename>vendor/plugins/rspec/.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,41 @@
-$:.unshift('lib')
+# -*- ruby -*-
+
+$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
 require 'rubygems'
-require 'rake/gempackagetask'
-require 'rake/contrib/rubyforgepublisher'
-require 'rake/clean'
-require 'rake/rdoctask'
-require 'rake/testtask'
+require 'hoe'
 require 'spec/version'
-dir = File.dirname(__FILE__)
+require 'spec/rake/spectask'
+require 'cucumber/rake/task'
+
+class Hoe
+  def extra_deps
+    @extra_deps.reject! { |x| Array(x).first == 'hoe' }
+    @extra_deps
+  end
+end
 
-# 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'
+Hoe.new('rspec', Spec::VERSION::STRING) do |p|
+  p.summary = Spec::VERSION::SUMMARY
+  p.url = 'http://rspec.info/'
+  p.description = &quot;Behaviour Driven Development for Ruby.&quot;
+  p.rubyforge_name = 'rspec'
+  p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
+  p.extra_deps = [[&quot;cucumber&quot;,&quot;&gt;= 0.1.13&quot;]]
+  p.remote_rdoc_dir = &quot;rspec/#{Spec::VERSION::STRING}&quot;
+end
+
+['audit','test','test_deps','default','post_blog'].each do |task|
+  Rake.application.instance_variable_get('@tasks').delete(task)
+end
 
-PKG_NAME = &quot;rspec&quot;
-PKG_VERSION   = Spec::VERSION::STRING
-PKG_FILE_NAME = &quot;#{PKG_NAME}-#{PKG_VERSION}&quot;
-PKG_FILES = FileList[
-  '[A-Z]*',
-  'lib/**/*.rb', 
-  'spec/**/*',
-  'examples/**/*',
-  'failing_examples/**/*',
-  'plugins/**/*',
-  'stories/**/*',
-  'rake_tasks/**/*'
-]
+task :verify_rcov =&gt; [:spec, :features]
+task :default =&gt; :verify_rcov
 
-task :default =&gt; [:verify_rcov]
-task :verify_rcov =&gt; [:spec, :stories]
+# # Some of the tasks are in separate files since they are also part of the website documentation
+load File.dirname(__FILE__) + '/resources/rake/examples.rake'
+load File.dirname(__FILE__) + '/resources/rake/examples_with_rcov.rake'
+load File.dirname(__FILE__) + '/resources/rake/failing_examples_with_html.rake'
+load File.dirname(__FILE__) + '/resources/rake/verify_rcov.rake'
 
 desc &quot;Run all specs&quot;
 Spec::Rake::SpecTask.new do |t|
@@ -37,69 +43,18 @@ Spec::Rake::SpecTask.new do |t|
   t.spec_opts = ['--options', 'spec/spec.opts']
   unless ENV['NO_RCOV']
     t.rcov = true
-    t.rcov_dir = '../doc/output/coverage'
-    t.rcov_opts = ['--exclude', 'lib/spec.rb,lib/spec/runner.rb,spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest']
+    t.rcov_dir = 'coverage'
+    t.rcov_opts = ['--text-report', '--exclude', &quot;lib/spec.rb,lib/spec/runner.rb,spec\/spec,bin\/spec,examples,\/gems,\/Library\/Ruby,\.autotest,#{ENV['GEM_HOME']}&quot;]
   end
 end
 
-desc &quot;Run all stories&quot;
-task :stories do
-  html = 'story_server/prototype/rspec_stories.html'
-  ruby &quot;stories/all.rb --colour --format plain --format html:#{html}&quot;
-  unless IO.read(html) =~ /&lt;span class=&quot;param&quot;&gt;/m
-    raise 'highlighted parameters are broken in story HTML'
-  end
-end
-
-desc &quot;Run all specs and store html output in doc/output/report.html&quot;
-Spec::Rake::SpecTask.new('spec_html') do |t|
-  t.spec_files = FileList['spec/**/*_spec.rb']
-  t.spec_opts = ['--format html:../../../../doc/output/report.html', '--format progress','--backtrace']
-end
+desc &quot;Run Cucumber features&quot;
+Cucumber::Rake::Task.new do; end
 
-desc &quot;Run all failing examples&quot;
+desc &quot;Run failing examples (see failure output)&quot;
 Spec::Rake::SpecTask.new('failing_examples') do |t|
   t.spec_files = FileList['failing_examples/**/*_spec.rb']
-end
-
-desc 'Generate RDoc'
-rd = Rake::RDocTask.new do |rdoc|
-  rdoc.rdoc_dir = '../doc/output/rdoc'
-  rdoc.options &lt;&lt; '--title' &lt;&lt; 'RSpec' &lt;&lt; '--line-numbers' &lt;&lt; '--inline-source' &lt;&lt; '--main' &lt;&lt; 'README'
-  rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'lib/**/*.rb')
-end
-
-spec = Gem::Specification.new do |s|
-  s.name = PKG_NAME
-  s.version = PKG_VERSION
-  s.summary = Spec::VERSION::DESCRIPTION
-  s.description = &lt;&lt;-EOF
-    RSpec is a behaviour driven development (BDD) framework for Ruby.  RSpec was
-    created in response to Dave Astels' article _A New Look at Test Driven Development_
-    which can be read at: http://daveastels.com/index.php?p=5  RSpec is intended to
-    provide the features discussed in Dave's article.
-  EOF
-
-  s.files = PKG_FILES.to_a
-  s.require_path = 'lib'
-
-  s.has_rdoc = true
-  s.rdoc_options = rd.options
-  s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
-
-  s.bindir = 'bin'
-  s.executables = ['spec', 'spec_translator', 'autospec']
-  s.default_executable = 'spec'
-  s.author = &quot;RSpec Development Team&quot;
-  s.email = &quot;rspec-devel@rubyforge.org&quot;
-  s.homepage = &quot;http://rspec.rubyforge.org&quot;
-  s.platform = Gem::Platform::RUBY
-  s.rubyforge_project = &quot;rspec&quot;
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.need_zip = true
-  pkg.need_tar = true
+  t.spec_opts = ['--options', 'spec/spec.opts']
 end
 
 def egrep(pattern)
@@ -121,7 +76,8 @@ task :todo do
   egrep /(FIXME|TODO|TBD)/
 end
 
-task :release =&gt; [:verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news]
+desc &quot;verify_committed, verify_rcov, post_news, release&quot;
+task :complete_release =&gt; [:verify_committed, :verify_rcov, :post_news, :release]
 
 desc &quot;Verifies that there is no uncommitted code&quot;
 task :verify_committed do
@@ -130,133 +86,4 @@ task :verify_committed do
       raise &quot;\n!!! Do a git commit first !!!\n\n&quot; if line =~ /^#\s*modified:/
     end
   end
-end
-
-desc &quot;Creates a tag in svn&quot;
-task :tag do
-  # from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1]
-  # to = from.gsub(/trunk/, &quot;tags/#{Spec::VERSION::TAG}&quot;)
-  # current = from.gsub(/trunk/, &quot;tags/CURRENT&quot;)
-  # 
-  # puts &quot;Creating tag in SVN&quot;
-  # tag_cmd = &quot;svn cp #{from} #{to} -m \&quot;Tag release #{Spec::VERSION::FULL_VERSION}\&quot;&quot;
-  # `#{tag_cmd}` ; raise &quot;ERROR: #{tag_cmd}&quot; unless $? == 0
-  # 
-  # puts &quot;Removing CURRENT&quot;
-  # remove_current_cmd = &quot;svn rm #{current} -m \&quot;Remove tags/CURRENT\&quot;&quot;
-  # `#{remove_current_cmd}` ; raise &quot;ERROR: #{remove_current_cmd}&quot; unless $? == 0
-  # 
-  # puts &quot;Re-Creating CURRENT&quot;
-  # create_current_cmd = &quot;svn cp #{to} #{current} -m \&quot;Copy #{Spec::VERSION::TAG} to tags/CURRENT\&quot;&quot;
-  # `#{create_current_cmd}` ; &quot;ERROR: #{create_current_cmd}&quot; unless $? == 0
-end
-
-task :verify_user do
-  raise &quot;RUBYFORGE_USER environment variable not set!&quot; unless ENV['RUBYFORGE_USER']
-end
-
-desc &quot;Upload Website to RubyForge&quot;
-task :publish_website =&gt; [:verify_user, :website] do
-  unless Spec::VERSION::RELEASE_CANDIDATE
-    publisher = Rake::SshDirPublisher.new(
-      &quot;rspec-website@rubyforge.org&quot;,
-      &quot;/var/www/gforge-projects/#{PKG_NAME}&quot;,
-      &quot;../doc/output&quot;
-    )
-    publisher.upload
-  else
-    puts &quot;** Not publishing packages to RubyForge - this is a prerelease&quot;
-  end
-end
-
-desc &quot;Upload Website archive to RubyForge&quot;
-task :archive_website =&gt; [:verify_user, :website] do
-  publisher = Rake::SshDirPublisher.new(
-    &quot;rspec-website@rubyforge.org&quot;,
-    &quot;/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}&quot;,
-    &quot;../doc/output&quot;
-  )
-  publisher.upload
-end
-
-desc &quot;Package the Rails plugin&quot;
-task :package_rspec_on_rails do
-  mkdir 'pkg' rescue nil
-  rm_rf &quot;pkg/rspec-rails-#{PKG_VERSION}&quot; rescue nil
-  `git clone ../rspec-rails pkg/rspec-rails-#{PKG_VERSION}`
-  rm_rf &quot;pkg/rspec-rails-#{PKG_VERSION}/.git&quot;
-  Dir.chdir 'pkg' do
-    `tar cvzf rspec-rails-#{PKG_VERSION}.tgz rspec-rails-#{PKG_VERSION}`
-  end
-end
-task :pkg =&gt; :package_rspec_on_rails
-
-desc &quot;Package the RSpec.tmbundle&quot;
-task :package_tmbundle do
-  mkdir 'pkg' rescue nil
-  rm_rf &quot;pkg/RSpec-#{PKG_VERSION}.tmbundle&quot; rescue nil
-  `git clone ../../../../RSpec.tmbundle pkg/RSpec-#{PKG_VERSION}.tmbundle`
-  rm_rf &quot;pkg/RSpec-#{PKG_VERSION}.tmbundle/.git&quot;
-  Dir.chdir 'pkg' do
-    `tar cvzf RSpec-#{PKG_VERSION}.tmbundle.tgz RSpec-#{PKG_VERSION}.tmbundle`
-  end
-end
-task :pkg =&gt; :package_tmbundle
-
-desc &quot;Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file&quot;
-task :publish_packages =&gt; [:verify_user, :package, :pkg] do
-  release_files = FileList[
-    &quot;pkg/#{PKG_FILE_NAME}.gem&quot;,
-    &quot;pkg/#{PKG_FILE_NAME}.tgz&quot;,
-    &quot;pkg/rspec-rails-#{PKG_VERSION}.tgz&quot;,
-    &quot;pkg/#{PKG_FILE_NAME}.zip&quot;,
-    &quot;pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz&quot;
-  ]
-  unless Spec::VERSION::RELEASE_CANDIDATE
-    require 'meta_project'
-    require 'rake/contrib/xforge'
-
-    Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf|
-      # Never hardcode user name and password in the Rakefile!
-      xf.user_name = ENV['RUBYFORGE_USER']
-      xf.files = release_files.to_a
-      xf.release_name = &quot;RSpec #{PKG_VERSION}&quot;
-    end
-  else
-    puts &quot;SINCE THIS IS A PRERELEASE, FILES ARE UPLOADED WITH SSH, NOT TO THE RUBYFORGE FILE SECTION&quot;
-    puts &quot;YOU MUST TYPE THE PASSWORD #{release_files.length} TIMES...&quot;
-
-    host = &quot;rspec-website@rubyforge.org&quot;
-    remote_dir = &quot;/var/www/gforge-projects/#{PKG_NAME}&quot;
-
-    publisher = Rake::SshFilePublisher.new(
-      host,
-      remote_dir,
-      File.dirname(__FILE__),
-      *release_files
-    )
-    publisher.upload
-
-    puts &quot;UPLADED THE FOLLOWING FILES:&quot;
-    release_files.each do |file|
-      name = file.match(/pkg\/(.*)/)[1]
-      puts &quot;* http://rspec.rubyforge.org/#{name}&quot;
-    end
-
-    puts &quot;They are not linked to anywhere, so don't forget to tell people!&quot;
-  end
-end
-
-desc &quot;Publish news on RubyForge&quot;
-task :publish_news =&gt; [:verify_user] do
-  unless Spec::VERSION::RELEASE_CANDIDATE
-    require 'meta_project'
-    require 'rake/contrib/xforge'
-    Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
-      # Never hardcode user name and password in the Rakefile!
-      news.user_name = ENV['RUBYFORGE_USER']
-    end
-  else
-    puts &quot;** Not publishing news to RubyForge - this is a prerelease&quot;
-  end
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
 #!/usr/bin/env ruby
-ENV['RSPEC'] = 'true'
-system 'autotest'
\ No newline at end of file
+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>
      <filename>vendor/plugins/rspec/bin/autospec</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
 #!/usr/bin/env ruby
 $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + &quot;/../lib&quot;))
 require 'spec'
-exit ::Spec::Runner::CommandLine.run(rspec_options)
+exit ::Spec::Runner::CommandLine.run</diff>
      <filename>vendor/plugins/rspec/bin/spec</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 Autotest.add_discovery do
-  &quot;rspec&quot; if File.exist?('spec') &amp;&amp; ENV['RSPEC']
+  &quot;rspec&quot; if File.directory?('spec') &amp;&amp; ENV['RSPEC']
 end</diff>
      <filename>vendor/plugins/rspec/lib/autotest/discover.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ Autotest.add_hook :initialize do |at|
   at.clear_mappings
   # watch out: Ruby bug (1.8.6):
   # %r(/) != /\//
-  at.add_mapping(%r%^spec/.*\.rb$%) { |filename, _| 
+  at.add_mapping(%r%^spec/.*_spec.rb$%) { |filename, _| 
     filename 
   }
   at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m| 
@@ -21,14 +21,14 @@ class Autotest::Rspec &lt; 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.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?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?/
+      if trace =~ /\n(\.\/)?(.*spec\.rb):[\d]+:/
         filters[$2] &lt;&lt; spec
       end
     end
@@ -36,37 +36,12 @@ class Autotest::Rspec &lt; Autotest
   end
 
   def make_test_cmd(files_to_test)
-    return &quot;#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}&quot;
+    return '' if files_to_test.empty?
+    spec_program = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
+    return &quot;#{ruby} #{spec_program} #{files_to_test.keys.flatten.join(' ')} #{add_options_if_present}&quot;
   end
   
   def add_options_if_present # :nodoc:
     File.exist?(&quot;spec/spec.opts&quot;) ? &quot;-O spec/spec.opts &quot; : &quot;&quot;
   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 then
-      @spec_command = spec_commands.find { |cmd| File.exists? cmd }
-
-      raise RspecCommandError, &quot;No spec command could be found!&quot; 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:
-  #
-  #   * bin/spec
-  #   * default spec bin/loader installed in Rubygems
-  def spec_commands
-    [
-      File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
-      File.join(Config::CONFIG['bindir'], 'spec')
-    ]
-  end
 end</diff>
      <filename>vendor/plugins/rspec/lib/autotest/rspec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,31 +1,7 @@
-require 'spec/version'
 require 'spec/matchers'
 require 'spec/expectations'
 require 'spec/example'
-require 'spec/extensions'
 require 'spec/runner'
-require 'spec/adapters'
-
-if Object.const_defined?(:Test)
-  require 'spec/interop/test'
-end
-
-module Spec
-  class &lt;&lt; self
-    def run?
-      @run || rspec_options.examples_run?
-    end
-
-    def run
-      return true if run?
-      result = rspec_options.run_examples
-      @run = true
-      result
-    end
-    attr_writer :run
-    
-    def exit?
-      !Object.const_defined?(:Test) || Test::Unit.run?
-    end
-  end
-end
\ No newline at end of file
+require 'spec/version'
+require 'spec/dsl'
+require 'spec/ruby'</diff>
      <filename>vendor/plugins/rspec/lib/spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,186 @@
+module Spec
+  # == Example Groups and Code Examples
+  #
+  # A Code Example is an executable example of how a bit of code is expected
+  # to behave.
+  #
+  # An Example Group is a group of code examples.
+  #
+  # RSpec exposes a DSL to describe groups of examples.
+  #  
+  #   describe Account do
+  #     it &quot;should have a balance of $0&quot; do
+  #       account = Account.new
+  #       account.balance.should == Money.new(0, :dollars)
+  #     end
+  #   end
+  #  
+  # == Before and After
+  #  
+  # You can use the &lt;tt&gt;before()&lt;/tt&gt; and &lt;tt&gt;after()&lt;/tt&gt; methods to extract
+  # common code within an Example Group. Both methods take an optional scope
+  # argument so you can run the block before :each example or before :all
+  # examples
+  #  
+  #   describe &quot;...&quot; do
+  #     before :all do
+  #       ...
+  #     end
+  #  
+  #     before :each do
+  #       ...
+  #     end
+  #  
+  #     it &quot;should do something&quot; do
+  #       ...
+  #     end
+  #  
+  #     it &quot;should do something else&quot; do
+  #       ...
+  #     end
+  #  
+  #     after :each do
+  #       ...
+  #     end
+  #  
+  #     after :all do
+  #       ...
+  #     end
+  #  
+  #   end
+  #  
+  # The &lt;tt&gt;before :each&lt;/tt&gt; block will run before each of the examples, once
+  # for each example. Likewise, the &lt;tt&gt;after :each&lt;/tt&gt; block will run after
+  # each of the examples.
+  #  
+  # It is also possible to specify a &lt;tt&gt;before :all&lt;/tt&gt; and &lt;tt&gt;after
+  # :all&lt;/tt&gt; block that will run only once for each example group, before the
+  # first &lt;code&gt;before :each&lt;/code&gt; and after the last &lt;code&gt;after
+  # :each&lt;/code&gt; respectively. 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 an
+  # example group:
+  #  
+  #   describe &quot;...&quot; do
+  #    
+  #     it &quot;...&quot; do
+  #       helper_method
+  #     end
+  #  
+  #     def helper_method
+  #       ...
+  #     end
+  #  
+  #   end
+  #  
+  # == Included helper methods
+  #  
+  # You can include helper methods in multiple example groups by expressing
+  # them within a module, and then including that module in your example
+  # groups:
+  #  
+  #   module AccountExampleHelperMethods
+  #     def helper_method
+  #       ...
+  #     end
+  #   end
+  #  
+  #   describe &quot;A new account&quot; do
+  #     include AccountExampleHelperMethods
+  #     before do
+  #       @account = Account.new
+  #     end
+  #  
+  #     it &quot;should have a balance of $0&quot; 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 &quot;All Editions&quot; do
+  #    it &quot;all editions behaviour&quot; ...
+  #  end
+  #
+  #  describe SmallEdition do
+  #    it_should_behave_like &quot;All Editions&quot;
+  #   
+  #    it &quot;should do small edition stuff&quot; do
+  #      ...
+  #    end
+  #  end
+  #
+  # You can also assign the shared group to a module and include that
+  #
+  #  share_as :AllEditions do
+  #    it &quot;should do all editions stuff&quot; ...
+  #  end
+  #
+  #  describe SmallEdition do
+  #    it_should_behave_like AllEditions
+  #   
+  #    it &quot;should do small edition stuff&quot; 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 &quot;should do small edition stuff&quot; do
+  #      ...
+  #    end
+  #  end
+  module Example
+    class &lt;&lt; self
+      def args_and_options(*args) # :nodoc:
+        with_options_from(args) do |options|
+          return args, options
+        end
+      end
+
+      def scope_from(*args) # :nodoc:
+        args[0] || :each
+      end
+
+      def scope_and_options(*args) # :nodoc:
+        args, options = args_and_options(*args)
+        return scope_from(*args), options
+      end
+
+      def add_spec_path_to(args) # :nodoc:
+        args &lt;&lt; {} unless Hash === args.last
+        args.last[:spec_path] ||= caller(0)[2]
+      end
+
+    private
+    
+      def with_options_from(args)
+        yield Hash === args.last ? args.pop : {} if block_given?
+      end
+    end
+  end
+end
+
 require 'timeout'
+require 'spec/example/before_and_after_hooks'
 require 'spec/example/pending'
 require 'spec/example/module_reopening_fix'
-require 'spec/example/module_inclusion_warnings'
 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>
      <filename>vendor/plugins/rspec/lib/spec/example.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,30 @@
 module Spec
   module Example
     class ExamplePendingError &lt; StandardError
-    end
+      attr_reader :pending_caller
 
-    class PendingExampleFixedError &lt; StandardError
+      def initialize(message=nil)
+        super
+        @pending_caller = caller[2]
+      end
+    end
+    
+    class NotYetImplementedError &lt; ExamplePendingError
+      MESSAGE = &quot;Not Yet Implemented&quot;
+      RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + &quot;/../..&quot;)
+      
+      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 &lt; StandardError; end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/errors.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,9 +6,18 @@ module Spec
       extend Spec::Example::ExampleGroupMethods
       include Spec::Example::ExampleMethods
 
-      def initialize(defined_description, &amp;implementation)
+      def initialize(defined_description, options={}, &amp;implementation)
+        @_options = options
         @_defined_description = defined_description
-        @_implementation = implementation
+        @_implementation = implementation || pending_implementation
+        @_backtrace = caller
+      end
+      
+    private
+      
+      def pending_implementation
+        error = NotYetImplementedError.new(caller)
+        lambda { raise(error) }
       end
     end
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,21 @@
 module Spec
   module Example
     class ExampleGroupFactory
-      class &lt;&lt; self
+      module ClassMethods
         def reset
           @example_group_types = nil
           default(ExampleGroup)
         end
 
+        def registered_or_ancestor_of_registered?(example_group_classes) # :nodoc:
+          example_group_classes.each do |example_group_class|
+            return false unless registered_types.any? do |registered_type|
+              registered_type.ancestors.include? example_group_class
+            end
+          end
+          return true
+        end
+
         # Registers an example group class +klass+ with the symbol +type+. For
         # example:
         #
@@ -41,12 +50,32 @@ module Spec
         end
         
         def create_example_group(*args, &amp;block)
-          opts = Hash === args.last ? args.last : {}
-          superclass = determine_superclass(opts)
+          raise ArgumentError if args.empty?
+          raise ArgumentError unless block
+          Spec::Example::add_spec_path_to(args)
+          block = include_scope(args.last[:scope], &amp;block)
+          superclass = determine_superclass(args.last)
           superclass.describe(*args, &amp;block)
         end
+        
+        def create_shared_example_group(*args, &amp;block)
+          Spec::Example::add_spec_path_to(args)
+          SharedExampleGroup.register(*args, &amp;block)
+        end
+        
+        def include_scope(context, &amp;block)
+          if (Spec::Ruby.version.to_f == 1.9) &amp;&amp; Module === context
+            lambda {include context;instance_eval(&amp;block)}
+          else
+            block
+          end
+        end
+        
+        def assign_scope(scope, args)
+          args.last[:scope] = scope
+        end
 
-        protected
+      protected
 
         def determine_superclass(opts)
           key = if opts[:type]
@@ -56,8 +85,15 @@ module Spec
           end
           get(key)
         end
+        
+      private
+        
+        def registered_types
+          @example_group_types.values
+        end
 
       end
+      extend ClassMethods
       self.reset
     end
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/example_group_factory.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,19 +6,49 @@ module Spec
         attr_accessor :matcher_class
 
         def description_text(*args)
-          args.inject(&quot;&quot;) do |result, arg|
-            result &lt;&lt; &quot; &quot; unless (result == &quot;&quot; || arg.to_s =~ /^(\s|\.|#)/)
-            result &lt;&lt; arg.to_s
+          args.inject(&quot;&quot;) do |description, arg|
+            description &lt;&lt; &quot; &quot; unless (description == &quot;&quot; || arg.to_s =~ /^(\s|\.|#)/)
+            description &lt;&lt; arg.to_s
           end
         end
+
+        def example_group_creation_listeners
+          @example_group_creation_listeners ||= []
+        end
       end
 
-      attr_reader :description_text, :description_args, :description_options, :spec_path, :registration_binding_block
+      include Spec::Example::BeforeAndAfterHooks
+
+      attr_reader :description_options, :spec_path
+      alias :options :description_options
+      
+      # Provides the backtrace up to where this example_group was declared.
+      def backtrace
+        @backtrace
+      end
+
+      # Deprecated - use +backtrace()+
+      def example_group_backtrace
+        Kernel.warn &lt;&lt;-WARNING
+ExampleGroupMethods#example_group_backtrace is deprecated and will be removed
+from a future version. Please use ExampleGroupMethods#backtrace instead.
+WARNING
+        backtrace
+      end
+      
+      def description_args
+        @description_args ||= []
+      end
 
       def inherited(klass)
         super
-        klass.register {}
-        Spec::Runner.register_at_exit_hook
+        register_example_group(klass)
+      end
+      
+      def register_example_group(klass)
+        ExampleGroupMethods.example_group_creation_listeners.each do |l|
+          l.register_example_group(klass)
+        end
       end
       
       # Makes the describe/it syntax available from a class. For example:
@@ -36,41 +66,54 @@ module Spec
       #   end
       #
       def describe(*args, &amp;example_group_block)
-        args &lt;&lt; {} unless Hash === args.last
         if example_group_block
-          params = args.last
-          params[:spec_path] = eval(&quot;caller(0)[1]&quot;, example_group_block) unless params[:spec_path]
-          if params[:shared]
-            SharedExampleGroup.new(*args, &amp;example_group_block)
+          Spec::Example::add_spec_path_to(args)
+          options = args.last
+          if options[:shared]
+            create_shared_example_group(*args, &amp;example_group_block)
           else
-            self.subclass(&quot;Subclass&quot;) do
-              describe(*args)
-              module_eval(&amp;example_group_block)
-            end
+            create_subclass(*args, &amp;example_group_block)
           end
         else
           set_description(*args)
-          before_eval
-          self
         end
       end
       alias :context :describe
-
+      
+      def create_shared_example_group(*args, &amp;example_group_block) # :nodoc:
+        SharedExampleGroup.register(*args, &amp;example_group_block)
+      end
+      
+      def create_subclass(*args, &amp;example_group_block) # :nodoc:
+        subclass(&quot;Subclass&quot;) do
+          set_description(*args)
+          module_eval(&amp;example_group_block)
+        end
+      end
+      
+      # Creates a new subclass of self, with a name &quot;under&quot; our own name.
+      # Example:
+      #
+      #   x = Foo::Bar.subclass('Zap'){}
+      #   x.name # =&gt; Foo::Bar::Zap_1
+      #   x.superclass.name # =&gt; Foo::Bar
+      def subclass(base_name, &amp;body) # :nodoc:
+        @class_count ||= 0
+        @class_count += 1
+        klass = Class.new(self)
+        class_name = &quot;#{base_name}_#{@class_count}&quot;
+        const_set(class_name, klass)
+        klass.instance_eval(&amp;body)
+        klass
+      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_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(&quot;Shared Example Group '#{shared_example_group}' can not be found&quot;)
-          end
-          include(example_group)
+      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]
@@ -79,7 +122,7 @@ module Spec
       # a predicate on your class. RSpec provides a couple of these
       # out of the box:
       #
-      #   exist (or state expectations)
+      #   exist (for state expectations)
       #     File.should exist(&quot;path/to/file&quot;)
       #
       #   an_instance_of (for mock argument constraints)
@@ -103,145 +146,96 @@ module Spec
         @predicate_matchers ||= {:an_instance_of =&gt; :is_a?}
       end
 
-      # Creates an instance of Spec::Example::Example and adds
-      # it to a collection of examples of the current example group.
-      def it(description=nil, &amp;implementation)
-        e = new(description, &amp;implementation)
+      # 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={}, &amp;implementation)
+        e = new(description, options, &amp;implementation)
         example_objects &lt;&lt; e
         e
       end
 
-      alias_method :specify, :it
+      alias_method :it, :example
+      alias_method :specify, :example
 
       # Use this to temporarily disable an example.
-      def xit(description=nil, opts={}, &amp;block)
+      def xexample(description=nil, opts={}, &amp;block)
         Kernel.warn(&quot;Example disabled: #{description}&quot;)
       end
-      alias_method :xspecify, :xit
+      
+      alias_method :xit, :xexample
+      alias_method :xspecify, :xexample
 
-      def run
-        examples = examples_to_run
-        reporter.add_example_group(self) unless examples_to_run.empty?
+      def run(run_options)
+        examples = examples_to_run(run_options)
+        run_options.reporter.add_example_group(self) unless examples.empty?
         return true if examples.empty?
-        return dry_run(examples) if dry_run?
+        return dry_run(examples, run_options) if run_options.dry_run?
 
-        plugin_mock_framework
-        define_methods_from_predicate_matchers
+        plugin_mock_framework(run_options)
+        define_methods_from_predicate_matchers(run_options)
 
-        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)
+        success, before_all_instance_variables = run_before_all(run_options)
+        success, after_all_instance_variables  = execute_examples(success, before_all_instance_variables, examples, run_options)
+        success                                = run_after_all(success, after_all_instance_variables, run_options)
       end
 
       def description
         result = ExampleGroupMethods.description_text(*description_parts)
-        if result.nil? || result == &quot;&quot;
-          return to_s
-        else
-          result
-        end
+        (result.nil? || result == &quot;&quot;) ? to_s : result
       end
-
+      
       def described_type
-        description_parts.find {|part| part.is_a?(Module)}
+        description_parts.reverse.find {|part| part.is_a?(Module)}
       end
-
+      
+      # Defines an explicit subject for an example group which can then be the
+      # implicit receiver (through delegation) of calls to +should+.
+      #
+      # == Examples
+      #
+      #   describe CheckingAccount, &quot;with $50&quot; do
+      #     subject { CheckingAccount.new(:amount =&gt; 50, :currency =&gt; :USD) }
+      #     it { should have_a_balance_of(50, :USD)}
+      #     it { should_not be_overdrawn}
+      #   end
+      #
+      # See +ExampleMethods#should+ for more information about this approach.
+      def subject(&amp;block)
+        @_subject_block = block
+      end
+      
+      def subject_block
+        @_subject_block || lambda {nil}
+      end
+      
       def description_parts #:nodoc:
         parts = []
-        execute_in_class_hierarchy do |example_group|
-          parts &lt;&lt; example_group.description_args
+        each_ancestor_example_group_class do |example_group_class|
+          parts &lt;&lt; example_group_class.description_args
         end
         parts.flatten.compact
       end
 
       def set_description(*args)
-        args, options = args_and_options(*args)
+        args, options = Spec::Example.args_and_options(*args)
         @description_args = args
         @description_options = options
         @description_text = ExampleGroupMethods.description_text(*args)
+        @backtrace = caller(1)
         @spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
-        if described_type.class == Module
-          @described_module = described_type
-        end
         self
       end
       
-      attr_reader :described_module
-
-      def examples #:nodoc:
+      def examples(run_options=nil) #:nodoc:
         examples = example_objects.dup
         add_method_examples(examples)
-        rspec_options.reverse ? examples.reverse : examples
+        (run_options &amp;&amp; run_options.reverse) ? examples.reverse : examples
       end
 
       def number_of_examples #:nodoc:
         examples.length
       end
 
-      # Registers a block to be executed before each example.
-      # This method prepends +block+ to existing before blocks.
-      def prepend_before(*args, &amp;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, &amp;block)
-        scope, options = scope_and_options(*args)
-        parts = before_parts_from_scope(scope)
-        parts &lt;&lt; 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, &amp;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, &amp;block)
-        scope, options = scope_and_options(*args)
-        parts = after_parts_from_scope(scope)
-        parts &lt;&lt; block
-      end
-
-      def remove_after(scope, &amp;block)
-        after_each_parts.delete(block)
-      end
-
-      # Deprecated. Use before(:each)
-      def setup(&amp;block)
-        before(:each, &amp;block)
-      end
-
-      # Deprecated. Use after(:each)
-      def teardown(&amp;block)
-        after(:each, &amp;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
-
       # Only used from RSpec's own examples
       def reset # :nodoc:
         @before_all_parts = nil
@@ -250,137 +244,110 @@ module Spec
         @after_each_parts = nil
       end
 
-      def register(&amp;registration_binding_block)
-        @registration_binding_block = registration_binding_block
-        rspec_options.add_example_group self
-      end
-
-      def unregister #:nodoc:
-        rspec_options.remove_example_group self
-      end
-
-      def registration_backtrace
-        eval(&quot;caller&quot;, registration_binding_block)
-      end
-
       def run_before_each(example)
-        execute_in_class_hierarchy do |example_group|
-          example.eval_each_fail_fast(example_group.before_each_parts)
+        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)
-        execute_in_class_hierarchy(:superclass_first) do |example_group|
-          example.eval_each_fail_slow(example_group.after_each_parts)
+        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)
+      def dry_run(examples, run_options)
         examples.each do |example|
-          rspec_options.reporter.example_started(example)
-          rspec_options.reporter.example_finished(example)
+          run_options.reporter.example_started(example)
+          run_options.reporter.example_finished(example)
         end
-        return true
       end
 
-      def run_before_all
+      def run_before_all(run_options)
         before_all = new(&quot;before(:all)&quot;)
         begin
-          execute_in_class_hierarchy do |example_group|
-            before_all.eval_each_fail_fast(example_group.before_all_parts)
+          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 =&gt; e
-          reporter.failure(before_all, e)
+          run_options.reporter.failure(before_all, e)
           return [false, before_all.instance_variable_hash]
         end
       end
 
-      def execute_examples(success, instance_variables, examples)
+      def execute_examples(success, instance_variables, examples, run_options)
         return [success, instance_variables] unless success
 
         after_all_instance_variables = instance_variables
         examples.each do |example_group_instance|
-          success &amp;= example_group_instance.execute(rspec_options, instance_variables)
+          success &amp;= example_group_instance.execute(run_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)
+      def run_after_all(success, instance_variables, run_options)
         after_all = new(&quot;after(:all)&quot;)
         after_all.set_instance_variables_from_hash(instance_variables)
-        execute_in_class_hierarchy(:superclass_first) do |example_group|
-          after_all.eval_each_fail_slow(example_group.after_all_parts)
+        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 =&gt; e
-        reporter.failure(after_all, e)
+        run_options.reporter.failure(after_all, e)
         return false
       end
 
-      def examples_to_run
-        all_examples = examples
-        return all_examples unless specified_examples?
+      def examples_to_run(run_options)
+        all_examples = examples(run_options)
+        return all_examples unless specified_examples?(run_options)
         all_examples.reject do |example|
           matcher = ExampleGroupMethods.matcher_class.
             new(description.to_s, example.description)
-          !matcher.matches?(specified_examples)
+          !matcher.matches?(run_options.examples)
         end
       end
 
-      def specified_examples?
-        specified_examples &amp;&amp; !specified_examples.empty?
-      end
-
-      def specified_examples
-        rspec_options.examples
-      end
-
-      def reporter
-        rspec_options.reporter
-      end
-
-      def dry_run?
-        rspec_options.dry_run
+      def specified_examples?(run_options)
+        run_options.examples &amp;&amp; !run_options.examples.empty?
       end
 
       def example_objects
         @example_objects ||= []
       end
 
-      def execute_in_class_hierarchy(superclass_last=false)
+      def each_ancestor_example_group_class(superclass_last=false)
         classes = []
         current_class = self
-        while is_example_group?(current_class)
+        while is_example_group_class?(current_class)
           superclass_last ? classes &lt;&lt; current_class : classes.unshift(current_class)
           current_class = current_class.superclass
         end
-        superclass_last ? classes &lt;&lt; ExampleMethods : classes.unshift(ExampleMethods)
-
+        
         classes.each do |example_group|
           yield example_group
         end
       end
 
-      def is_example_group?(klass)
-        Module === klass &amp;&amp; klass.kind_of?(ExampleGroupMethods)
+      def is_example_group_class?(klass)
+        klass.kind_of?(ExampleGroupMethods) &amp;&amp; klass.included_modules.include?(ExampleMethods)
       end
 
-      def plugin_mock_framework
-        case mock_framework = Spec::Runner.configuration.mock_framework
+      def plugin_mock_framework(run_options)
+        case mock_framework = run_options.mock_framework
         when Module
           include mock_framework
         else
-          require Spec::Runner.configuration.mock_framework
-          include Spec::Plugins::MockFramework
+          require mock_framework
+          include Spec::Adapters::MockFramework
         end
       end
 
-      def define_methods_from_predicate_matchers # :nodoc:
+      def define_methods_from_predicate_matchers(run_options) # :nodoc:
         all_predicate_matchers = predicate_matchers.merge(
-          Spec::Runner.configuration.predicate_matchers
+          run_options.predicate_matchers
         )
         all_predicate_matchers.each_pair do |matcher_method, method_on_object|
           define_method matcher_method do |*args|
@@ -389,30 +356,6 @@ module Spec
         end
       end
 
-      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; rspec_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; rspec_options.after_suite_parts
-        end
-      end
-
-      def before_eval
-      end
-
       def add_method_examples(examples)
         instance_methods.sort.each do |method_name|
           if example_method?(method_name)
@@ -430,10 +373,23 @@ module Spec
       def should_method?(method_name)
         !(method_name =~ /^should(_not)?$/) &amp;&amp;
         method_name =~ /^should/ &amp;&amp; (
-          instance_method(method_name).arity == 0 ||
-          instance_method(method_name).arity == -1
+          [-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)
+          unless example_group
+            raise RuntimeError.new(&quot;Shared Example Group '#{shared_example_group}' can not be found&quot;)
+          end
+          include(example_group)
+        end
+      end
+
     end
 
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/example_group_methods.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,45 @@
 module Spec
   module Example
     module ExampleMethods
-      extend ExampleGroupMethods
+      
       extend ModuleReopeningFix
-      include ModuleInclusionWarnings
       
+      def subject # :nodoc: this is somewhat experimental
+        @subject ||= ( instance_variable_get(subject_variable_name) ||
+                       instance_eval(&amp;self.class.subject_block) ||
+                       (described_class ? described_class.new : nil) )
+      end
+
+      # When +should+ is called with no explicit receiver, the call is
+      # delegated to the *subject* of the example group. This could be either
+      # an explicit subject generated by calling the block passed to
+      # +ExampleGroupMethods#subject+, or, if the group is describing a class,
+      # an implicitly generated instance of that class.
+      def should(matcher=nil)
+        if matcher
+          subject.should(matcher)
+        else
+          subject.should
+        end
+      end
+
+      # Just like +should+, +should_not+ delegates to the subject (implicit or
+      # explicit) of the example group.
+      def should_not(matcher)
+        subject.should_not(matcher)
+      end
+      
+      def violated(message=&quot;&quot;)
+        raise Spec::Expectations::ExpectationNotMetError.new(message)
+      end
 
-      PENDING_EXAMPLE_BLOCK = lambda {
-        raise Spec::Example::ExamplePendingError.new(&quot;Not Yet Implemented&quot;)
-      }
+      def description
+        @_defined_description || ::Spec::Matchers.generated_description || &quot;NO NAME&quot;
+      end
+      
+      def options
+        @_options
+      end
 
       def execute(options, instance_variables)
         options.reporter.example_started(self)
@@ -17,13 +48,13 @@ module Spec
         execution_error = nil
         Timeout.timeout(options.timeout) do
           begin
-            before_example
-            run_with_description_capturing
+            before_each_example
+            eval_block
           rescue Exception =&gt; e
             execution_error ||= e
           end
           begin
-            after_example
+            after_each_example
           rescue Exception =&gt; e
             execution_error ||= e
           end
@@ -33,28 +64,24 @@ module Spec
         success = execution_error.nil? || ExamplePendingError === execution_error
       end
 
-      def instance_variable_hash
+      def instance_variable_hash # :nodoc:
         instance_variables.inject({}) do |variable_hash, variable_name|
           variable_hash[variable_name] = instance_variable_get(variable_name)
           variable_hash
         end
       end
 
-      def violated(message=&quot;&quot;)
-        raise Spec::Expectations::ExpectationNotMetError.new(message)
-      end
-
-      def eval_each_fail_fast(procs) #:nodoc:
-        procs.each do |proc|
-          instance_eval(&amp;proc)
+      def eval_each_fail_fast(examples) # :nodoc:
+        examples.each do |example|
+          instance_eval(&amp;example)
         end
       end
 
-      def eval_each_fail_slow(procs) #:nodoc:
+      def eval_each_fail_slow(examples) # :nodoc:
         first_exception = nil
-        procs.each do |proc|
+        examples.each do |example|
           begin
-            instance_eval(&amp;proc)
+            instance_eval(&amp;example)
           rescue Exception =&gt; e
             first_exception ||= e
           end
@@ -62,15 +89,19 @@ module Spec
         raise first_exception if first_exception
       end
 
-      def description
-        @_defined_description || @_matcher_description || &quot;NO NAME&quot;
-      end
-
-      def __full_description
+      # Concats the class description with the example description.
+      #
+      #   describe Account do
+      #     it &quot;should start with a balance of 0&quot; do
+      #     ...
+      #
+      #   full_description
+      #   =&gt; &quot;Account should start with a balance of 0&quot;
+      def full_description
         &quot;#{self.class.description} #{self.description}&quot;
       end
       
-      def set_instance_variables_from_hash(ivars)
+      def set_instance_variables_from_hash(ivars) # :nodoc:
         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)
@@ -79,34 +110,59 @@ module Spec
         end
       end
 
-      def run_with_description_capturing
-        begin
-          return instance_eval(&amp;(@_implementation || PENDING_EXAMPLE_BLOCK))
-        ensure
-          @_matcher_description = Spec::Matchers.generated_description
-          Spec::Matchers.clear_generated_description
-        end
+      def eval_block # :nodoc:
+        instance_eval(&amp;@_implementation)
       end
 
-      def implementation_backtrace
-        eval(&quot;caller&quot;, @_implementation)
+      # Provides the backtrace up to where this example was declared.
+      def backtrace
+        @_backtrace
       end
       
-      protected
+      # Deprecated - use +backtrace()+
+      def implementation_backtrace
+        Kernel.warn &lt;&lt;-WARNING
+ExampleMethods#implementation_backtrace is deprecated and will be removed
+from a future version. Please use ExampleMethods#backtrace instead.
+WARNING
+        backtrace
+      end
+
+      private
       include Matchers
       include Pending
       
-      def before_example
+      def before_each_example
         setup_mocks_for_rspec
         self.class.run_before_each(self)
       end
 
-      def after_example
+      def after_each_example
         self.class.run_after_each(self)
         verify_mocks_for_rspec
       ensure
         teardown_mocks_for_rspec
       end
+
+      def subject_variable_name
+        '@' &lt;&lt; (described_class ? underscore(described_class.name) : '__this_does_not_exist')
+      end
+      
+      def described_class
+        Class === described_type ? described_type : nil
+      end
+      
+      def described_type
+        self.class.described_type
+      end
+
+      def underscore(camel_cased_word)
+        camel_cased_word.to_s.gsub(/::/, '_').
+          gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
+          gsub(/([a-z\d])([A-Z])/,'\1_\2').
+          tr(&quot;-&quot;, &quot;_&quot;).
+          downcase
+      end
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/example_methods.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,57 +1,62 @@
 module Spec
   module Example
     class SharedExampleGroup &lt; Module
-      class &lt;&lt; self
-        def add_shared_example_group(new_example_group)
-          guard_against_redefining_existing_example_group(new_example_group)
-          shared_example_groups &lt;&lt; new_example_group
+      module ClassMethods
+        def register(*args, &amp;block)
+          new_example_group = new(*args, &amp;block)
+          shared_example_groups &lt;&lt; new_example_group unless already_registered?(new_example_group)
+          new_example_group
+        end
+        
+        def find(example_group_description)
+          shared_example_groups.find {|b| b.description == example_group_description}
         end
 
-        def find_shared_example_group(example_group_description)
-          shared_example_groups.find do |b|
-            b.description == example_group_description
-          end
+        def clear
+          shared_example_groups.clear
+        end
+        
+        def include?(group)
+          shared_example_groups.include?(group)
+        end
+        
+        def count
+          shared_example_groups.length
         end
 
+      private
+      
         def shared_example_groups
-          # TODO - this needs to be global, or at least accessible from
-          # from subclasses of Example in a centralized place. I'm not loving
-          # this as a solution, but it works for now.
-          $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)
+      
+        def already_registered?(new_example_group)
+          existing_example_group = find(new_example_group.description)
+          return false unless existing_example_group
+          return true if new_example_group.equal?(existing_example_group)
+          return true if expanded_path(new_example_group) == expanded_path(existing_example_group)
           raise ArgumentError.new(&quot;Shared Example '#{existing_example_group.description}' already exists&quot;)
         end
 
-        def spec_path(example_group)
+        def expanded_path(example_group)
           File.expand_path(example_group.spec_path)
         end
       end
+
+      extend ClassMethods
       include ExampleGroupMethods
-      public :include
 
       def initialize(*args, &amp;example_group_block)
-        describe(*args)
+        set_description(*args)
         @example_group_block = example_group_block
-        self.class.add_shared_example_group(self)
       end
 
       def included(mod) # :nodoc:
         mod.module_eval(&amp;@example_group_block)
       end
 
-      def execute_in_class_hierarchy(superclass_last=false)
-        classes = [self]
-        superclass_last ? classes &lt;&lt; ExampleMethods : classes.unshift(ExampleMethods)
-        classes.each do |example_group|
-          yield example_group
-        end
+      def each_ancestor_example_group_class(superclass_last=false)
+        yield self
       end
     end
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/example/shared_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -30,27 +30,31 @@ module Spec
   # 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 &lt;&lt; self
-      attr_accessor :differ
+    def self.differ
+      @differ
+    end
+    
+    def self.differ=(differ)
+      @differ = differ
+    end
 
-      # raises a Spec::Expectations::ExpectationNotMetError with message
-      #
-      # When a differ has been assigned and fail_with is passed
-      # &lt;code&gt;expected&lt;/code&gt; and &lt;code&gt;target&lt;/code&gt;, 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 &amp;&amp; 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 &lt;&lt; &quot;\nDiff:&quot; &lt;&lt; self.differ.diff_as_string(target.to_s, expected)
-          elsif !target.is_a?(Proc)
-            message &lt;&lt; &quot;\nDiff:&quot; &lt;&lt; self.differ.diff_as_object(target, expected)
-          end
+    # raises a Spec::Expectations::ExpectationNotMetError with message
+    #
+    # When a differ has been assigned and fail_with is passed
+    # &lt;code&gt;expected&lt;/code&gt; and &lt;code&gt;target&lt;/code&gt;, passes them
+    # to the differ to append a diff message to the failure message.
+    def self.fail_with(message, expected=nil, target=nil) # :nodoc:
+      if Array === message &amp;&amp; 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 &lt;&lt; &quot;\nDiff:&quot; &lt;&lt; self.differ.diff_as_string(target.to_s, expected)
+        elsif !target.is_a?(Proc)
+          message &lt;&lt; &quot;\nDiff:&quot; &lt;&lt; self.differ.diff_as_object(target, expected)
         end
-        Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
       end
+      Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/expectations.rb</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@ module Spec
       #
       # NOTE that this does NOT support receiver.should != expected.
       # Instead, use receiver.should_not == expected
-      def should(matcher=:use_operator_matcher, &amp;block)
+      def should(matcher=nil, &amp;block)
         ExpectationMatcherHandler.handle_matcher(self, matcher, &amp;block)
       end
 
@@ -50,7 +50,7 @@ module Spec
       #     =&gt; Passes unless (receiver =~ regexp)
       #
       # See Spec::Matchers for more information about matchers
-      def should_not(matcher=:use_operator_matcher, &amp;block)
+      def should_not(matcher=nil, &amp;block)
         NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &amp;block)
       end
 </diff>
      <filename>vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,61 +2,46 @@ module Spec
   module Expectations
     class InvalidMatcherError &lt; ArgumentError; end        
     
-    module MatcherHandlerHelper
-      def describe_matcher(matcher)
-        matcher.respond_to?(:description) ? matcher.description : &quot;[#{matcher.class.name} does not provide a description]&quot;
-      end
-    end
-    
     class ExpectationMatcherHandler        
-      class &lt;&lt; self
-        include MatcherHandlerHelper
-        def handle_matcher(actual, matcher, &amp;block)
-          if :use_operator_matcher == matcher
-            return Spec::Matchers::PositiveOperatorMatcher.new(actual)
-          end
+      def self.handle_matcher(actual, matcher, &amp;block)
+        ::Spec::Matchers.last_should = &quot;should&quot;
+        return Spec::Matchers::PositiveOperatorMatcher.new(actual) if matcher.nil?
 
-          unless matcher.respond_to?(:matches?)
-            raise InvalidMatcherError, &quot;Expected a matcher, got #{matcher.inspect}.&quot;
-          end
-          
-          match = matcher.matches?(actual, &amp;block)
-          ::Spec::Matchers.generated_description = &quot;should #{describe_matcher(matcher)}&quot;
-          Spec::Expectations.fail_with(matcher.failure_message) unless match
-          match
+        unless matcher.respond_to?(:matches?)
+          raise InvalidMatcherError, &quot;Expected a matcher, got #{matcher.inspect}.&quot;
         end
+        
+        match = matcher.matches?(actual, &amp;block)
+        ::Spec::Matchers.last_matcher = matcher
+        Spec::Expectations.fail_with(matcher.failure_message) unless match
+        match
       end
     end
 
     class NegativeExpectationMatcherHandler
-      class &lt;&lt; self
-        include MatcherHandlerHelper
-        def handle_matcher(actual, matcher, &amp;block)
-          if :use_operator_matcher == matcher
-            return Spec::Matchers::NegativeOperatorMatcher.new(actual)
-          end
-          
-          unless matcher.respond_to?(:matches?)
-            raise InvalidMatcherError, &quot;Expected a matcher, got #{matcher.inspect}.&quot;
-          end
+      def self.handle_matcher(actual, matcher, &amp;block)
+        ::Spec::Matchers.last_should = &quot;should not&quot;
+        return Spec::Matchers::NegativeOperatorMatcher.new(actual) if matcher.nil?
+        
+        unless matcher.respond_to?(:matches?)
+          raise InvalidMatcherError, &quot;Expected a matcher, got #{matcher.inspect}.&quot;
+        end
 
-          unless matcher.respond_to?(:negative_failure_message)
-            Spec::Expectations.fail_with(
+        unless matcher.respond_to?(:negative_failure_message)
+          Spec::Expectations.fail_with(
 &lt;&lt;-EOF
 Matcher does not support should_not.
 See Spec::Matchers for more information
 about matchers.
 EOF
 )
-          end
-          match = matcher.matches?(actual, &amp;block)
-          ::Spec::Matchers.generated_description = &quot;should not #{describe_matcher(matcher)}&quot;
-          Spec::Expectations.fail_with(matcher.negative_failure_message) if match
-          match
         end
+        match = matcher.matches?(actual, &amp;block)
+        ::Spec::Matchers.last_matcher = matcher
+        Spec::Expectations.fail_with(matcher.negative_failure_message) if match
+        match
       end
     end
-
   end
 end
 </diff>
      <filename>vendor/plugins/rspec/lib/spec/expectations/handler.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,39 +23,51 @@ module Test
       extend Spec::Example::ExampleGroupMethods
       include Spec::Example::ExampleMethods
 
-      before(:each) {setup}
-      after(:each) {teardown}
+      def self.suite
+        Test::Unit::TestSuiteAdapter.new(self)
+      end
 
-      class &lt;&lt; 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]./ &amp;&amp; (
-            instance_method(method_name).arity == 0 ||
-            instance_method(method_name).arity == -1
-          )
-        end
+      def self.example_method?(method_name)
+        should_method?(method_name) || test_method?(method_name)
       end
 
-      def initialize(defined_description, &amp;implementation)
+      def self.test_method?(method_name)
+        method_name =~ /^test[_A-Z]./ &amp;&amp; (
+          instance_method(method_name).arity == 0 ||
+          instance_method(method_name).arity == -1
+        )
+      end
+
+      before(:each) {setup}
+      after(:each) {teardown}
+
+      def initialize(defined_description, options={}, &amp;implementation)
         @_defined_description = defined_description
-        @_implementation = implementation
+        
+        # TODO - examples fail in rspec-rails if we remove &quot;|| pending_implementation&quot;
+        #      - 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 &quot;complies&quot; with Test::Unit's interface.
+        # @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
+
+        # TODO - this is necessary to run single examples in rspec-rails, but I haven't
+        # found a good way to write a failing example just within rspec core
+        @_backtrace = caller
       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>
      <filename>vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 class Test::Unit::TestResult
   alias_method :tu_passed?, :passed?
   def passed?
-    return tu_passed? &amp; ::Spec.run
+    return tu_passed? &amp; ::Spec::Runner.run
   end
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ module Test
 
       def run(*args)
         return true unless args.empty?
-        example_group.run
+        example_group.run(Spec::Runner.options)
       end
 
       def size</diff>
      <filename>vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,12 @@
+require 'spec/matchers/operator_matcher'
+require 'spec/matchers/generated_descriptions'
+require 'spec/matchers/errors'
+require 'spec/matchers/method_missing'
 require 'spec/matchers/simple_matcher'
 require 'spec/matchers/be'
 require 'spec/matchers/be_close'
 require 'spec/matchers/change'
+require 'spec/matchers/match_array'
 require 'spec/matchers/eql'
 require 'spec/matchers/equal'
 require 'spec/matchers/exist'
@@ -13,7 +18,7 @@ require 'spec/matchers/raise_error'
 require 'spec/matchers/respond_to'
 require 'spec/matchers/satisfy'
 require 'spec/matchers/throw_symbol'
-require 'spec/matchers/operator_matcher'
+require 'spec/matchers/wrap_expectation'
 
 module Spec
 
@@ -132,25 +137,5 @@ module Spec
   #     config.include(CustomGameMatchers)
   #   end
   #
-  module Matchers
-    module ModuleMethods
-      attr_accessor :generated_description
-
-      def clear_generated_description
-        self.generated_description = nil
-      end
-    end
-
-    extend ModuleMethods
-
-    def method_missing(sym, *args, &amp;block) # :nodoc:
-      return Matchers::Be.new(sym, *args) if sym.starts_with?(&quot;be_&quot;)
-      return Matchers::Has.new(sym, *args) if sym.starts_with?(&quot;have_&quot;)
-      super
-    end
-
-    class MatcherError &lt; StandardError
-    end
-    
-  end
+  module Matchers; end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,140 +3,115 @@ module Spec
     
     class Be #:nodoc:
       def initialize(*args)
-        if args.empty?
-          @expected = :satisfy_if
-        else
-          @expected = parse_expected(args.shift)
-        end
+        @expected = args.empty? ? true : set_expected(args.shift)
         @args = args
-        @comparison = &quot;&quot;
       end
       
       def matches?(actual)
         @actual = actual
-        if handling_predicate?
-          begin
-            return @result = actual.__send__(predicate, *@args)
-          rescue =&gt; 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 = &quot;http://eigenclass.org/hiki.rb?rcov-0.8.0&quot;
-          end
+        handling_predicate? ? run_predicate_on(actual) : match_or_compare(actual)
+      end
+      
+      def run_predicate_on(actual)
+        begin
+          return @result = actual.__send__(predicate, *@args)
+        rescue NameError =&gt; predicate_missing_error
+          &quot;this needs to be here or rcov will not count this branch even though it's executed in a code example&quot;
+        end
 
-          # This supports should_exist &gt; target.exists? in the old world.
-          # We should consider deprecating that ability as in the new world
-          # you can't write &quot;should exist&quot; unless you have your own custom matcher.
-          begin
-            return @result = actual.__send__(present_tense_predicate, *@args)
-          rescue
-            raise predicate_error
-          end
-        else
-          return match_or_compare
+        begin
+          return @result = actual.__send__(present_tense_predicate, *@args)
+        rescue NameError
+          raise predicate_missing_error
         end
       end
       
       def failure_message
-        return &quot;expected #{@comparison}#{expected}, got #{@actual.inspect}&quot; unless handling_predicate?
-        return &quot;expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}&quot;
+        handling_predicate? ?
+          &quot;expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}&quot; :
+          &quot;expected #{@comparison_method} #{expected}, got #{@actual.inspect}&quot;.gsub('  ',' ')
       end
       
       def negative_failure_message
-        return &quot;expected not #{expected}, got #{@actual.inspect}&quot; unless handling_predicate?
-        return &quot;expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}&quot;
-      end
-      
-      def expected
-        return &quot;if to be satisfied&quot; if @expected == :satisfy_if
-        return true if @expected == :true
-        return false if @expected == :false
-        return &quot;nil&quot; if @expected == :nil
-        return @expected.inspect
-      end
-      
-      def match_or_compare
-        return @actual ? true : false if @expected == :satisfy_if
-        return @actual == true if @expected == :true
-        return @actual == false if @expected == :false
-        return @actual.nil? if @expected == :nil
-        return @actual &lt; @expected if @less_than
-        return @actual &lt;= @expected if @less_than_or_equal
-        return @actual &gt;= @expected if @greater_than_or_equal
-        return @actual &gt; @expected if @greater_than
-        return @actual == @expected if @double_equal
-        return @actual === @expected if @triple_equal
-        return @actual.equal?(@expected)
+        if handling_predicate?
+          &quot;expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}&quot;
+        else
+          message = &lt;&lt;-MESSAGE
+'should_not be #{@comparison_method} #{expected}' not only FAILED,
+it reads really poorly.
+          MESSAGE
+          
+          raise message &lt;&lt; ([:===,:==].include?(@comparison_method) ?
+            &quot;Why don't you try expressing it without the \&quot;be\&quot;?&quot; :
+            &quot;Why don't you try expressing it in the positive?&quot;)
+        end
       end
       
-      def ==(expected)
-        @prefix = &quot;be &quot;
-        @double_equal = true
-        @comparison = &quot;== &quot;
-        @expected = expected
-        self
-      end
-
-      def ===(expected)
-        @prefix = &quot;be &quot;
-        @triple_equal = true
-        @comparison = &quot;=== &quot;
-        @expected = expected
-        self
-      end
-
-      def &lt;(expected)
-        @prefix = &quot;be &quot;
-        @less_than = true
-        @comparison = &quot;&lt; &quot;
-        @expected = expected
-        self
-      end
-
-      def &lt;=(expected)
-        @prefix = &quot;be &quot;
-        @less_than_or_equal = true
-        @comparison = &quot;&lt;= &quot;
-        @expected = expected
-        self
+      def description
+        &quot;#{prefix_to_sentence}#{comparison} #{expected_to_sentence}#{args_to_sentence}&quot;.gsub(/\s+/,' ')
       end
 
-      def &gt;=(expected)
-        @prefix = &quot;be &quot;
-        @greater_than_or_equal = true
-        @comparison = &quot;&gt;= &quot;
-        @expected = expected
-        self
+      [:==, :&lt;, :&lt;=, :&gt;=, :&gt;, :===].each do |method|
+        define_method method do |expected|
+          compare_to(expected, :using =&gt; method)
+          self
+        end
       end
 
-      def &gt;(expected)
-        @prefix = &quot;be &quot;
-        @greater_than = true
-        @comparison = &quot;&gt; &quot;
-        @expected = expected
-        self
-      end
+      private
+        def match_or_compare(actual)
+          case @expected
+          when TrueClass
+            @actual
+          else
+            @actual.__send__(comparison_method, @expected)
+          end
+        end
       
-      def description
-        &quot;#{prefix_to_sentence}#{comparison}#{expected_to_sentence}#{args_to_sentence}&quot;
-      end
+        def comparison_method
+          @comparison_method || :equal?
+        end
+      
+        def expected
+          @expected
+        end
 
-      private
+        def compare_to(expected, opts)
+          @expected, @comparison_method = expected, opts[:using]
+        end
+
+        def set_expected(expected)
+          Symbol === expected ? parse_expected(expected) : expected
+        end
+        
         def parse_expected(expected)
-          if Symbol === expected
-            @handling_predicate = true
-            [&quot;be_an_&quot;,&quot;be_a_&quot;,&quot;be_&quot;].each do |prefix|
-              if expected.starts_with?(prefix)
-                @prefix = prefix
-                return &quot;#{expected.to_s.sub(@prefix,&quot;&quot;)}&quot;.to_sym
+          [&quot;be_an_&quot;,&quot;be_a_&quot;,&quot;be_&quot;].each do |prefix|
+            handling_predicate!
+            if expected.starts_with?(prefix)
+              set_prefix(prefix)
+              expected = expected.to_s.sub(prefix,&quot;&quot;)
+              [true, false, nil].each do |val|
+                return val if val.to_s == expected
               end
+              return expected.to_sym
             end
           end
-          @prefix = &quot;&quot;
-          return expected
+        end
+        
+        def set_prefix(prefix)
+          @prefix = prefix
+        end
+        
+        def prefix
+          @prefix
+        end
+
+        def handling_predicate!
+          @handling_predicate = true
         end
         
         def handling_predicate?
-          return false if [:true, :false, :nil].include?(@expected)
+          return false if [true, false, nil].include?(expected)
           return @handling_predicate
         end
 
@@ -149,21 +124,27 @@ module Spec
         end
         
         def args_to_s
-          return &quot;&quot; if @args.empty?
-          inspected_args = @args.collect{|a| a.inspect}
-          return &quot;(#{inspected_args.join(', ')})&quot;
+          @args.empty? ? &quot;&quot; : parenthesize(inspected_args.join(', '))
+        end
+        
+        def parenthesize(string)
+          return &quot;(#{string})&quot;
+        end
+        
+        def inspected_args
+          @args.collect{|a| a.inspect}
         end
         
         def comparison
-          @comparison
+          @comparison_method.nil? ? &quot; &quot; : &quot;be #{@comparison_method.to_s} &quot;
         end
         
         def expected_to_sentence
-          split_words(@expected)
+          split_words(expected)
         end
         
         def prefix_to_sentence
-          split_words(@prefix)
+          split_words(prefix)
         end
 
         def split_words(sym)
@@ -184,7 +165,6 @@ module Spec
     end
  
     # :call-seq:
-    #   should be
     #   should be_true
     #   should be_false
     #   should be_nil
@@ -192,7 +172,7 @@ module Spec
     #   should_not be_nil
     #   should_not be_arbitrary_predicate(*args)
     #
-    # Given true, false, or nil, will pass if actual is
+    # Given true, false, or nil, will pass if actual value is
     # true, false or nil (respectively). Given no args means
     # the caller should satisfy an if condition (to be or not to be). 
     #
@@ -206,7 +186,6 @@ module Spec
     #
     # == Examples 
     #
-    #   target.should be
     #   target.should be_true
     #   target.should be_false
     #   target.should be_nil</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/be.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,6 @@
 module Spec
   module Matchers
 
-    class BeClose #:nodoc:
-      def initialize(expected, delta)
-        @expected = expected
-        @delta = delta
-      end
-      
-      def matches?(actual)
-        @actual = actual
-        (@actual - @expected).abs &lt; @delta
-      end
-      
-      def failure_message
-        &quot;expected #{@expected} +/- (&lt; #{@delta}), got #{@actual}&quot;
-      end
-      
-      def description
-        &quot;be close to #{@expected} (within +- #{@delta})&quot;
-      end
-    end
-    
     # :call-seq:
     #   should be_close(expected, delta)
     #   should_not be_close(expected, delta)
@@ -31,7 +11,11 @@ module Spec
     #
     #   result.should be_close(3.0, 0.5)
     def be_close(expected, delta)
-      Matchers::BeClose.new(expected, delta)
+      simple_matcher do |actual, matcher|
+        matcher.failure_message = &quot;expected #{expected} +/- (&lt; #{delta}), got #{actual}&quot;
+        matcher.description = &quot;be close to #{expected} (within +- #{delta})&quot;
+        (actual - expected).abs &lt; delta
+      end
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/be_close.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,60 +4,60 @@ module Spec
     #Based on patch from Wilson Bilkovich
     class Change #:nodoc:
       def initialize(receiver=nil, message=nil, &amp;block)
-        @receiver = receiver
-        @message = message
-        @block = block
+        @message = message || &quot;result&quot;
+        @value_proc = block || lambda {
+          receiver.__send__(message)
+        }
       end
       
-      def matches?(target, &amp;block)
-        if block
-          raise MatcherError.new(&lt;&lt;-EOF
-block passed to should or should_not change must use {} instead of do/end
-EOF
-)
-        end
-        @target = target
-        execute_change
-        return false if @from &amp;&amp; (@from != @before)
-        return false if @to &amp;&amp; (@to != @after)
+      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) &gt;= @minimum) if @minimum
         return ((@after - @before) &lt;= @maximum) if @maximum        
         return @before != @after
       end
       
-      def execute_change
-        @before = @block.nil? ? @receiver.send(@message) : @block.call
-        @target.call
-        @after = @block.nil? ? @receiver.send(@message) : @block.call
+      def raise_block_syntax_error
+        raise MatcherError.new(&lt;&lt;-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
-          &quot;#{result} should have been changed to #{@to.inspect}, but is now #{@after.inspect}&quot;
+          &quot;#{@message} should have been changed to #{@to.inspect}, but is now #{@after.inspect}&quot;
         elsif @from
-          &quot;#{result} should have initially been #{@from.inspect}, but was #{@before.inspect}&quot;
+          &quot;#{@message} should have initially been #{@from.inspect}, but was #{@before.inspect}&quot;
         elsif @amount
-          &quot;#{result} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}&quot;
+          &quot;#{@message} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}&quot;
         elsif @minimum
-          &quot;#{result} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}&quot;
+          &quot;#{@message} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}&quot;
         elsif @maximum
-          &quot;#{result} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}&quot;
+          &quot;#{@message} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}&quot;
         else
-          &quot;#{result} should have changed, but is still #{@before.inspect}&quot;
+          &quot;#{@message} should have changed, but is still #{@before.inspect}&quot;
         end
       end
       
-      def result
-        @message || &quot;result&quot;
-      end
-      
       def actual_delta
         @after - @before
       end
       
       def negative_failure_message
-        &quot;#{result} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}&quot;
+        &quot;#{@message} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}&quot;
       end
       
       def by(amount)
@@ -141,8 +141,8 @@ EOF
     # &lt;tt&gt;change&lt;/tt&gt; must use the &lt;tt&gt;{}&lt;/tt&gt; form (&lt;tt&gt;do/end&lt;/tt&gt; is not
     # supported).
     #
-    def change(target=nil, message=nil, &amp;block)
-      Matchers::Change.new(target, message, &amp;block)
+    def change(receiver=nil, message=nil, &amp;block)
+      Matchers::Change.new(receiver, message, &amp;block)
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/change.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,6 @@
 module Spec
   module Matchers
   
-    class Eql #:nodoc:
-      def initialize(expected)
-        @expected = expected
-      end
-  
-      def matches?(actual)
-        @actual = actual
-        @actual.eql?(@expected)
-      end
-
-      def failure_message
-        return &quot;expected #{@expected.inspect}, got #{@actual.inspect} (using .eql?)&quot;, @expected, @actual
-      end
-      
-      def negative_failure_message
-        return &quot;expected #{@actual.inspect} not to equal #{@expected.inspect} (using .eql?)&quot;, @expected, @actual
-      end
-
-      def description
-        &quot;eql #{@expected.inspect}&quot;
-      end
-    end
-    
     # :call-seq:
     #   should eql(expected)
     #   should_not eql(expected)
@@ -37,7 +14,12 @@ module Spec
     #   5.should eql(5)
     #   5.should_not eql(3)
     def eql(expected)
-      Matchers::Eql.new(expected)
+      simple_matcher do |actual, matcher|
+        matcher.failure_message          = &quot;expected #{expected.inspect}, got #{actual.inspect} (using .eql?)&quot;, expected, actual
+        matcher.negative_failure_message = &quot;expected #{actual.inspect} not to equal #{expected.inspect} (using .eql?)&quot;, expected, actual
+        matcher.description              = &quot;eql #{expected.inspect}&quot;
+        actual.eql?(expected)
+      end
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/eql.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,6 @@
 module Spec
   module Matchers
   
-    class Equal #:nodoc:
-      def initialize(expected)
-        @expected = expected
-      end
-  
-      def matches?(actual)
-        @actual = actual
-        @actual.equal?(@expected)
-      end
-
-      def failure_message
-        return &quot;expected #{@expected.inspect}, got #{@actual.inspect} (using .equal?)&quot;, @expected, @actual
-      end
-
-      def negative_failure_message
-        return &quot;expected #{@actual.inspect} not to equal #{@expected.inspect} (using .equal?)&quot;, @expected, @actual
-      end
-      
-      def description
-        &quot;equal #{@expected.inspect}&quot;
-      end
-    end
-    
     # :call-seq:
     #   should equal(expected)
     #   should_not equal(expected)
@@ -37,7 +14,12 @@ module Spec
     #   5.should equal(5) #Fixnums are equal
     #   &quot;5&quot;.should_not equal(&quot;5&quot;) #Strings that look the same are not the same object
     def equal(expected)
-      Matchers::Equal.new(expected)
+      simple_matcher do |actual, matcher|
+        matcher.failure_message          = &quot;expected #{expected.inspect}, got #{actual.inspect} (using .equal?)&quot;, expected, actual
+        matcher.negative_failure_message = &quot;expected #{actual.inspect} not to equal #{expected.inspect} (using .equal?)&quot;, expected, actual
+        matcher.description              = &quot;equal #{expected.inspect}&quot;
+        actual.equal?(expected)
+      end
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/equal.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,16 @@
 module Spec
   module Matchers
-    class Exist
-      def matches? actual
-        @actual = actual
-        @actual.exist?
-      end
-      def failure_message
-        &quot;expected #{@actual.inspect} to exist, but it doesn't.&quot;
-      end
-      def negative_failure_message
-        &quot;expected #{@actual.inspect} to not exist, but it does.&quot;
+    # :call-seq:
+    #   should exist
+    #   should_not exist
+    #
+    # Passes if actual.exist?
+    def exist
+      simple_matcher do |actual, matcher|
+        matcher.failure_message = &quot;expected #{actual.inspect} to exist, but it doesn't.&quot;
+        matcher.negative_failure_message = &quot;expected #{actual.inspect} to not exist, but it does.&quot;
+        actual.exist?
       end
     end
-    def exist; Exist.new; end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/exist.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,34 +1,18 @@
 module Spec
   module Matchers
-    
-    class Has #:nodoc:
-      def initialize(sym, *args)
-        @sym = sym
-        @args = args
-      end
-      
-      def matches?(target)
-        target.send(predicate, *@args)
-      end
-      
-      def failure_message
-        &quot;expected ##{predicate}(#{@args[0].inspect}) to return true, got false&quot;
-      end
-      
-      def negative_failure_message
-        &quot;expected ##{predicate}(#{@args[0].inspect}) to return false, got true&quot;
+    def has(sym, *args) # :nodoc:
+      simple_matcher do |actual, matcher|
+        matcher.failure_message          = &quot;expected ##{predicate(sym)}(#{args[0].inspect}) to return true, got false&quot;
+        matcher.negative_failure_message = &quot;expected ##{predicate(sym)}(#{args[0].inspect}) to return false, got true&quot;
+        matcher.description              = &quot;have key #{args[0].inspect}&quot;
+        actual.__send__(predicate(sym), *args)
       end
-      
-      def description
-        &quot;have key #{@args[0].inspect}&quot;
-      end
-      
-      private
-        def predicate
-          &quot;#{@sym.to_s.sub(&quot;have_&quot;,&quot;has_&quot;)}?&quot;.to_sym
-        end
-        
     end
- 
+    
+  private
+    def predicate(sym)
+      &quot;#{sym.to_s.sub(&quot;have_&quot;,&quot;has_&quot;)}?&quot;.to_sym
+    end
+
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/has.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
 module Spec
   module Matchers
-    
     class Have #:nodoc:
       def initialize(expected, relativity=:exactly)
         @expected = (expected == :no ? 0 : expected)
@@ -15,34 +14,22 @@ module Spec
         }
       end
     
-      def method_missing(sym, *args, &amp;block)
-        @collection_name = sym
-        if defined?(ActiveSupport::Inflector)
-          @plural_collection_name = ActiveSupport::Inflector.pluralize(sym.to_s)
-        elsif Object.const_defined?(:Inflector)
-          @plural_collection_name = Inflector.pluralize(sym.to_s)
-        end
-        @args = args
-        @block = block
-        self
-      end
-    
       def matches?(collection_owner)
         if collection_owner.respond_to?(@collection_name)
-          collection = collection_owner.send(@collection_name, *@args, &amp;@block)
+          collection = collection_owner.__send__(@collection_name, *@args, &amp;@block)
         elsif (@plural_collection_name &amp;&amp; collection_owner.respond_to?(@plural_collection_name))
-          collection = collection_owner.send(@plural_collection_name, *@args, &amp;@block)
+          collection = collection_owner.__send__(@plural_collection_name, *@args, &amp;@block)
         elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size))
           collection = collection_owner
         else
-          collection_owner.send(@collection_name, *@args, &amp;@block)
+          collection_owner.__send__(@collection_name, *@args, &amp;@block)
         end
-        @actual = collection.size if collection.respond_to?(:size)
-        @actual = collection.length if collection.respond_to?(:length)
-        raise not_a_collection if @actual.nil?
-        return @actual &gt;= @expected if @relativity == :at_least
-        return @actual &lt;= @expected if @relativity == :at_most
-        return @actual == @expected
+        @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 &gt;= @expected if @relativity == :at_least
+        return @given &lt;= @expected if @relativity == :at_most
+        return @given == @expected
       end
       
       def not_a_collection
@@ -50,12 +37,12 @@ module Spec
       end
     
       def failure_message
-        &quot;expected #{relative_expectation} #{@collection_name}, got #{@actual}&quot;
+        &quot;expected #{relative_expectation} #{@collection_name}, got #{@given}&quot;
       end
 
       def negative_failure_message
         if @relativity == :exactly
-          return &quot;expected target not to have #{@expected} #{@collection_name}, got #{@actual}&quot;
+          return &quot;expected target not to have #{@expected} #{@collection_name}, got #{@given}&quot;
         elsif @relativity == :at_most
           return &lt;&lt;-EOF
 Isn't life confusing enough?
@@ -79,8 +66,22 @@ EOF
         &quot;have #{relative_expectation} #{@collection_name}&quot;
       end
       
+      def respond_to?(sym)
+        @expected.respond_to?(sym) || super
+      end
+    
       private
       
+      def method_missing(sym, *args, &amp;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
         &quot;#{relativities[@relativity]}#{@expected}&quot;
       end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/have.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,17 @@ module Spec
       def matches?(actual)
         @actual = actual
         @expecteds.each do |expected|
-          return false unless actual.include?(expected)
+          if actual.is_a?(Hash)
+            if expected.is_a?(Hash)
+              expected.each_pair do |k,v|
+                return false unless actual[k] == v
+              end
+            else
+              return false unless actual.has_key?(expected)
+            end
+          else
+            return false unless actual.include?(expected)
+          end
         end
         true
       end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/include.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,30 +1,6 @@
 module Spec
   module Matchers
     
-    class Match #:nodoc:
-      def initialize(expected)
-        @expected = expected
-      end
-      
-      def matches?(actual)
-        @actual = actual
-        return true if actual =~ @expected
-        return false
-      end
-      
-      def failure_message
-        return &quot;expected #{@actual.inspect} to match #{@expected.inspect}&quot;, @expected, @actual
-      end
-      
-      def negative_failure_message
-        return &quot;expected #{@actual.inspect} not to match #{@expected.inspect}&quot;, @expected, @actual
-      end
-      
-      def description
-        &quot;match #{@expected.inspect}&quot;
-      end
-    end
-    
     # :call-seq:
     #   should match(regexp)
     #   should_not match(regexp)
@@ -33,9 +9,14 @@ module Spec
     #
     # == Examples
     #
-    #   email.should match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
+    #   email.should match(/^([^\s]+)((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
     def match(regexp)
-      Matchers::Match.new(regexp)
+      simple_matcher do |actual, matcher|
+        matcher.failure_message          = &quot;expected #{actual.inspect} to match #{regexp.inspect}&quot;, regexp, actual
+        matcher.negative_failure_message = &quot;expected #{actual.inspect} not to match #{regexp.inspect}&quot;, regexp, actual
+        matcher.description              = &quot;match #{regexp.inspect}&quot;
+        actual =~ regexp
+      end
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/match.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,70 +1,73 @@
 module Spec
   module Matchers
-    class BaseOperatorMatcher
-      attr_reader :generated_description
-      
-      def initialize(target)
-        @target = target
-      end
 
-      def ==(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;==&quot;, expected)
-      end
+    class OperatorMatcher
+      @operator_registry = {}
 
-      def ===(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;===&quot;, expected)
+      def self.register(klass, operator, matcher)
+        @operator_registry[klass] ||= {}
+        @operator_registry[klass][operator] = matcher
       end
 
-      def =~(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;=~&quot;, expected)
+      def self.get(klass, operator)
+        return @operator_registry[klass][operator] if @operator_registry[klass]
+        nil
       end
 
-      def &gt;(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;&gt;&quot;, expected)
+      def initialize(actual)
+        @actual = actual
       end
 
-      def &gt;=(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;&gt;=&quot;, expected)
+      def self.use_custom_matcher_or_delegate(operator)
+        define_method(operator) do |expected|
+          if matcher = OperatorMatcher.get(@actual.class, operator)
+            return @actual.send(matcher_method, matcher.new(expected))
+          else
+            ::Spec::Matchers.last_matcher = self
+            @operator, @expected = operator, expected
+            __delegate_operator(@actual, operator, expected)
+          end
+        end
       end
 
-      def &lt;(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;&lt;&quot;, expected)
+      ['==', '===', '=~', '&gt;', '&gt;=', '&lt;', '&lt;='].each do |operator|
+        use_custom_matcher_or_delegate operator
       end
 
-      def &lt;=(expected)
-        @expected = expected
-        __delegate_method_missing_to_target(&quot;&lt;=&quot;, expected)
+      def fail_with_message(message)
+        Spec::Expectations.fail_with(message, @expected, @actual)
       end
 
-      def fail_with_message(message)
-        Spec::Expectations.fail_with(message, @expected, @target)
+      def description
+        &quot;#{@operator} #{@expected.inspect}&quot;
       end
 
     end
 
-    class PositiveOperatorMatcher &lt; BaseOperatorMatcher #:nodoc:
+    class PositiveOperatorMatcher &lt; OperatorMatcher #:nodoc:
+      def matcher_method
+        :should
+      end
 
-      def __delegate_method_missing_to_target(operator, expected)
-        ::Spec::Matchers.generated_description = &quot;should #{operator} #{expected.inspect}&quot;
-        return true if @target.send(operator, expected)
-        return fail_with_message(&quot;expected: #{expected.inspect},\n     got: #{@target.inspect} (using #{operator})&quot;) if ['==','===', '=~'].include?(operator)
-        return fail_with_message(&quot;expected: #{operator} #{expected.inspect},\n     got: #{operator.gsub(/./, ' ')} #{@target.inspect}&quot;)
+      def __delegate_operator(actual, operator, expected)
+        return true if actual.__send__(operator, expected)
+        if ['==','===', '=~'].include?(operator)
+          fail_with_message(&quot;expected: #{expected.inspect},\n     got: #{actual.inspect} (using #{operator})&quot;) 
+        else
+          fail_with_message(&quot;expected: #{operator} #{expected.inspect},\n     got: #{operator.gsub(/./, ' ')} #{actual.inspect}&quot;)
+        end
       end
 
     end
 
-    class NegativeOperatorMatcher &lt; BaseOperatorMatcher #:nodoc:
+    class NegativeOperatorMatcher &lt; OperatorMatcher #:nodoc:
+      def matcher_method
+        :should_not
+      end
 
-      def __delegate_method_missing_to_target(operator, expected)
-        ::Spec::Matchers.generated_description = &quot;should not #{operator} #{expected.inspect}&quot;
-        return true unless @target.send(operator, expected)
-        return fail_with_message(&quot;expected not: #{operator} #{expected.inspect},\n         got: #{operator.gsub(/./, ' ')} #{@target.inspect}&quot;)
+      def __delegate_operator(actual, operator, expected)
+        return true unless actual.__send__(operator, expected)
+        return fail_with_message(&quot;expected not: #{operator} #{expected.inspect},\n         got: #{operator.gsub(/./, ' ')} #{actual.inspect}&quot;)
       end
 
     end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,27 @@
 module Spec
   module Matchers
     class RaiseError #:nodoc:
-      def initialize(error_or_message=Exception, message=nil, &amp;block)
+      def initialize(expected_error_or_message=Exception, expected_message=nil, &amp;block)
         @block = block
-        case error_or_message
+        case expected_error_or_message
         when String, Regexp
-          @expected_error, @expected_message = Exception, error_or_message
+          @expected_error, @expected_message = Exception, expected_error_or_message
         else
-          @expected_error, @expected_message = error_or_message, message
+          @expected_error, @expected_message = expected_error_or_message, expected_message
         end
       end
 
-      def matches?(proc)
+      def matches?(given_proc)
         @raised_expected_error = false
         @with_expected_message = false
         @eval_block = false
         @eval_block_passed = false
         begin
-          proc.call
-        rescue @expected_error =&gt; @actual_error
+          given_proc.call
+        rescue @expected_error =&gt; @given_error
           @raised_expected_error = true
           @with_expected_message = verify_message
-        rescue Exception =&gt; @actual_error
+        rescue Exception =&gt; @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 = &quot;http://eigenclass.org/hiki.rb?rcov-0.8.0&quot;
@@ -37,34 +37,30 @@ module Spec
       def eval_block
         @eval_block = true
         begin
-          @block[@actual_error]
+          @block[@given_error]
           @eval_block_passed = true
         rescue Exception =&gt; err
-          @actual_error = err
+          @given_error = err
         end
       end
 
       def verify_message
         case @expected_message
         when nil
-          return true
+          true
         when Regexp
-          return @expected_message =~ @actual_error.message
+          @expected_message =~ @given_error.message
         else
-          return @expected_message == @actual_error.message
+          @expected_message == @given_error.message
         end
       end
       
       def failure_message
-        if @eval_block
-          return @actual_error.message
-        else
-          return &quot;expected #{expected_error}#{actual_error}&quot;
-        end
+        @eval_block ? @given_error.message : &quot;expected #{expected_error}#{given_error}&quot;
       end
 
       def negative_failure_message
-        &quot;expected no #{expected_error}#{actual_error}&quot;
+        &quot;expected no #{expected_error}#{given_error}&quot;
       end
       
       def description
@@ -83,8 +79,8 @@ module Spec
           end
         end
 
-        def actual_error
-          @actual_error.nil? ? &quot; but nothing was raised&quot; : &quot;, got #{@actual_error.inspect}&quot;
+        def given_error
+          @given_error.nil? ? &quot; but nothing was raised&quot; : &quot;, got #{@given_error.inspect}&quot;
         end
         
         def negative_expectation?</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/raise_error.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,28 +4,54 @@ module Spec
     class RespondTo #:nodoc:
       def initialize(*names)
         @names = names
+        @expected_arity = nil
         @names_not_responded_to = []
       end
       
-      def matches?(target)
+      def matches?(actual)
+        @actual = actual
         @names.each do |name|
-          unless target.respond_to?(name)
-            @names_not_responded_to &lt;&lt; name
-          end
+          @names_not_responded_to &lt;&lt; name unless actual.respond_to?(name) &amp;&amp; matches_arity?(actual, name)
         end
         return @names_not_responded_to.empty?
       end
       
       def failure_message
-        &quot;expected target to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}&quot;
+        &quot;expected #{@actual.inspect} to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}#{with_arity}&quot;
       end
       
       def negative_failure_message
-        &quot;expected target not to respond to #{@names.collect {|name| name.inspect }.join(', ')}&quot;
+        &quot;expected #{@actual.inspect} not to respond to #{@names.collect {|name| name.inspect }.join(', ')}&quot;
       end
       
       def description
-        &quot;respond to ##{@names.to_s}&quot;
+        # Ruby 1.9 returns the same thing for array.to_s as array.inspect, so just use array.inspect here
+        &quot;respond to #{pp_names}#{with_arity}&quot;
+      end
+      
+      def with(n)
+        @expected_arity = n
+        self
+      end
+      
+      def argument
+        self
+      end
+      alias :arguments :argument
+      
+    private
+      
+      def matches_arity?(actual, name)
+        @expected_arity.nil?? true : @expected_arity == actual.method(name).arity 
+      end
+      
+      def with_arity
+        @expected_arity.nil?? &quot;&quot; :
+          &quot; with #{@expected_arity} argument#{@expected_arity == 1 ? '' : 's'}&quot;
+      end
+      
+      def pp_names
+        @names.length == 1 ? &quot;##{@names.first}&quot; : @names.inspect
       end
     end
     </diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/respond_to.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,18 +6,18 @@ module Spec
         @block = block
       end
       
-      def matches?(actual, &amp;block)
+      def matches?(given, &amp;block)
         @block = block if block
-        @actual = actual
-        @block.call(actual)
+        @given = given
+        @block.call(given)
       end
       
       def failure_message
-        &quot;expected #{@actual} to satisfy block&quot;
+        &quot;expected #{@given} to satisfy block&quot;
       end
 
       def negative_failure_message
-        &quot;expected #{@actual} not to satisfy block&quot;
+        &quot;expected #{@given} not to satisfy block&quot;
       end
     end
     </diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/satisfy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,13 +8,13 @@ module Spec
         @match_block = match_block
       end
 
-      def matches?(actual)
-        @actual = actual
+      def matches?(given)
+        @given = given
         case @match_block.arity
         when 2
-          @match_block.call(@actual, self)
+          @match_block.call(@given, self)
         else
-          @match_block.call(@actual)
+          @match_block.call(@given)
         end
       end
       
@@ -23,11 +23,11 @@ module Spec
       end
 
       def failure_message
-        @failure_message || (@description.nil? ? explanation : %[expected #{@description.inspect} but got #{@actual.inspect}])
+        @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 #{@actual.inspect}])
+        @negative_failure_message || (@description.nil? ? explanation : %[expected not to get #{@description.inspect}, but got #{@given.inspect}])
       end
 
       def explanation
@@ -81,7 +81,7 @@ module Spec
     #     simple_matcher(&quot;rhyme with #{expected.inspect}&quot;) do |given, matcher|
     #       matcher.failure_message = &quot;expected #{given.inspect} to rhyme with #{expected.inspect}&quot;
     #       matcher.negative_failure_message = &quot;expected #{given.inspect} not to rhyme with #{expected.inspect}&quot;
-    #       actual.rhymes_with? expected
+    #       given.rhymes_with? expected
     #     end
     #   end
     #
@@ -92,7 +92,7 @@ module Spec
     #       matcher.description = &quot;rhyme with #{expected.inspect}&quot;
     #       matcher.failure_message = &quot;expected #{given.inspect} to rhyme with #{expected.inspect}&quot;
     #       matcher.negative_failure_message = &quot;expected #{given.inspect} not to rhyme with #{expected.inspect}&quot;
-    #       actual.rhymes_with? expected
+    #       given.rhymes_with? expected
     #     end
     #   end
     #</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,39 +2,60 @@ module Spec
   module Matchers
     
     class ThrowSymbol #:nodoc:
-      def initialize(expected=nil)
-        @expected = expected
-        @actual = nil
+      def initialize(expected_symbol = nil, expected_arg=nil)
+        @expected_symbol = expected_symbol
+        @expected_arg = expected_arg
+        @caught_symbol = nil
       end
       
-      def matches?(proc)
+      def matches?(given_proc)
         begin
-          proc.call
-        rescue NameError =&gt; e
-          raise e unless e.message =~ /uncaught throw/
-          @actual = e.name.to_sym
+          if @expected_symbol.nil?
+            given_proc.call
+          else
+            @caught_arg = catch :proc_did_not_throw_anything do
+              catch @expected_symbol do
+                given_proc.call
+                throw :proc_did_not_throw_anything, :nothing_thrown
+              end
+            end
+            @caught_symbol = @expected_symbol unless @caught_arg == :nothing_thrown
+          end
+
+        # Ruby 1.8 uses NameError with `symbol'
+        # Ruby 1.9 uses ArgumentError with :symbol
+        rescue NameError, ArgumentError =&gt; e
+          raise e unless e.message =~ /uncaught throw (`|\:)([a-zA-Z0-9_]*)(')?/
+          @caught_symbol = $2.to_sym
+
         ensure
-          if @expected.nil?
-            return @actual.nil? ? false : true
+          if @expected_symbol.nil?
+            return !@caught_symbol.nil?
           else
-            return @actual == @expected
+            if @expected_arg.nil?
+              return @caught_symbol == @expected_symbol
+            else
+              # puts [@caught_symbol, @expected_symbol].inspect
+              # puts [@caught_arg, @expected_arg].inspect
+              return @caught_symbol == @expected_symbol &amp;&amp; @caught_arg == @expected_arg
+            end
           end
         end
       end
 
       def failure_message
-        if @actual
-          &quot;expected #{expected}, got #{@actual.inspect}&quot;
+        if @caught_symbol
+          &quot;expected #{expected}, got #{@caught_symbol.inspect}&quot;
         else
           &quot;expected #{expected} but nothing was thrown&quot;
         end
       end
       
       def negative_failure_message
-        if @expected
+        if @expected_symbol
           &quot;expected #{expected} not to be thrown&quot;
         else
-          &quot;expected no Symbol, got :#{@actual}&quot;
+          &quot;expected no Symbol, got :#{@caught_symbol}&quot;
         end
       end
       
@@ -45,7 +66,11 @@ module Spec
       private
       
         def expected
-          @expected.nil? ? &quot;a Symbol&quot; : @expected.inspect
+          @expected_symbol.nil? ? &quot;a Symbol&quot; : &quot;#{@expected_symbol.inspect}#{args}&quot;
+        end
+        
+        def args
+          @expected_arg.nil? ? &quot;&quot; : &quot; with #{@expected_arg.inspect}&quot;
         end
       
     end
@@ -53,20 +78,27 @@ module Spec
     # :call-seq:
     #   should throw_symbol()
     #   should throw_symbol(:sym)
+    #   should throw_symbol(:sym, arg)
     #   should_not throw_symbol()
     #   should_not throw_symbol(:sym)
-    #
-    # Given a Symbol argument, matches if a proc throws the specified Symbol.
+    #   should_not throw_symbol(:sym, arg)
     #
     # Given no argument, matches if a proc throws any Symbol.
     #
+    # Given a Symbol, matches if the given proc throws the specified Symbol.
+    #
+    # Given a Symbol and an arg, matches if the given proc throws the
+    # specified Symbol with the specified arg.
+    #
     # == Examples
     #
     #   lambda { do_something_risky }.should throw_symbol
     #   lambda { do_something_risky }.should throw_symbol(:that_was_risky)
+    #   lambda { do_something_risky }.should throw_symbol(:that_was_risky, culprit)
     #
     #   lambda { do_something_risky }.should_not throw_symbol
     #   lambda { do_something_risky }.should_not throw_symbol(:that_was_risky)
+    #   lambda { do_something_risky }.should_not throw_symbol(:that_was_risky, culprit)
     def throw_symbol(sym=nil)
       Matchers::ThrowSymbol.new(sym)
     end</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,5 @@
 require 'spec/mocks/framework'
-require 'spec/mocks/methods'
-require 'spec/mocks/argument_constraint_matchers'
-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/extensions/object'
-require 'spec/mocks/space'
 
 module Spec
   # == Mocks and Stubs</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,215 +1,48 @@
 module Spec
   module Mocks
-  
-    class MatcherConstraint
-      def initialize(matcher)
-        @matcher = matcher
-      end
-      
-      def matches?(value)
-        @matcher.matches?(value)
-      end
-    end
-      
-    class LiteralArgConstraint
-      def initialize(literal)
-        @literal_value = literal
-      end
-      
-      def matches?(value)
-        @literal_value == value
-      end
-    end
-    
-    class RegexpArgConstraint
-      def initialize(regexp)
-        @regexp = regexp
-      end
-      
-      def matches?(value)
-        return value =~ @regexp unless value.is_a?(Regexp)
-        value == @regexp
-      end
-    end
-    
-    class AnyArgConstraint
-      def initialize(ignore)
-      end
-      
-      def ==(other)
-        true
-      end
-      
-      # TODO - need this?
-      def matches?(value)
-        true
-      end
-    end
-    
-    class AnyArgsConstraint
-      def description
-        &quot;any args&quot;
-      end
-    end
-    
-    class NoArgsConstraint
-      def description
-        &quot;no args&quot;
-      end
-      
-      def ==(args)
-        args == []
-      end
-    end
-    
-    class NumericArgConstraint
-      def initialize(ignore)
-      end
-      
-      def matches?(value)
-        value.is_a?(Numeric)
-      end
-    end
-    
-    class BooleanArgConstraint
-      def initialize(ignore)
-      end
-      
-      def ==(value)
-        matches?(value)
-      end
-      
-      def matches?(value)
-        return true if value.is_a?(TrueClass)
-        return true if value.is_a?(FalseClass)
-        false
-      end
-    end
-    
-    class StringArgConstraint
-      def initialize(ignore)
-      end
-      
-      def matches?(value)
-        value.is_a?(String)
-      end
-    end
-    
-    class DuckTypeArgConstraint
-      def initialize(*methods_to_respond_to)
-        @methods_to_respond_to = methods_to_respond_to
-      end
-  
-      def matches?(value)
-        @methods_to_respond_to.all? { |sym| value.respond_to?(sym) }
-      end
-      
-      def description
-        &quot;duck_type&quot;
-      end
-    end
-    
-    class HashIncludingConstraint
-      def initialize(expected)
-        @expected = expected
-      end
-      
-      def ==(actual)
-        @expected.each do | key, value |
-          # check key for case that value evaluates to nil
-          return false unless actual.has_key?(key) &amp;&amp; actual[key] == value
-        end
-        true
-      rescue NoMethodError =&gt; ex
-        return false
-      end
-      
-      def matches?(value)
-        self == value
-      end
-      
-      def description
-        &quot;hash_including(#{@expected.inspect.sub(/^\{/,&quot;&quot;).sub(/\}$/,&quot;&quot;)})&quot;
-      end
-      
-    end
     
-
     class ArgumentExpectation
       attr_reader :args
-      @@constraint_classes = Hash.new { |hash, key| LiteralArgConstraint}
-      @@constraint_classes[:anything] = AnyArgConstraint
-      @@constraint_classes[:numeric] = NumericArgConstraint
-      @@constraint_classes[:boolean] = BooleanArgConstraint
-      @@constraint_classes[:string] = StringArgConstraint
       
       def initialize(args, &amp;block)
         @args = args
         @constraints_block = block
         
-        if [:any_args] == args
-          @expected_params = nil
-          warn_deprecated(:any_args.inspect, &quot;any_args()&quot;)
-        elsif args.length == 1 &amp;&amp; args[0].is_a?(AnyArgsConstraint) then @expected_params = nil
-        elsif [:no_args] == args
-          @expected_params = []
-          warn_deprecated(:no_args.inspect, &quot;no_args()&quot;)
-        elsif args.length == 1 &amp;&amp; args[0].is_a?(NoArgsConstraint) then @expected_params = []
-        else @expected_params = process_arg_constraints(args)
+        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 process_arg_constraints(constraints)
-        constraints.collect do |constraint| 
-          convert_constraint(constraint)
-        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 warn_deprecated(deprecated_method, instead)
-        Kernel.warn &quot;The #{deprecated_method} constraint is deprecated. Use #{instead} instead.&quot;
+      def is_matcher?(obj)
+        return obj.respond_to?(:matches?) &amp;&amp; obj.respond_to?(:description)
       end
       
-      def convert_constraint(constraint)
-        if [:anything, :numeric, :boolean, :string].include?(constraint)
-          case constraint
-          when :anything
-            instead = &quot;anything()&quot;
-          when :boolean
-            instead = &quot;boolean()&quot;
-          when :numeric
-            instead = &quot;an_instance_of(Numeric)&quot;
-          when :string
-            instead = &quot;an_instance_of(String)&quot;
-          end
-          warn_deprecated(constraint.inspect, instead)
-          return @@constraint_classes[constraint].new(constraint)
-        end
-        return MatcherConstraint.new(constraint) if is_matcher?(constraint)
-        return RegexpArgConstraint.new(constraint) if constraint.is_a?(Regexp)
-        return LiteralArgConstraint.new(constraint)
+      def args_match?(given_args)
+        match_any_args? || constraints_block_matches?(given_args) || constraints_match?(given_args)
       end
       
-      def is_matcher?(obj)
-        return obj.respond_to?(:matches?) &amp;&amp; obj.respond_to?(:description)
+      def constraints_block_matches?(given_args)
+        @constraints_block ? @constraints_block.call(*given_args) : nil
       end
       
-      def check_args(args)
-        if @constraints_block
-          @constraints_block.call(*args)
-          return true
-        end
-        
-        return true if @expected_params.nil?
-        return true if @expected_params == args
-        return constraints_match?(args)
+      def constraints_match?(given_args)
+        @constraints == given_args
       end
       
-      def constraints_match?(args)
-        return false if args.length != @expected_params.length
-        @expected_params.each_index { |i| return false unless @expected_params[i].matches?(args[i]) }
-        return true
+      def match_any_args?
+        @match_any_args
       end
-  
+      
     end
     
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,7 @@ module Spec
       
       private
       def intro
-        @name ? &quot;Mock '#{@name}'&quot; : @target.inspect
+        @name ? &quot;Mock '#{@name}'&quot; : @target.class == Class ? &quot;&lt;#{@target.inspect} (class)&gt;&quot; : (@target.nil? ? &quot;nil&quot; : @target.to_s)
       end
       
       def __raise(message)</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/error_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 # object in the system.
 
 require 'spec/mocks/methods'
-require 'spec/mocks/argument_constraint_matchers'
+require 'spec/mocks/argument_constraints'
 require 'spec/mocks/spec_methods'
 require 'spec/mocks/proxy'
 require 'spec/mocks/mock'</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/framework.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,10 @@ module Spec
 
     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
@@ -13,7 +17,7 @@ module Spec
         @return_block = nil
         @actual_received_count = 0
         @expected_received_count = expected_received_count
-        @args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
+        @args_expectation = ArgumentExpectation.new([ArgumentConstraints::AnyArgsConstraint.new])
         @consecutive = false
         @exception_to_raise = nil
         @symbol_to_throw = nil
@@ -23,6 +27,19 @@ module Spec
         @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
+        child.clear_actual_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 expected_args
         @args_expectation.args
       end
@@ -63,16 +80,22 @@ module Spec
       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 &lt;&lt; args
         self
       end
-  
+      
       def matches(sym, args)
-        @sym == sym and @args_expectation.check_args(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
@@ -103,6 +126,11 @@ module Spec
           @actual_received_count += 1
         end
       end
+
+      def called_max_times?
+        @expected_received_count != :any &amp;&amp; @expected_received_count &gt; 0 &amp;&amp;
+          @actual_received_count &gt;= @expected_received_count
+      end
       
       protected
 
@@ -147,16 +175,25 @@ module Spec
           @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 &lt; BaseExpectation
       
       def matches_name_but_not_args(sym, args)
-        @sym == sym and not @args_expectation.check_args(args)
+        @sym == sym and not @args_expectation.args_match?(args)
       end
        
-      def verify_messages_received   
-        return if expected_messages_received?
+      def verify_messages_received
+        return if expected_messages_received? || failed_fast?
     
         generate_error
       rescue Spec::Mocks::MockExpectationError =&gt; error
@@ -273,6 +310,10 @@ module Spec
               2
           end
         end
+        
+        def clear_actual_received_count!
+          @actual_received_count = 0
+        end
       
     end
     </diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,8 +9,12 @@ module Spec
         __mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &amp;block)
       end
       
-      def stub!(sym, opts={})
-        __mock_proxy.add_stub(caller(1)[0], sym.to_sym, opts)
+      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, &amp;block) #:nodoc:
@@ -24,6 +28,14 @@ module Spec
       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
 
@@ -31,7 +43,7 @@ module Spec
         if Mock === self
           @mock_proxy ||= Proxy.new(self, @name, @options)
         else
-          @mock_proxy ||= Proxy.new(self, self.class.name)
+          @mock_proxy ||= Proxy.new(self)
         end
       end
     end</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/methods.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,18 @@ module Spec
       DEFAULT_OPTIONS = {
         :null_object =&gt; 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, options={})
+      def initialize(target, name=nil, options={})
         @target = target
         @name = name
         @error_generator = ErrorGenerator.new target, name
@@ -20,15 +30,27 @@ module Spec
       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={}, &amp;block)
+      def add_message_expectation(expected_from, sym, opts={}, &amp;block)        
         __add sym
-        @expectations &lt;&lt; MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
+        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 &lt;&lt; expectation
         @expectations.last
       end
 
       def add_negative_message_expectation(expected_from, sym, &amp;block)
         __add sym
+        warn_if_nil_class sym
         @expectations &lt;&lt; NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
         @expectations.last
       end
@@ -38,7 +60,7 @@ module Spec
         @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts)
         @stubs.first
       end
-
+      
       def verify #:nodoc:
         verify_expectations
       ensure
@@ -50,6 +72,7 @@ module Spec
         clear_stubs
         reset_proxied_methods
         clear_proxied_methods
+        reset_nil_expectations_warning
       end
 
       def received_message?(sym, *args, &amp;block)
@@ -61,18 +84,21 @@ module Spec
       end
 
       def message_received(sym, *args, &amp;block)
-        if expectation = find_matching_expectation(sym, *args)
-          expectation.invoke(args, block)
-        elsif (stub = find_matching_method_stub(sym, *args))
+        expectation = find_matching_expectation(sym, *args)
+        stub = find_matching_method_stub(sym, *args)
+
+        if (stub &amp;&amp; expectation &amp;&amp; expectation.called_max_times?) || (stub &amp;&amp; !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, &amp;block
+          @target.__send__ :method_missing, sym, *args, &amp;block
         end
       end
 
@@ -91,16 +117,24 @@ module Spec
         define_expected_method(sym)
       end
       
+      def warn_if_nil_class(sym)
+        if proxy_for_nil_class? &amp;&amp; @@warn_about_expectations_on_nil          
+          Kernel.warn(&quot;An expectation of :#{sym} was set on nil. Called from #{caller[2]}. Use allow_message_expectations_on_nil to disable warnings.&quot;)
+        end
+      end
+      
       def define_expected_method(sym)
         visibility_string = &quot;#{visibility(sym)} :#{sym}&quot;
-        if target_responds_to?(sym) &amp;&amp; !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)
+        unless @proxied_methods.include?(sym)
+          if target_responds_to?(sym)
+            munged_sym = munge(sym)
+            target_metaclass.instance_eval do
+              alias_method munged_sym, sym if method_defined?(sym.to_s)
+            end
+            @proxied_methods &lt;&lt; sym
           end
-          @proxied_methods &lt;&lt; sym
         end
-        
+
         target_metaclass.class_eval(&lt;&lt;-EOF, __FILE__, __LINE__)
           def #{sym}(*args, &amp;block)
             __mock_proxy.message_received :#{sym}, *args, &amp;block
@@ -110,9 +144,9 @@ module Spec
       end
 
       def target_responds_to?(sym)
-        return @target.send(munge(:respond_to?),sym) if @already_proxied_respond_to
+        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)
+        return @target.respond_to?(sym, true)
       end
 
       def visibility(sym)
@@ -161,11 +195,19 @@ module Spec
               alias_method sym, munged_sym
               undef_method munged_sym
             else
-              undef_method sym
+              remove_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)}</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/proxy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module Spec
   module Mocks
     module ExampleMethods
-      include Spec::Mocks::ArgumentConstraintMatchers
+      include Spec::Mocks::ArgumentConstraints
 
       # Shortcut for creating an instance of Spec::Mocks::Mock.
       #
@@ -32,6 +32,14 @@ module Spec
       def stub_everything(name = 'stub')
         mock(name, :null_object =&gt; 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</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb</filename>
    </modified>
    <modified>
      <diff>@@ -56,12 +56,10 @@ module Spec
     #   end
     #
     class SpecTask &lt; ::Rake::TaskLib
-      class &lt;&lt; self
-        def attr_accessor(*names)
-          super(*names)
-          names.each do |name|
-            module_eval &quot;def #{name}() evaluate(@#{name}) end&quot; # Allows use of procs
-          end
+      def self.attr_accessor(*names)
+        super(*names)
+        names.each do |name|
+          module_eval &quot;def #{name}() evaluate(@#{name}) end&quot; # Allows use of procs
         end
       end
 
@@ -107,7 +105,7 @@ module Spec
       # A message to print to stderr when there are failures.
       attr_accessor :failure_message
 
-      # Where RSpec's output is written. Defaults to STDOUT.
+      # Where RSpec's output is written. Defaults to $stdout.
       # DEPRECATED. Use --format FORMAT:WHERE in spec_opts.
       attr_accessor :out
 </diff>
      <filename>vendor/plugins/rspec/lib/spec/rake/spectask.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,11 +35,11 @@ module RCov
     def define
       desc &quot;Verify that rcov coverage is at least #{threshold}%&quot;
       task @name do
-        total_coverage = nil
+        total_coverage = 0
 
         File.open(index_html).each_line do |line|
-          if line =~ /&lt;tt class='coverage_total'&gt;(\d+\.\d+)%&lt;\/tt&gt;/
-            total_coverage = eval($1)
+          if line =~ /&lt;tt class='coverage_total'&gt;\s*(\d+\.\d+)%\s*&lt;\/tt&gt;/
+            total_coverage = $1.to_f
             break
           end
         end</diff>
      <filename>vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+require 'spec/runner/configuration'
 require 'spec/runner/options'
 require 'spec/runner/option_parser'
 require 'spec/runner/example_group_runner'
@@ -9,166 +10,22 @@ 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 &quot;should have a balance of $0&quot; 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 &quot;...&quot; do
-  #     before :all do
-  #       ...
-  #     end
-  # 
-  #     before :each do
-  #       ...
-  #     end
-  # 
-  #     it &quot;should do something&quot; do
-  #       ...
-  #     end
-  # 
-  #     it &quot;should do something else&quot; do
-  #       ...
-  #     end
-  # 
-  #     after :each do
-  #       ...
-  #     end
-  # 
-  #     after :all do
-  #       ...
-  #     end
-  # 
-  #   end
-  # 
-  # The &lt;tt&gt;before :each&lt;/tt&gt; block will run before each of the examples, once for each example. Likewise,
-  # the &lt;tt&gt;after :each&lt;/tt&gt; block will run after each of the examples.
-  # 
-  # It is also possible to specify a &lt;tt&gt;before :all&lt;/tt&gt; and &lt;tt&gt;after :all&lt;/tt&gt;
-  # block that will run only once for each behaviour, respectively before the first &lt;code&gt;before :each&lt;/code&gt;
-  # and after the last &lt;code&gt;after :each&lt;/code&gt;. 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 &quot;...&quot; do
-  #   
-  #     it &quot;...&quot; 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 &quot;A new account&quot; do
-  #     include AccountExampleHelperMethods
-  #     before do
-  #       @account = Account.new
-  #     end
-  # 
-  #     it &quot;should have a balance of $0&quot; 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 &quot;All Editions&quot; do
-  #    it &quot;all editions behaviour&quot; ...
-  #  end
-  #
-  #  describe SmallEdition do
-  #    it_should_behave_like &quot;All Editions&quot;
-  #  
-  #    it &quot;should do small edition stuff&quot; do
-  #      ...
-  #    end
-  #  end
-  #
-  # You can also assign the shared group to a module and include that
-  #
-  #  share_as :AllEditions do
-  #    it &quot;should do all editions stuff&quot; ...
-  #  end
-  #
-  #  describe SmallEdition do
-  #    it_should_behave_like AllEditions
-  #  
-  #    it &quot;should do small edition stuff&quot; 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 &quot;should do small edition stuff&quot; do
-  #      ...
-  #    end
-  #  end
   module Runner
+    
+    class ExampleGroupCreationListener
+      def register_example_group(klass)
+        Spec::Runner.options.add_example_group klass
+        Spec::Runner.register_at_exit_hook
+      end
+    end
+    
+    Spec::Example::ExampleGroupMethods.example_group_creation_listeners &lt;&lt; ExampleGroupCreationListener.new
+    
     class &lt;&lt; self
       def configuration # :nodoc:
-        @configuration ||= Spec::Example::Configuration.new
+        @configuration ||= Spec::Runner::Configuration.new
       end
-      
+
       # Use this to configure various configurable aspects of
       # RSpec:
       #
@@ -177,25 +34,55 @@ module Spec
       #   end
       #
       # The yielded &lt;tt&gt;configuration&lt;/tt&gt; object is a
-      # Spec::Example::Configuration instance. See its RDoc
+      # Spec::Runner::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:
-        $spec_runner_at_exit_hook_registered ||= nil
-        unless $spec_runner_at_exit_hook_registered
+        unless @already_registered_at_exit_hook
           at_exit do
-            unless $! || Spec.run?
-              success = Spec.run
-              exit success if Spec.exit?
+            unless $! || run? || Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?(options.example_groups)
+              success = run
+              exit success if exit?
             end
           end
-          $spec_runner_at_exit_hook_registered = true
+          @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
+
+      def test_unit_defined?
+        Object.const_defined?(:Test) &amp;&amp; Test.const_defined?(:Unit) &amp;&amp; Test::Unit.respond_to?(:run?)
+      end
+
+      def run?
+        Runner.options.examples_run?
+      end
+
+      def run
+        return true if run?
+        options.run_examples
+      end
+
+      def exit?
+        !test_unit_defined? || Test::Unit.run?
+      end
     end
   end
 end
+
+require 'spec/interop/test' if Spec::Runner::test_unit_defined?</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,9 +9,11 @@ module Spec
     class NoisyBacktraceTweaker &lt; BacktraceTweaker
       def tweak_backtrace(error)
         return if error.backtrace.nil?
-        error.backtrace.each do |line|
+        tweaked = error.backtrace.collect do |line|
           clean_up_double_slashes(line)
+          line
         end
+        error.set_backtrace(tweaked)
       end
     end
 
@@ -40,17 +42,16 @@ module Spec
       
       def tweak_backtrace(error)
         return if error.backtrace.nil?
-        error.backtrace.collect! do |line|
-          clean_up_double_slashes(line)
-          IGNORE_PATTERNS.each do |ignore|
-            if line =~ ignore
-              line = nil
-              break
+        tweaked = error.backtrace.collect do |message|
+          clean_up_double_slashes(message)
+          kept_lines = message.split(&quot;\n&quot;).select do |line|
+            IGNORE_PATTERNS.each do |ignore|
+              break if line =~ ignore
             end
           end
-          line
+          kept_lines.empty?? nil : kept_lines.join(&quot;\n&quot;)
         end
-        error.backtrace.compact!
+        error.set_backtrace(tweaked.select {|line| line})
       end
     end
   end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,14 @@
 module Spec
   module Runner
     class ClassAndArgumentsParser
-      class &lt;&lt; self
-        def parse(s)
-          if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
-            arg = $2 == &quot;&quot; ? nil : $2
-            [$1, arg]
-          else
-            raise &quot;Couldn't parse #{s.inspect}&quot;
-          end
+      def self.parse(s)
+        if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
+          arg = $2 == &quot;&quot; ? nil : $2
+          [$1, arg]
+        else
+          raise &quot;Couldn't parse #{s.inspect}&quot;
         end
       end
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,26 +2,13 @@ require 'spec/runner/option_parser'
 
 module Spec
   module Runner
-    # Facade to run specs without having to fork a new ruby process (using `spec ...`)
     class CommandLine
-      class &lt;&lt; self
-        # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+
-        # and +out+ are the streams output will be written to.
-        def run(instance_rspec_options)
-          # NOTE - this call to init_rspec_options is not spec'd, but neither is any of this
-          # swapping of $rspec_options. That is all here to enable rspec to run against itself
-          # and maintain coverage in a single process. Therefore, DO NOT mess with this stuff
-          # unless you know what you are doing!
-          init_rspec_options(instance_rspec_options)
-          orig_rspec_options = rspec_options
-          begin
-            $rspec_options = instance_rspec_options
-            return $rspec_options.run_examples
-          ensure
-            ::Spec.run = true
-            $rspec_options = orig_rspec_options
-          end
-        end
+      def self.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</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/command_line.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,11 +15,11 @@ module Spec
         end
       end
 
-      def run
+      def run(run_options)
         prepare
         success = true
         example_groups.each do |example_group|
-          success = success &amp; example_group.run
+          success = success &amp; example_group.run(run_options)
         end
         return success
       ensure</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -45,7 +45,9 @@ module Spec
         # 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 &quot;Not Yet Implemented&quot;
-        def example_pending(example, message)
+        # +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</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,20 +14,16 @@ module Spec
         def initialize(options, where)
           super
           if where.is_a?(String)
+            FileUtils.mkdir_p(File.dirname(where))
             @output = File.open(where, 'w')
-          elsif where == STDOUT
-            @output = Kernel
-            def @output.flush
-              STDOUT.flush
-            end
           else
             @output = where
           end
           @pending_examples = []
         end
         
-        def example_pending(example, message)
-          @pending_examples &lt;&lt; [example.__full_description, message]
+        def example_pending(example, message, pending_caller)
+          @pending_examples &lt;&lt; [example.full_description, message, pending_caller]
         end
         
         def dump_failure(counter, failure)
@@ -74,14 +70,15 @@ module Spec
             @output.puts
             @output.puts &quot;Pending:&quot;
             @pending_examples.each do |pending_example|
-              @output.puts &quot;#{pending_example[0]} (#{pending_example[1]})&quot; 
+              @output.puts &quot;\n#{pending_example[0]} (#{pending_example[1]})&quot;
+              @output.puts &quot;#{pending_example[2]}\n&quot;
             end
           end
           @output.flush
         end
         
         def close
-          if IO === @output
+          if IO === @output &amp;&amp; @output != $stdout
             @output.close 
           end
         end
@@ -112,7 +109,7 @@ module Spec
 
         def output_to_tty?
           begin
-            @output == Kernel || @output.tty?
+            @output.tty? || ENV.has_key?(&quot;AUTOTEST&quot;)
           rescue NoMethodError
             false
           end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -85,7 +85,7 @@ module Spec
           @output.flush
         end
 
-        def example_pending(example, message)
+        def example_pending(example, message, pending_caller)
           @output.puts &quot;    &lt;script type=\&quot;text/javascript\&quot;&gt;makeYellow('rspec-header');&lt;/script&gt;&quot; unless @header_red
           @output.puts &quot;    &lt;script type=\&quot;text/javascript\&quot;&gt;makeYellow('example_group_#{example_group_number}');&lt;/script&gt;&quot; unless @example_group_red
           move_progress
@@ -154,14 +154,6 @@ module Spec
     font-size: 80%;
   }
   &lt;/style&gt;
-&lt;/head&gt;
-&lt;body&gt;
-EOF
-        end
-
-        def report_header
-          &lt;&lt;-EOF
-&lt;div class=&quot;rspec-report&quot;&gt;
   &lt;script type=&quot;text/javascript&quot;&gt;
     // &lt;![CDATA[
 #{global_scripts}
@@ -170,9 +162,19 @@ EOF
   &lt;style type=&quot;text/css&quot;&gt;
 #{global_styles}
   &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+EOF
+        end
+
+        def report_header
+          &lt;&lt;-EOF
+&lt;div class=&quot;rspec-report&quot;&gt;
 
 &lt;div id=&quot;rspec-header&quot;&gt;
-  &lt;h1&gt;RSpec Results&lt;/h1&gt;
+  &lt;div id=&quot;label&quot;&gt;
+    &lt;h1&gt;RSpec Results&lt;/h1&gt;
+  &lt;/div&gt;
 
   &lt;div id=&quot;summary&quot;&gt;
     &lt;p id=&quot;totals&quot;&gt;&amp;nbsp;&lt;/p&gt;
@@ -212,7 +214,7 @@ EOF
         def global_styles
           &lt;&lt;-EOF
 #rspec-header {
-  background: #65C400; color: #fff;
+  background: #65C400; color: #fff; height: 42px;
 }
 
 .rspec-report h1 {
@@ -220,15 +222,16 @@ EOF
   padding: 10px;
   font-family: &quot;Lucida Grande&quot;, Helvetica, sans-serif;
   font-size: 1.8em;
+  float: left;
 }
 
 #summary {
   margin: 0; padding: 5px 10px;
   font-family: &quot;Lucida Grande&quot;, Helvetica, sans-serif;
   text-align: right;
-  position: absolute;
   top: 0px;
   right: 0px;
+  float:right;
 }
 
 #summary p {</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ module Spec
           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 &quot;#{'  ' * i}#{nested_example_group.description_args}&quot;
+              output.puts &quot;#{'  ' * i}#{nested_example_group.description_args.join}&quot;
             end
           end
 
@@ -40,7 +40,7 @@ module Spec
           output.flush
         end
 
-        def example_pending(example, message)
+        def example_pending(example, message, pending_caller)
           super
           output.puts yellow(&quot;#{current_indentation}#{example.description} (PENDING: #{message})&quot;)
           output.flush
@@ -52,9 +52,9 @@ module Spec
 
         def described_example_group_chain
           example_group_chain = []
-          example_group.send(:execute_in_class_hierarchy) do |parent_example_group|
-            if parent_example_group.description_args &amp;&amp; !parent_example_group.description_args.empty?
-              example_group_chain &lt;&lt; parent_example_group
+          example_group.__send__(:each_ancestor_example_group_class) do |example_group_class|
+            unless example_group_class.description_args.empty?
+              example_group_chain &lt;&lt; example_group_class
             end
           end
           example_group_chain</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,9 +14,9 @@ module Spec
           @output.flush
         end
       
-        def example_pending(example, message)
+        def example_pending(example, message, pending_caller)
           super
-          @output.print yellow('P')
+          @output.print yellow('*')
           @output.flush
         end
         </diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,7 @@ module Spec
           output.flush
         end
         
-        def example_pending(example, message)
+        def example_pending(example, message, pending_caller)
           super
           output.puts yellow(&quot;- #{example.description} (PENDING: #{message})&quot;)
           output.flush</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -86,6 +86,7 @@ EOF
           end
      
           def scenario_started(story_title, scenario_name)
+            @previous_type = nil
             @scenario_failed = false
             @scenario_text = &lt;&lt;-EOF
               &lt;dt&gt;Scenario: #{h scenario_name}&lt;/dt&gt;
@@ -149,10 +150,22 @@ EOF
             spans = args.map { |arg| &quot;&lt;span class=\&quot;param\&quot;&gt;#{arg}&lt;/span&gt;&quot; }
             desc_string = description.step_name
             arg_regexp = description.arg_regexp           
+            inner = if(type == @previous_type)
+              &quot;And &quot;
+            else
+              &quot;#{type.to_s.capitalize} &quot;
+            end
             i = -1
-            inner = type.to_s.capitalize + ' ' + desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
+            inner += desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
+            
             @scenario_text += &quot;                  &lt;li class=\&quot;#{klass}\&quot;&gt;#{inner}&lt;/li&gt;\n&quot;
             
+            if type == :'given scenario'
+              @previous_type = :given
+            else
+              @previous_type = type
+            end
+            
           end
         end
       end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/story/html_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -104,7 +104,14 @@ module Spec
           end
           
           def run_ended
-            @output.puts &quot;#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending&quot;
+            summary_text = &quot;#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending&quot;
+            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 &quot;\nPending Steps:&quot;
               @pending_steps.each_with_index do |pending, i|
@@ -116,11 +123,10 @@ module Spec
               @output.print &quot;\nFAILURES:&quot;
               @failed_scenarios.each_with_index do |failure, i|
                 title, scenario_name, err = failure
-                @output.print %[
-    #{i+1}) #{title} (#{scenario_name}) FAILED
-    #{err.class}: #{err.message}
-    #{err.backtrace.join(&quot;\n&quot;)}
-]
+                @output.print &quot;\n    #{i+1}) &quot;
+                @output.print red(&quot;#{title} (#{scenario_name}) FAILED&quot;)
+                @output.print red(&quot;\n    #{err.class}: #{err.message}&quot;)
+                @output.print &quot;\n    #{err.backtrace.join(&quot;\n&quot;)}\n&quot;
               end
             end            
           end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,72 +1,74 @@
-begin
-  require 'rubygems'
-  require 'heckle'
-rescue LoadError ; raise &quot;You must gem install heckle to use --heckle&quot; ; end
+unless Spec::Ruby.version.to_f == 1.9
+  begin
+    require 'rubygems'
+    require 'heckle'
+  rescue LoadError ; raise &quot;You must gem install heckle to use --heckle&quot; ; 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)
+  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
-      end
       
-      def heckle_method(class_name, method_name)
-        verify_constant(class_name)
-        heckle = @heckle_class.new(class_name, method_name, rspec_options)
-        heckle.validate
-      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_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 &lt;&lt; klass if klass.name =~ pattern
+        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 &lt;&lt; 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, rspec_options)
-            heckle.validate
+          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
-      end
       
-      def verify_constant(name)
-        begin
-          # This is defined in Heckle
-          name.to_class
-        rescue
-          raise &quot;Heckling failed - \&quot;#{name}\&quot; is not a known class or module&quot;
+        def verify_constant(name)
+          begin
+            # This is defined in Heckle
+            name.to_class
+          rescue
+            raise &quot;Heckling failed - \&quot;#{name}\&quot; is not a known class or module&quot;
+          end
         end
       end
-    end
     
-    #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base)
-    class Heckler &lt; (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
+      #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base)
+      class Heckler &lt; (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
+        def tests_pass?
+          success = @rspec_options.run_examples
+          success
+        end
 
+      end
     end
   end
-end
+end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,10 @@ module Spec
           parser.parse(args)
           parser.options
         end
+
+        def spec_command?
+          $0.split('/').last == 'spec'
+        end
       end
 
       attr_reader :options
@@ -34,26 +38,27 @@ module Spec
                                                           &quot;an example name directly, causing RSpec to run just the example&quot;,
                                                           &quot;matching that name&quot;],
         :specification =&gt; [&quot;-s&quot;, &quot;--specification [NAME]&quot;, &quot;DEPRECATED - use -e instead&quot;, &quot;(This will be removed when autotest works with -e)&quot;],
-        :line =&gt; [&quot;-l&quot;, &quot;--line LINE_NUMBER&quot;, Integer, &quot;Execute behaviout or specification at given line.&quot;,
-                                                       &quot;(does not work for dynamically generated specs)&quot;],
+        :line =&gt; [&quot;-l&quot;, &quot;--line LINE_NUMBER&quot;, Integer, &quot;Execute example group or example at given line.&quot;,
+                                                       &quot;(does not work for dynamically generated examples)&quot;],
         :format =&gt; [&quot;-f&quot;, &quot;--format FORMAT[:WHERE]&quot;,&quot;Specifies what format to use for output. Specify WHERE to tell&quot;,
                                                     &quot;the formatter where to write the output. All built-in formats&quot;,
-                                                    &quot;expect WHERE to be a file name, and will write to STDOUT if it's&quot;,
+                                                    &quot;expect WHERE to be a file name, and will write to $stdout if it's&quot;,
                                                     &quot;not specified. The --format option may be specified several times&quot;,
                                                     &quot;if you want several outputs&quot;,
                                                     &quot; &quot;,
-                                                    &quot;Builtin formats for examples: &quot;,
-                                                    &quot;progress|p               : Text progress&quot;,
-                                                    &quot;profile|o                : Text progress with profiling of 10 slowest examples&quot;,
-                                                    &quot;specdoc|s                : Example doc as text&quot;,
-                                                    &quot;indented|i               : Example doc as indented text&quot;,
+                                                    &quot;Builtin formats for code examples:&quot;,
+                                                    &quot;progress|p               : Text-based progress bar&quot;,
+                                                    &quot;profile|o                : Text-based progress bar with profiling of 10 slowest examples&quot;,
+                                                    &quot;specdoc|s                : Code example doc strings&quot;,
+                                                    &quot;nested|n                 : Code example doc strings with nested groups intented&quot;,
                                                     &quot;html|h                   : A nice HTML report&quot;,
                                                     &quot;failing_examples|e       : Write all failing examples - input for --example&quot;,
                                                     &quot;failing_example_groups|g : Write all failing example groups - input for --example&quot;,
                                                     &quot; &quot;,
-                                                    &quot;Builtin formats for stories: &quot;,
-                                                    &quot;plain|p              : Plain Text&quot;,
-                                                    &quot;html|h               : A nice HTML report&quot;,
+                                                    &quot;Builtin formats for stories:&quot;,
+                                                    &quot;plain|p                  : Plain Text&quot;,
+                                                    &quot;html|h                   : A nice HTML report&quot;,
+                                                    &quot;progress|r               : Text progress&quot;,
                                                     &quot; &quot;,
                                                     &quot;FORMAT can also be the name of a custom formatter class&quot;,
                                                     &quot;(in which case you should also specify --require to load it)&quot;],
@@ -93,30 +98,31 @@ module Spec
 
         self.banner = &quot;Usage: spec (FILE|DIRECTORY|GLOB)+ [options]&quot;
         self.separator &quot;&quot;
-        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[: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}
+        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, &amp;blk)
-        @argv = argv
+        @argv = argv.dup
+        @argv = (@argv.empty? &amp;&amp; self.class.spec_command?) ? ['--help'] : @argv 
         @options.argv = @argv.dup
         return if parse_generate_options
         return if parse_drb
@@ -128,7 +134,7 @@ module Spec
 
         @options
       end
-
+      
       protected
       def invoke_requires(requires)
         requires.split(&quot;,&quot;).each do |file|
@@ -186,7 +192,7 @@ module Spec
       end
 
       def parse_version
-        @out_stream.puts ::Spec::VERSION::DESCRIPTION
+        @out_stream.puts ::Spec::VERSION::SUMMARY
         exit if stdout?
       end
 </diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/option_parser.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ module Spec
       EXAMPLE_FORMATTERS = { # Load these lazily for better speed
                'specdoc' =&gt; ['spec/runner/formatter/specdoc_formatter',                'Formatter::SpecdocFormatter'],
                      's' =&gt; ['spec/runner/formatter/specdoc_formatter',                'Formatter::SpecdocFormatter'],
-                'nested' =&gt; ['spec/runner/formatter/nested_text_formatter',          'Formatter::NestedTextFormatter'],
+                'nested' =&gt; ['spec/runner/formatter/nested_text_formatter',            'Formatter::NestedTextFormatter'],
                      'n' =&gt; ['spec/runner/formatter/nested_text_formatter',            'Formatter::NestedTextFormatter'],
                   'html' =&gt; ['spec/runner/formatter/html_formatter',                   'Formatter::HtmlFormatter'],
                      'h' =&gt; ['spec/runner/formatter/html_formatter',                   'Formatter::HtmlFormatter'],
@@ -24,10 +24,13 @@ module Spec
       }
 
       STORY_FORMATTERS = {
-        'plain' =&gt; ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'],
-            'p' =&gt; ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'],
-         'html' =&gt; ['spec/runner/formatter/story/html_formatter',       'Formatter::Story::HtmlFormatter'],
-            'h' =&gt; ['spec/runner/formatter/story/html_formatter',       'Formatter::Story::HtmlFormatter']
+        'plain' =&gt; ['spec/runner/formatter/story/plain_text_formatter',   'Formatter::Story::PlainTextFormatter'],
+            'p' =&gt; ['spec/runner/formatter/story/plain_text_formatter',   'Formatter::Story::PlainTextFormatter'],
+         'html' =&gt; ['spec/runner/formatter/story/html_formatter',         'Formatter::Story::HtmlFormatter'],
+            'h' =&gt; ['spec/runner/formatter/story/html_formatter',         'Formatter::Story::HtmlFormatter'],
+     'progress' =&gt; ['spec/runner/formatter/story/progress_bar_formatter', 'Formatter::Story::ProgressBarFormatter'],
+            'r' =&gt; ['spec/runner/formatter/story/progress_bar_formatter', 'Formatter::Story::ProgressBarFormatter']
+            
       }
 
       attr_accessor(
@@ -37,7 +40,6 @@ module Spec
         :diff_format,
         :dry_run,
         :profile,
-        :examples,
         :heckle_runner,
         :line_number,
         :loadby,
@@ -48,13 +50,11 @@ module Spec
         :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
-
+      attr_reader :colour, :differ_class, :files, :examples, :example_groups
+      
       def initialize(error_stream, output_stream)
         @error_stream = error_stream
         @output_stream = output_stream
@@ -73,7 +73,6 @@ module Spec
         @examples_run = false
         @examples_should_be_run = nil
         @user_input_for_runner = nil
-        @before_suite_parts = []
         @after_suite_parts = []
       end
 
@@ -89,9 +88,6 @@ module Spec
         return true unless examples_should_be_run?
         success = true
         begin
-          before_suite_parts.each do |part|
-            part.call
-          end
           runner = custom_runner || ExampleGroupRunner.new(self)
 
           unless @files_loaded
@@ -99,11 +95,20 @@ module Spec
             @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
+            success = runner.run(self)
             @examples_run = true
             heckle if heckle_runner
             success
@@ -114,6 +119,14 @@ module Spec
           end
         end
       end
+      
+      def before_suite_parts
+        Spec::Example::BeforeAndAfterHooks.before_suite_parts
+      end
+      
+      def after_suite_parts
+        Spec::Example::BeforeAndAfterHooks.after_suite_parts
+      end
 
       def examples_run?
         @examples_run
@@ -121,14 +134,26 @@ module Spec
 
       def examples_should_not_be_run
         @examples_should_be_run = false
-      end      
+      end
+      
+      def predicate_matchers
+        # TODO - don't like this dependency - perhaps store these in here instead?
+        Spec::Runner.configuration.predicate_matchers
+      end
+      
+      def mock_framework
+        # TODO - don't like this dependency - perhaps store this in here instead?
+        Spec::Runner.configuration.mock_framework
+      end
 
       def colour=(colour)
         @colour = colour
         if @colour &amp;&amp; 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 &quot;You must 'gem install win32console' to use colour on Windows&quot; ;\
             @colour = false ;\
@@ -152,7 +177,7 @@ module Spec
 
       def parse_example(example)
         if(File.file?(example))
-          @examples = File.open(example).read.split(&quot;\n&quot;)
+          @examples = [File.open(example).read.split(&quot;\n&quot;)].flatten
         else
           @examples = [example]
         end
@@ -198,11 +223,8 @@ module Spec
       end
 
       def number_of_examples
-        total = 0
-        @example_groups.each do |example_group|
-          total += example_group.number_of_examples
-        end
-        total
+        return examples.size unless examples.empty?
+        @example_groups.inject(0) {|sum, group| sum + group.number_of_examples}
       end
 
       def files_to_load
@@ -221,6 +243,10 @@ module Spec
         result
       end
       
+      def dry_run?
+        @dry_run == true
+      end
+      
       protected
       def examples_should_be_run?
         return @examples_should_be_run unless @examples_should_be_run.nil?
@@ -288,7 +314,7 @@ module Spec
               error_stream.puts &quot;You must specify one file, not a directory when using the --line option&quot;
               exit(1) if stderr?
             else
-              example = SpecParser.new.spec_name_for(files[0], line_number)
+              example = SpecParser.new(self).spec_name_for(files[0], line_number)
               @examples = [example]
             end
           else</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/options.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,7 @@ module Spec
         if error.nil?
           example_passed(example)
         elsif Spec::Example::ExamplePendingError === error
-          example_pending(example, error.message)
+          example_pending(example, error.pending_caller, error.message)
         else
           example_failed(example, error)
         end
@@ -103,14 +103,34 @@ module Spec
       def example_passed(example)
         formatters.each{|f| f.example_passed(example)}
       end
+
+      EXAMPLE_PENDING_DEPRECATION_WARNING = &lt;&lt;-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, message=&quot;Not Yet Implemented&quot;)
+      def example_pending(example, pending_caller, message=&quot;Not Yet Implemented&quot;)
         @pending_count += 1
-        formatters.each do |f|
-          f.example_pending(example, message)
+        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
         
@@ -139,7 +159,7 @@ module Spec
 
         protected
         def example_name
-          @example.__full_description
+          @example.full_description
         end
       end
     end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/reporter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,15 +4,16 @@ module Spec
     class SpecParser
       attr_reader :best_match
 
-      def initialize
+      def initialize(run_options)
         @best_match = {}
+        @run_options = run_options
       end
 
       def spec_name_for(file, line_number)
         best_match.clear
         file = File.expand_path(file)
-        rspec_options.example_groups.each do |example_group|
-          consider_example_groups_for_best_match example_group, file, line_number
+        @run_options.example_groups.each do |example_group|
+          consider_example_group_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
@@ -31,8 +32,8 @@ module Spec
 
     protected
 
-      def consider_example_groups_for_best_match(example_group, file, line_number)
-        parsed_backtrace = parse_backtrace(example_group.registration_backtrace)
+      def consider_example_group_for_best_match(example_group, file, line_number)
+        parsed_backtrace = parse_backtrace(example_group.backtrace)
         parsed_backtrace.each do |example_file, example_line|
           if is_best_match?(file, line_number, example_file, example_line)
             best_match.clear
@@ -43,7 +44,7 @@ module Spec
       end
 
       def consider_example_for_best_match(example, example_group, file, line_number)
-        parsed_backtrace = parse_backtrace(example.implementation_backtrace)
+        parsed_backtrace = parse_backtrace(example.backtrace)
         parsed_backtrace.each do |example_file, example_line|
           if is_best_match?(file, line_number, example_file, example_line)
             best_match.clear
@@ -61,9 +62,10 @@ module Spec
       end
 
       def parse_backtrace(backtrace)
-        backtrace.collect do |trace_line|
-          split_line = trace_line.split(':')
-          [split_line[0], Integer(split_line[1])]
+        Array(backtrace).collect do |trace_line|
+          trace_line =~ /(.*)\:(\d*)(\:|$)/
+          file, number = $1, $2
+          [file, Integer(number)]
         end
       end
     end</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/spec_parser.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,53 +8,50 @@ require 'spec/story/runner/plain_text_story_runner.rb'
 module Spec
   module Story
     module Runner
-      class &lt;&lt; self
-        def run_options # :nodoc:
-          rspec_options
-          # @run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout)
-        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
-          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 $!
+      def self.run_options # :nodoc:
+        Spec::Runner.options
+      end
+      
+      def self.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
-        
-        def dry_run
-          run_options.dry_run
+        @story_runner
+      end
+      
+      def self.scenario_runner # :nodoc:
+        @scenario_runner ||= ScenarioRunner.new
+      end
+      
+      def self.world_creator # :nodoc:
+        @world_creator ||= World
+      end
+      
+      def self.create_story_runner
+        Runner::StoryRunner.new(scenario_runner, world_creator)
+      end
+      
+      # Use this to register a customer output formatter.
+      def self.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 self.register_exit_hook # :nodoc:
+        at_exit do
+          exit Runner.story_runner.run_stories unless $!
         end
-        
       end
+      
+      def self.dry_run
+        run_options.dry_run
+      end
+      
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,12 +2,16 @@ module Spec
   module Story
     module Runner
       class StoryRunner
-        class &lt;&lt; self
-          attr_accessor :current_story_runner
-          
-          def scenario_from_current_story(scenario_name)
-            current_story_runner.scenario_from_current_story(scenario_name)
-          end
+        def self.current_story_runner
+          @current_story_runner
+        end
+
+        def self.current_story_runner=(current_story_runner)
+          @current_story_runner = current_story_runner
+        end
+
+        def self.scenario_from_current_story(scenario_name)
+          current_story_runner.scenario_from_current_story(scenario_name)
         end
         
         attr_accessor :stories, :scenarios, :current_story</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -19,11 +19,11 @@ module Spec
       end
 
       def matches?(name)
-        !(matches = name.match(@expression)).nil?
+        !(name.strip =~ @expression).nil?
       end
             
       def parse_args(name)
-        name.match(@expression)[1..-1]
+        name.strip.match(@expression)[1..-1]
       end
 
       private
@@ -60,7 +60,7 @@ module Spec
           expression = string_or_regexp.source
         end
         while expression =~ PARAM_PATTERN
-          expression.gsub!($2, &quot;(.*?)&quot;)
+          expression.sub!($2, &quot;(.*?)&quot;)
         end
         @expression = Regexp.new(&quot;\\A#{expression}\\Z&quot;, Regexp::MULTILINE)
       end</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/step.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,8 @@ module Spec
         @steps.add(type, step)
       end
       
-      def find(type, name)
+      def find(type, unstripped_name)
+        name = unstripped_name.strip
         if @steps.find(type, name).nil?
           @steps.add(type,
           Step.new(name) do</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/step_mother.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,82 +15,78 @@ module Spec
     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 &lt;&lt; self
-        def create(cls = Object, *args)
-          cls.new(*args).extend(World)
-        end
-        
-        def listeners
-          @listeners ||= []
-        end
-        
-        def add_listener(listener)
-          listeners() &lt;&lt; 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, &amp;block)
-          if block_given?
-            step_mother.store(type, Step.new(name, &amp;block))
-          end
-          step = step_mother.find(type, name)
+      def self.create(cls = Object, *args)
+        cls.new(*args).extend(World)
+      end
+      
+      def self.listeners
+        @listeners ||= []
+      end
+      
+      def self.add_listener(listener)
+        listeners() &lt;&lt; listener
+      end
+      
+      def self.step_mother
+        @step_mother ||= StepMother.new
+      end
+              
+      def self.use(steps)
+        step_mother.use(steps)
+      end
+      
+      def self.step_names
+        @step_names ||= []
+      end
 
-          step_name = step.name
-          step_names &lt;&lt; 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 =&gt; 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 &lt;&lt; e
-          end
+      def self.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
-        
-        def errors
-          @errors ||= []
+      end
+      
+      def self.store_and_call(world, type, name, *args, &amp;block)
+        if block_given?
+          step_mother.store(type, Step.new(name, &amp;block))
         end
+        step = step_mother.find(type, name)
+
+        step_name = step.name
+        step_names &lt;&lt; step_name
         
-        def dry_run
-          ::Spec::Story::Runner.dry_run
+        # 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 =&gt; 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 &lt;&lt; e
         end
-      end # end of class &lt;&lt; self
+      end
+      
+      def self.errors
+        @errors ||= []
+      end
+      
+      def self.dry_run
+        ::Spec::Story::Runner.dry_run
+      end
       
       def start_collecting_errors
         errors.clear</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/world.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,15 @@
-module Spec
-  module VERSION
-    unless defined? MAJOR
-      MAJOR  = 1
-      MINOR  = 1
-      TINY   = 4
-      RELEASE_CANDIDATE = nil
-
-      BUILD_TIME_UTC = 20080628203842
-
-      STRING = [MAJOR, MINOR, TINY].join('.')
-      TAG = &quot;REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}&quot;.upcase.gsub(/\.|-/, '_')
-      FULL_VERSION = &quot;#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})&quot;
-
-      NAME   = &quot;RSpec&quot;
-      URL    = &quot;http://rspec.rubyforge.org/&quot;  
-    
-      DESCRIPTION = &quot;#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}&quot;
-    end
-  end
-end
-
+module Spec
+  module VERSION
+    unless defined? MAJOR
+      MAJOR  = 1
+      MINOR  = 1
+      TINY   = 11
+      MINESCULE = 4
+      
+
+      STRING = [MAJOR, MINOR, TINY, MINESCULE].join('.')
+
+      SUMMARY = &quot;rspec #{STRING}&quot;
+    end
+  end
+end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/lib/spec/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,8 @@
-require File.dirname(__FILE__) + &quot;/../autotest_helper&quot;
+require File.dirname(__FILE__) + &quot;/autotest_helper&quot;
 
-module DiscoveryHelper
-  def load_discovery
+describe Autotest::Rspec, &quot;discovery&quot; do
+  it &quot;adds the rspec autotest plugin&quot; do
+    Autotest.should_receive(:add_discovery)
     require File.dirname(__FILE__) + &quot;/../../lib/autotest/discover&quot;
   end
-end
-
-
-class Autotest
-  describe Rspec, &quot;discovery&quot; do
-    include DiscoveryHelper
-    
-    it &quot;should add the rspec autotest plugin&quot; do
-      Autotest.should_receive(:add_discovery).and_yield
-      load_discovery
-    end
-  end  
-end
+end  </diff>
      <filename>vendor/plugins/rspec/spec/autotest/discover_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,98 +1,8 @@
-require File.dirname(__FILE__) + &quot;/../autotest_helper&quot;
+require File.dirname(__FILE__) + &quot;/autotest_helper&quot;
 
 class Autotest
   
-  module AutotestHelper
-    def rspec_output
-      &lt;&lt;-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 = &quot;\\&quot;
-      @posix_separator = '/'
-
-      @rspec_output = rspec_output
-    end
-  end
-
   describe Rspec do
-    describe &quot;selection of rspec command&quot; do
-      include AutotestHelper
-    
-      before(:each) do
-        common_setup
-        @rspec_autotest = Rspec.new
-      end
-    
-      it &quot;should try to find the spec command if it exists in ./bin and use it above everything else&quot; do
-        File.stub!(:exists?).and_return true
-
-        spec_path = File.expand_path(&quot;#{File.dirname(__FILE__)}/../../bin/spec&quot;)
-        File.should_receive(:exists?).with(spec_path).and_return true
-        @rspec_autotest.spec_command.should == spec_path
-      end
-
-      it &quot;should otherwise select the default spec command in gem_dir/bin/spec&quot; do
-        @rspec_autotest.stub!(:spec_commands).and_return [&quot;/foo/spec&quot;]
-        Config::CONFIG.stub!(:[]).and_return &quot;/foo&quot;
-        File.should_receive(:exists?).with(&quot;/foo/spec&quot;).and_return(true)
-
-        @rspec_autotest.spec_command.should == &quot;/foo/spec&quot;
-      end
-    
-      it &quot;should raise an error if no spec command is found at all&quot; do
-        File.stub!(:exists?).and_return false
-      
-        lambda {
-          @rspec_autotest.spec_command
-        }.should raise_error(RspecCommandError, &quot;No spec command could be found!&quot;)
-      end
-    end
-    
-    describe &quot;selection of rspec command (windows compatibility issues)&quot; do
-      include AutotestHelper
-    
-      before(:each) do
-        common_setup
-      end
-    
-      it &quot;should use the ALT_SEPARATOR if it is non-nil&quot; do
-        @rspec_autotest = Rspec.new
-        spec_command = File.expand_path(&quot;#{File.dirname(__FILE__)}/../../bin/spec&quot;)
-        @rspec_autotest.stub!(:spec_commands).and_return [spec_command]
-        @rspec_autotest.spec_command(@windows_alt_separator).should == spec_command.gsub('/', @windows_alt_separator)
-      end
-    
-      it &quot;should not use the ALT_SEPATOR if it is nil&quot; do
-        @windows_alt_separator = nil
-        @rspec_autotest = Rspec.new
-        spec_command = File.expand_path(&quot;#{File.dirname(__FILE__)}/../../bin/spec&quot;)
-        @rspec_autotest.stub!(:spec_commands).and_return [spec_command]
-        @rspec_autotest.spec_command.should == spec_command
-      end
-    end
-
     describe &quot;adding spec.opts --options&quot; do 
       before(:each) do
         @rspec_autotest = Rspec.new
@@ -116,7 +26,7 @@ HERE
         @rspec_autotest.stub!(:add_options_if_present).and_return &quot;-O spec/spec.opts&quot;
       
         @ruby = @rspec_autotest.ruby
-        @spec_command = @rspec_autotest.spec_command
+        @spec_cmd = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
         @options = @rspec_autotest.add_options_if_present
         @files_to_test = {
           :spec =&gt; [&quot;file_one&quot;, &quot;file_two&quot;]
@@ -126,16 +36,13 @@ HERE
         @files_to_test.stub!(:keys).and_return @files_to_test[:spec]
         @to_test = @files_to_test.keys.flatten.join ' '
       end
-
-      it &quot;should contain the various commands, ordered by preference&quot; do
-        Rspec.new.spec_commands.should == [
-          File.expand_path(&quot;#{File.dirname(__FILE__)}/../../bin/spec&quot;),
-          &quot;#{Config::CONFIG['bindir']}/spec&quot;
-        ]
-      end
     
-      it &quot;should make the apropriate test command&quot; do
-        @rspec_autotest.make_test_cmd(@files_to_test).should == &quot;#{@ruby} -S #{@spec_command} #{@options} #{@to_test}&quot;
+      it &quot;should make the appropriate test command&quot; do
+        @rspec_autotest.make_test_cmd(@files_to_test).should == &quot;#{@ruby} #{@spec_cmd} #{@to_test} #{@options}&quot;
+      end
+
+      it &quot;should return a blank command for no files&quot; do
+        @rspec_autotest.make_test_cmd({}).should == ''
       end
     end
   
@@ -156,16 +63,17 @@ HERE
         @rspec_autotest.should map_specs([@spec_file]).to(@spec_file)
       end
     
-      it &quot;should only find the file if the file is being tracked (in @file)&quot;  do
+      it &quot;should ignore files in spec dir that aren't specs&quot; do
+        @rspec_autotest.should map_specs([]).to(&quot;spec/spec_helper.rb&quot;)
+      end
+    
+      it &quot;should ignore untracked files (in @file)&quot;  do
         @rspec_autotest.should map_specs([]).to(&quot;lib/untracked_file&quot;)
       end
     end
   
     describe &quot;consolidating failures&quot; do
-      include AutotestHelper
-    
       before(:each) do
-        common_setup
         @rspec_autotest = Rspec.new
       
         @spec_file = &quot;spec/autotest/some_spec.rb&quot;</diff>
      <filename>vendor/plugins/rspec/spec/autotest/rspec_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 if __FILE__ == $0
   dir = File.dirname(__FILE__)
   Dir[&quot;#{dir}/**/*_spec.rb&quot;].reverse.each do |file|
-#    puts &quot;require '#{file}'&quot;
     require file
   end
 end</diff>
      <filename>vendor/plugins/rspec/spec/rspec_suite.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,37 +3,41 @@ require File.dirname(__FILE__) + '/../../spec_helper'
 module Spec
   module Example
     class ExampleGroupSubclass &lt; ExampleGroup
-      class &lt;&lt; self
-        attr_accessor :examples_ran
+      def self.examples_ran
+        @examples_ran
       end
 
-      @@klass_variable_set = true
-      CONSTANT = :foobar
+      def self.examples_ran=(examples_ran)
+        @examples_ran = examples_ran
+      end
+
+      @@class_variable = :class_variable
+      CONSTANT = :constant
 
       before do
-        @instance_variable = :hello
+        @instance_variable = :instance_variable
       end
-
-      it &quot;should run&quot; do
+      
+      after(:all) do
         self.class.examples_ran = true
       end
 
       it &quot;should have access to instance variables&quot; do
-        @instance_variable.should == :hello
+        @instance_variable.should == :instance_variable
       end
 
       it &quot;should have access to class variables&quot; do
-        @@klass_variable_set.should == true
+        @@class_variable.should == :class_variable
       end
 
       it &quot;should have access to constants&quot; do
-        CONSTANT.should == :foobar
+        CONSTANT.should == :constant
       end
 
       it &quot;should have access to methods defined in the Example Group&quot; do
         a_method.should == 22
       end
-
+      
       def a_method
         22
       end</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,35 +5,35 @@ module Spec
     describe ExampleGroupFactory do
       describe &quot;#get&quot; do
         attr_reader :example_group
-        before do
-          @example_group = Class.new(ExampleGroup)
-          ExampleGroupFactory.register(:registered_type, @example_group)
+        before(:each) do
+          @example_group_class = Class.new(ExampleGroup)
+          ExampleGroupFactory.register(:registered_type, @example_group_class)
         end
 
-        after do
+        after(:each) do
           ExampleGroupFactory.reset
         end
 
-        it &quot;should #get the default ExampleGroup type when passed nil&quot; do
+        it &quot;should return the default ExampleGroup type for nil&quot; do
           ExampleGroupFactory.get(nil).should == ExampleGroup
         end
 
-        it &quot;should #get the default ExampleGroup for unregistered non-nil values&quot; do
+        it &quot;should return the default ExampleGroup for an unregistered non-nil value&quot; do
           ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
         end
 
-        it &quot;should #get custom type for :registered_type&quot; do
-          ExampleGroupFactory.get(:registered_type).should == @example_group
+        it &quot;should return custom type if registered&quot; do
+          ExampleGroupFactory.get(:registered_type).should == @example_group_class
         end
 
-        it &quot;should #get the actual type when that is passed in&quot; do
-          ExampleGroupFactory.get(@example_group).should == @example_group
+        it &quot;should return the actual type when that is what is submitted&quot; do
+          ExampleGroupFactory.get(@example_group_class).should == @example_group_class
         end
 
         it &quot;should get the custom type after setting the default&quot; do
-          @example_group2 = Class.new(ExampleGroup)
-          ExampleGroupFactory.default(@example_group2)
-          ExampleGroupFactory.get(:registered_type).should == @example_group
+          @alternate_example_group_class = Class.new(ExampleGroup)
+          ExampleGroupFactory.default(@alternate_example_group_class)
+          ExampleGroupFactory.get(:registered_type).should == @example_group_class
         end
       end
 
@@ -57,15 +57,28 @@ module Spec
           example_group.superclass.should == Spec::Example::ExampleGroup
         end
 
-        describe &quot;when :type =&gt; :default&quot; do
-          it &quot;should create a Spec::Example::Example&quot; do
-            example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-            &quot;example_group&quot;, :type =&gt; :default
-            ) {}
-            example_group.superclass.should == Spec::Example::ExampleGroup
-          end
+        it &quot;should raise when no description is given&quot; do
+          lambda {
+            Spec::Example::ExampleGroupFactory.create_example_group do; end
+          }.should raise_error(ArgumentError)
+        end
+        
+        it &quot;should raise when no block is given&quot; do
+          lambda { Spec::Example::ExampleGroupFactory.create_example_group &quot;foo&quot; }.should raise_error(ArgumentError)
+        end
+
+        it &quot;should run registered ExampleGroups&quot; do
+          example_group = Spec::Example::ExampleGroupFactory.create_example_group &quot;The ExampleGroup&quot; do end
+          Spec::Runner.options.example_groups.should include(example_group)
+        end
 
-          it &quot;should create a Spec::Example::Example&quot; do
+        it &quot;should not run unregistered ExampleGroups&quot; do
+          example_group = Spec::Example::ExampleGroupFactory.create_example_group &quot;The ExampleGroup&quot; do Spec::Runner.options.remove_example_group self; end
+          Spec::Runner.options.example_groups.should_not include(example_group)
+        end
+
+        describe &quot;with :type =&gt; :default&quot; do
+          it &quot;should create a Spec::Example::ExampleGroup&quot; do
             example_group = Spec::Example::ExampleGroupFactory.create_example_group(
             &quot;example_group&quot;, :type =&gt; :default
             ) {}
@@ -73,8 +86,8 @@ module Spec
           end
         end
 
-        describe &quot;when :type =&gt; :something_other_than_default&quot; do
-          it &quot;should create specified type&quot; do
+        describe &quot;with :type =&gt; :something_other_than_default&quot; do
+          it &quot;should create the specified type&quot; do
             Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
             non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
               &quot;example_group&quot;, :type =&gt; :something_other_than_default
@@ -99,18 +112,23 @@ module Spec
           ) {}
           custom_example_group.superclass.should == parent_example_group
         end
+        
+        it &quot;sets the spec_path from the caller&quot; do
+          options = {}
+          shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(&quot;foo&quot;, options) {}
+          options[:spec_path].should =~ /#{__FILE__}:#{__LINE__ - 1}/
+        end
 
-        describe &quot;when :shared =&gt; true&quot; do
-          attr_reader :shared_example_group
-          before do
-            @shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+        describe &quot;with :shared =&gt; true&quot; do
+          def shared_example_group
+            @shared_example_group ||= Spec::Example::ExampleGroupFactory.create_example_group(
               &quot;name&quot;, :spec_path =&gt; '/blah/spec/models/blah.rb', :type =&gt; :controller, :shared =&gt; true
             ) {}
           end
 
-          it &quot;should create and register a Spec::Example::Example&quot; do
+          it &quot;should create and register a Spec::Example::SharedExampleGroup&quot; do
             shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
-            SharedExampleGroup.shared_example_groups.should include(shared_example_group)
+            SharedExampleGroup.should include(shared_example_group)
           end
         end
 
@@ -125,14 +143,57 @@ module Spec
         it &quot;should register ExampleGroup by default&quot; do
           example_group = Spec::Example::ExampleGroupFactory.create_example_group(&quot;The ExampleGroup&quot;) do
           end
-          rspec_options.example_groups.should include(example_group)
+          Spec::Runner.options.example_groups.should include(example_group)
         end
 
         it &quot;should enable unregistering of ExampleGroups&quot; do
           example_group = Spec::Example::ExampleGroupFactory.create_example_group(&quot;The ExampleGroup&quot;) do
-            unregister
+            Spec::Runner.options.remove_example_group self
           end
-          rspec_options.example_groups.should_not include(example_group)
+          Spec::Runner.options.example_groups.should_not include(example_group)
+        end
+        
+        after(:each) do
+          Spec::Example::ExampleGroupFactory.reset
+        end
+      end
+      
+      describe &quot;#create_shared_example_group&quot; do
+        it &quot;registers a new shared example group&quot; do
+          shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group(&quot;something shared&quot;) {}
+          shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
+          SharedExampleGroup.should include(shared_example_group)
+        end
+        
+        it &quot;sets the spec_path from the caller&quot; do
+          options = {}
+          shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group(&quot;foo&quot;, options) {}
+          options[:spec_path].should =~ /#{__FILE__}:#{__LINE__ - 1}/
+        end
+      end
+
+      describe &quot;#registered_or_ancestor_of_registered?&quot; 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 &quot;should return true for empty list&quot; do
+          Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([]).should be_true
+        end
+        
+        it &quot;should return true for a registered example group class&quot; do
+          Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@registered_child]).should be_true
+        end
+
+        it &quot;should return true for an ancestor of a registered example_group_classes&quot; do
+          Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@unregistered_parent]).should be_true
+        end
+
+        it &quot;should return false for a subclass of a registered example_group_class&quot; do
+          Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@unregistered_grandchild]).should be_false
         end
 
         after(:each) do</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,570 +3,632 @@ require File.dirname(__FILE__) + '/../../spec_helper'
 module Spec
   module Example
     describe 'ExampleGroupMethods' do
-      it_should_behave_like &quot;sandboxed rspec_options&quot;
-      attr_reader :example_group, :result, :reporter
-      before(:each) do
-        options.formatters &lt;&lt; mock(&quot;formatter&quot;, :null_object =&gt; true)
-        options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; true)
-        @reporter = FakeReporter.new(@options)
-        options.reporter = reporter
-        @example_group = Class.new(ExampleGroup) do
-          describe(&quot;ExampleGroup&quot;)
-          it &quot;does nothing&quot;
+      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 &lt;&lt; mock(&quot;formatter&quot;, :null_object =&gt; true, :example_pending =&gt; method_with_three_args)
+          options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; true)
+          @reporter = FakeReporter.new(@options)
+          options.reporter = reporter
+          @example_group = Class.new(ExampleGroup) do
+            describe(&quot;ExampleGroup&quot;)
+            it &quot;does nothing&quot;
+          end
         end
-        class &lt;&lt; example_group
-          public :include
+        
+        after(:each) do
+          ExampleGroup.reset
         end
-        @result = nil
-      end
 
-      after(:each) do
-        ExampleGroup.reset
-      end
-
-      [&quot;describe&quot;,&quot;context&quot;].each do |method|
-        describe &quot;#{method}&quot; do
-          describe &quot;when creating an ExampleGroup&quot; do
-            attr_reader :child_example_group
-            before do
-              @child_example_group = @example_group.send method, &quot;Another ExampleGroup&quot; do
-                it &quot;should pass&quot; do
-                  true.should be_true
+        [&quot;describe&quot;,&quot;context&quot;].each do |method|
+          describe &quot;##{method}&quot; do
+            describe &quot;when creating an ExampleGroup&quot; do
+              before(:each) do
+                @parent_example_group = Class.new(ExampleGroup) do
+                  example &quot;first example&quot; do; end
+                end
+                @child_example_group = @parent_example_group.__send__ method, &quot;Child&quot; do
+                  example &quot;second example&quot; do; end
                 end
               end
-            end
 
-            it &quot;should create a subclass of the ExampleGroup when passed a block&quot; do
-              child_example_group.superclass.should == @example_group
-              @options.example_groups.should include(child_example_group)
-            end
+              it &quot;should create a subclass of the ExampleGroup when passed a block&quot; do
+                @child_example_group.superclass.should == @parent_example_group
+                options.example_groups.should include(@child_example_group)
+              end
 
-            it &quot;should not inherit examples&quot; do
-              child_example_group.examples.length.should == 1
+              it &quot;should not inherit examples&quot; do
+                @child_example_group.should have(1).examples
+              end
+              
+              it &quot;records the spec path&quot; do
+                @child_example_group.spec_path.should =~ /#{__FILE__}:#{__LINE__ - 15}/
+              end
             end
-          end
 
-          describe &quot;when creating a SharedExampleGroup&quot; do
-            attr_reader :name, :shared_example_group
-            before do
-              @name = &quot;A Shared ExampleGroup&quot;
-              @shared_example_group = @example_group.send method, name, :shared =&gt; true do
-                it &quot;should pass&quot; do
-                  true.should be_true
-                end
+            describe &quot;when creating a SharedExampleGroup&quot; do
+              before(:each) do
+                @shared_example_group = @example_group.__send__ method, &quot;A Shared ExampleGroup&quot;, :shared =&gt; true do; end
               end
-            end
 
-            after do
-              SharedExampleGroup.shared_example_groups.delete_if do |registered_shared_example_group|
-                registered_shared_example_group == shared_example_group
+              after(:each) do
+                SharedExampleGroup.instance_eval{@shared_example_groups}.delete @shared_example_group
               end
-            end
 
-            it &quot;should create a SharedExampleGroup&quot; do
-              SharedExampleGroup.find_shared_example_group(name).should == shared_example_group
+              it &quot;should create a SharedExampleGroup&quot; do
+                @shared_example_group.should_not be_nil
+                SharedExampleGroup.find(&quot;A Shared ExampleGroup&quot;).should == @shared_example_group
+              end
             end
-          end
 
+          end
         end
-      end
-    
-      describe &quot;#it&quot; do
-        it &quot;should should create an example instance&quot; do
-          lambda {
-            @example_group.it(&quot;&quot;)
-          }.should change { @example_group.examples.length }.by(1)
-        end
-      end
-
-      describe &quot;#xit and #xspecify&quot; do
-        before(:each) do
-          Kernel.stub!(:warn)
+        
+        [:specify, :it].each do |method|
+          describe &quot;##{method.to_s}&quot; do
+            it &quot;should should create an example&quot; do
+              lambda {
+                @example_group.__send__(method, &quot;&quot;)
+              }.should change { @example_group.examples.length }.by(1)
+            end
+          end
         end
+        
+        [:xit, :xspecify].each do |method|
+          describe &quot;##{method.to_s}&quot; do
+            before(:each) do
+              Kernel.stub!(:warn)
+            end
 
-        it &quot;should NOT create an example instance&quot; do
-          lambda {
-            @example_group.xit(&quot;&quot;)
-          }.should_not change(@example_group.examples, :length)
-
-          lambda {
-            @example_group.xspecify(&quot;&quot;)
-          }.should_not change(@example_group.examples, :length)
-        end
+            it &quot;should NOT create an example&quot; do
+              lambda {
+                @example_group.__send__(method,&quot;&quot;)
+              }.should_not change(@example_group.examples, :length)
+            end
 
-        it &quot;should warn that it is disabled&quot; do
-          Kernel.should_receive(:warn).with(&quot;Example disabled: foo&quot;).twice
-          @example_group.xit(&quot;foo&quot;)
-          @example_group.xspecify(&quot;foo&quot;)
+            it &quot;should warn that the example is disabled&quot; do
+              Kernel.should_receive(:warn).with(&quot;Example disabled: foo&quot;)
+              @example_group.__send__(method,&quot;foo&quot;)
+            end
+          end
         end
-      end
+        
 
-      describe &quot;#examples&quot; do
-        it &quot;should have Examples&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            it &quot;should pass&quot; do
-              1.should == 1
+        describe &quot;#examples&quot; do
+          it &quot;should have Examples&quot; do
+            example_group = Class.new(ExampleGroup) do
+              it &quot;should exist&quot; do; end
             end
+            example_group.examples.length.should == 1
+            example_group.examples.first.description.should == &quot;should exist&quot;
           end
-          example_group.examples.length.should == 1
-          example_group.examples.first.description.should == &quot;should pass&quot;
-        end
 
-        it &quot;should not include methods that begin with test (only when TU interop is loaded)&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            def test_any_args(*args)
-              true.should be_true
+          it &quot;should not include methods that begin with test (only when TU interop is loaded)&quot; do
+            example_group = Class.new(ExampleGroup) do
+              def test_any_args(*args)
+                true.should be_true
+              end
+              def test_something
+                1.should == 1
+              end
+              def test
+                raise &quot;This is not a real test&quot;
+              end
+              def testify
+                raise &quot;This is not a real test&quot;
+              end
+              def should_something
+                # forces the run
+              end
             end
-            def test_something
-              1.should == 1
+            example_group.examples.length.should == 1
+            example_group.run(options).should be_true
+          end
+
+          it &quot;should include methods that begin with should and has an arity of 0 in suite&quot; do
+            example_group = Class.new(ExampleGroup) do
+              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 &quot;This is not a real example&quot;
+              end
+              def should_not
+                raise &quot;This is not a real example&quot;
+              end
             end
-            def test
-              raise &quot;This is not a real test&quot;
+            example_group.should have(4).examples
+            descriptions = example_group.examples.collect {|example| example.description.to_s}
+            descriptions.should include(
+              &quot;shouldCamelCase&quot;,
+              &quot;should_any_args&quot;,
+              &quot;should_something&quot;,
+              &quot;should_not_something&quot;)
+            descriptions.should_not include(
+              &quot;should&quot;,
+              &quot;should_not&quot;
+            )
+          end
+
+          it &quot;should not include methods that begin with test_ and has an arity &gt; 0 in suite&quot; do
+            example_group = Class.new(ExampleGroup) do
+              def test_invalid(foo)
+                1.should == 1
+              end
+              def testInvalidCamelCase(foo)
+                1.should == 1
+              end
             end
-            def testify
-              raise &quot;This is not a real test&quot;
+            example_group.should have(:no).examples
+          end
+
+          it &quot;should not include methods that begin with should_ and has an arity &gt; 0 in suite&quot; do
+            example_group = Class.new(ExampleGroup) do
+              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
-            def should_something
-              # forces the run
+            example_group.should have(1).examples
+            example_group.run(options).should be_true
+          end
+
+          it &quot;should run should_methods&quot; do
+            example_group = Class.new(ExampleGroup) do
+              def should_valid
+                1.should == 2
+              end
             end
+            example_group.should have(1).examples
+            example_group.run(options).should be_false
           end
-          example_group.examples.length.should == 1
-          example_group.run.should be_true
         end
 
-        it &quot;should include methods that begin with should and has an arity of 0 in suite&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            def shouldCamelCase
-              true.should be_true
+        describe &quot;#set_description&quot; do
+          attr_reader :example_group
+          before do
+            class &lt;&lt; example_group
+              public :set_description
+            end
+          end
+
+          describe &quot;given a String&quot; do
+            before(:each) do
+              example_group.set_description(&quot;abc&quot;)
             end
-            def should_any_args(*args)
-              true.should be_true
+
+            specify &quot;.description should return the String passed into .set_description&quot; do
+              example_group.description.should == &quot;abc&quot;
             end
-            def should_something
-              1.should == 1
+
+            specify &quot;.described_type should provide nil as its type&quot; do
+              example_group.described_type.should be_nil
             end
-            def should_not_something
-              1.should_not == 2
+          end
+
+          describe &quot;given a Class&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup)
             end
-            def should
-              raise &quot;This is not a real example&quot;
+
+            specify &quot;.description should return a String representation of that type (fully qualified) as its name&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup&quot;
             end
-            def should_not
-              raise &quot;This is not a real example&quot;
+
+            specify &quot;.described_type should return the passed in type&quot; do
+              example_group.described_type.should == Spec::Example::ExampleGroup
             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(&quot;shouldCamelCase&quot;)
-          descriptions.should include(&quot;should_any_args&quot;)
-          descriptions.should include(&quot;should_something&quot;)
-          descriptions.should include(&quot;should_not_something&quot;)
-        end
 
-        it &quot;should not include methods that begin with test_ and has an arity &gt; 0 in suite&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            def test_invalid(foo)
-              1.should == 1
+          describe &quot;given a String and a Class&quot; do
+            before(:each) do
+              example_group.set_description(&quot;behaving&quot;, ExampleGroup)
             end
-            def testInvalidCamelCase(foo)
-              1.should == 1
+
+            specify &quot;.description should return String then space then Type&quot; do
+              example_group.description.should == &quot;behaving Spec::Example::ExampleGroup&quot;
+            end
+
+            specify &quot;.described_type should return the passed in type&quot; do
+              example_group.described_type.should == Spec::Example::ExampleGroup
             end
           end
-          example_group.examples.length.should == 0
-        end
 
-        it &quot;should not include methods that begin with should_ and has an arity &gt; 0 in suite&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            def should_invalid(foo)
-              1.should == 2
+          describe &quot;given a Class and a String (starting with an alpha char)&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup, &quot;behaving&quot;)
             end
-            def shouldInvalidCamelCase(foo)
-              1.should == 3
+
+            specify &quot;.description should return the Type then space then String&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup behaving&quot;
             end
-            def should_not_invalid(foo)
-              1.should == 4
+          end
+
+          describe &quot;given a Class and a String (starting with a '.')&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup, &quot;.behaving&quot;)
             end
-            def should_valid
-              1.should == 1
+
+            specify &quot;.description should return the Type then String&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup.behaving&quot;
             end
           end
-          example_group.examples.length.should == 1
-          example_group.run.should be_true
-        end
 
-        it &quot;should run should_methods&quot; do
-          example_group = Class.new(ExampleGroup) do
-            def should_valid
-              1.should == 2
+          describe &quot;#set_description(Class, String starting with #)&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup, &quot;#behaving&quot;)
             end
-          end
-          example_group.examples.length.should == 1
-          example_group.run.should be_false
-        end
-      end
 
-      describe &quot;#set_description&quot; do
-        attr_reader :example_group
-        before do
-          class &lt;&lt; example_group
-            public :set_description
+            specify &quot;should return the Class then String&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup#behaving&quot;
+            end
           end
-        end
 
-        describe &quot;#set_description(String)&quot; do
-          before(:each) do
-            example_group.set_description(&quot;abc&quot;)
-          end
+          describe &quot;#set_description(Class, String containing .)&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup, &quot;calling a.b&quot;)
+            end
 
-          specify &quot;.description should return the String passed into .set_description&quot; do
-            example_group.description.should == &quot;abc&quot;
+            specify &quot;.description should return the Type then space then String&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup calling a.b&quot;
+            end
           end
 
-          specify &quot;.described_type should provide nil as its type&quot; do
-            example_group.described_type.should be_nil
-          end
-        end
+          describe &quot;#set_description(Class, String containing #)&quot; do
+            before(:each) do
+              example_group.set_description(ExampleGroup, &quot;is #1&quot;)
+            end
 
-        describe &quot;#set_description(Type)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup)
+            specify &quot;.description should return the Type then space then String&quot; do
+              example_group.description.should == &quot;Spec::Example::ExampleGroup is #1&quot;
+            end
           end
 
-          specify &quot;.description should return a String representation of that type (fully qualified) as its name&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup&quot;
-          end
+          describe &quot;#set_description(String, Type, String)&quot; do
+            before(:each) do
+              example_group.set_description(&quot;A&quot;, Hash, &quot;with one entry&quot;)
+            end
 
-          specify &quot;.described_type should return the passed in type&quot; do
-            example_group.described_type.should == Spec::Example::ExampleGroup
+            specify &quot;.description should return the first String then space then Type then second String&quot; do
+              example_group.description.should == &quot;A Hash with one entry&quot;
+            end
           end
-        end
 
-        describe &quot;#set_description(String, Type)&quot; do
-          before(:each) do
-            example_group.set_description(&quot;behaving&quot;, ExampleGroup)
-          end
+          describe &quot;#set_description(Hash representing options)&quot; do
+            before(:each) do
+              example_group.set_description(:a =&gt; &quot;b&quot;, :spec_path =&gt; &quot;blah&quot;)
+            end
 
-          specify &quot;.description should return String then space then Type&quot; do
-            example_group.description.should == &quot;behaving Spec::Example::ExampleGroup&quot;
-          end
+            it &quot;.spec_path should expand the passed in :spec_path option passed into the constructor&quot; do
+              example_group.spec_path.should == File.expand_path(&quot;blah&quot;)
+            end
+
+            it &quot;.description_options should return all the options passed in&quot; do
+              example_group.description_options.should == {:a =&gt; &quot;b&quot;, :spec_path =&gt; &quot;blah&quot;}
+            end
 
-          specify &quot;.described_type should return the passed in type&quot; do
-            example_group.described_type.should == Spec::Example::ExampleGroup
           end
         end
 
-        describe &quot;#set_description(Type, String not starting with a space)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup, &quot;behaving&quot;)
+        describe &quot;#description&quot; do
+          it &quot;should return the same description instance for each call&quot; do
+            example_group.description.should eql(example_group.description)
           end
 
-          specify &quot;.description should return the Type then space then String&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup behaving&quot;
+          it &quot;should not add a space when description_text begins with #&quot; do
+            child_example_group = Class.new(example_group) do
+              describe(&quot;#foobar&quot;, &quot;Does something&quot;)
+            end
+            child_example_group.description.should == &quot;ExampleGroup#foobar Does something&quot;
           end
-        end
 
-        describe &quot;#set_description(Type, String starting with .)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup, &quot;.behaving&quot;)
+          it &quot;should not add a space when description_text begins with .&quot; do
+            child_example_group = Class.new(example_group) do
+              describe(&quot;.foobar&quot;, &quot;Does something&quot;)
+            end
+            child_example_group.description.should == &quot;ExampleGroup.foobar Does something&quot;
           end
-
-          specify &quot;.description should return the Type then String&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup.behaving&quot;
+        
+          it &quot;should return the class name if nil&quot; do
+            example_group.set_description(nil)
+            example_group.description.should =~ /Class:/
+          end
+        
+          it &quot;should return the class name if nil&quot; do
+            example_group.set_description(&quot;&quot;)
+            example_group.description.should =~ /Class:/
           end
         end
 
-        describe &quot;#set_description(Type, String containing .)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup, &quot;calling a.b&quot;)
+        describe &quot;#description_parts&quot; do
+          it &quot;should return an Array of the current class description args&quot; do
+            example_group.description_parts.should == [example_group.description]
           end
 
-          specify &quot;.description should return the Type then space then String&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup calling a.b&quot;
-          end
-        end
+          it &quot;should return an Array of the description args from each class in the hierarchy&quot; do
+            parent_example_group = Class.new(ExampleGroup) do
+              describe(&quot;Parent&quot;)
+            end
+            
+            child_example_group = Class.new(parent_example_group)
+            child_example_group.describe(&quot;Child&quot;, ExampleGroup)
+            child_example_group.description.should_not be_empty
 
-        describe &quot;#set_description(Type, String starting with .)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup, &quot;.behaving&quot;)
-          end
+            grand_child_example_group = Class.new(child_example_group)
+            grand_child_example_group.describe(&quot;GrandChild&quot;, ExampleGroup)
+            grand_child_example_group.description.should_not be_empty
 
-          specify &quot;should return the Type then String&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup.behaving&quot;
+            grand_child_example_group.description_parts.should == [
+              &quot;Parent&quot;,
+              &quot;Child&quot;,
+              Spec::Example::ExampleGroup,
+              &quot;GrandChild&quot;,
+              Spec::Example::ExampleGroup
+            ]
           end
         end
 
-        describe &quot;#set_description(Type, String containing .)&quot; do
-          before(:each) do
-            example_group.set_description(ExampleGroup, &quot;is #1&quot;)
+        describe &quot;#described_type&quot; do
+          it &quot;should return passed in type&quot; do
+            child_example_group = Class.new(example_group) do
+              describe Object
+            end
+            child_example_group.described_type.should == Object
           end
 
-          specify &quot;.description should return the Type then space then String&quot; do
-            example_group.description.should == &quot;Spec::Example::ExampleGroup is #1&quot;
+          it &quot;should return #described_type of superclass when no passed in type&quot; do
+            parent_example_group = Class.new(ExampleGroup) do
+              describe Object, &quot;#foobar&quot;
+            end
+            child_example_group = Class.new(parent_example_group) do
+              describe &quot;not a type&quot;
+            end
+            child_example_group.described_type.should == Object
           end
         end
 
-        describe &quot;#set_description(String, Type, String)&quot; do
-          before(:each) do
-            example_group.set_description(&quot;A&quot;, Hash, &quot;with one entry&quot;)
-          end
+        describe &quot;#remove_after&quot; do
+          it &quot;should unregister a given after(:each) block&quot; do
+            after_all_ran = false
+            proc = Proc.new { after_all_ran = true }
 
-          specify &quot;.description should return the first String then space then Type then second String&quot; do
-            example_group.description.should == &quot;A Hash with one entry&quot;
-          end
-        end
+            example_group = Class.new(ExampleGroup) do
+              specify(&quot;example&quot;) {}
+              after(:each, &amp;proc)
+            end
 
-        describe &quot;#set_description(Hash representing options)&quot; do
-          before(:each) do
-            example_group.set_description(:a =&gt; &quot;b&quot;, :spec_path =&gt; &quot;blah&quot;)
-          end
+            example_group.run(options)
+            after_all_ran.should be_true
 
-          it &quot;.spec_path should expand the passed in :spec_path option passed into the constructor&quot; do
-            example_group.spec_path.should == File.expand_path(&quot;blah&quot;)
+            after_all_ran = false
+            example_group.remove_after(:each, &amp;proc)
+            example_group.run(options)
+            after_all_ran.should be_false
           end
+        end
 
-          it &quot;.description_options should return all the options passed in&quot; do
-            example_group.description_options.should == {:a =&gt; &quot;b&quot;, :spec_path =&gt; &quot;blah&quot;}
-          end
+        describe &quot;#include&quot; do
+          it &quot;should have accessible class methods from included module&quot; do
+            mod_method_called = false
+            mod = Module.new do
+              class_methods = Module.new do
+                define_method :mod_method do
+                  mod_method_called = true
+                end
+              end
 
-        end
-      end
+              self.class.class_eval do
+                define_method(:included) do |receiver|
+                  receiver.extend class_methods
+                end
+              end
+            end
 
-      describe &quot;#description&quot; do
-        it &quot;should return the same description instance for each call&quot; do
-          example_group.description.should eql(example_group.description)
-        end
+            @example_group.__send__ :include, mod
 
-        it &quot;should not add a space when description_text begins with #&quot; do
-          child_example_group = Class.new(example_group) do
-            describe(&quot;#foobar&quot;, &quot;Does something&quot;)
+            @example_group.mod_method
+            mod_method_called.should be_true
           end
-          child_example_group.description.should == &quot;ExampleGroup#foobar Does something&quot;
         end
 
-        it &quot;should not add a space when description_text begins with .&quot; do
-          child_example_group = Class.new(example_group) do
-            describe(&quot;.foobar&quot;, &quot;Does something&quot;)
+        describe &quot;#number_of_examples&quot; do
+          it &quot;should count number of examples&quot; do
+            proc do
+              @example_group.it(&quot;one&quot;) {}
+              @example_group.it(&quot;two&quot;) {}
+              @example_group.it(&quot;three&quot;) {}
+              @example_group.it(&quot;four&quot;) {}
+            end.should change {@example_group.number_of_examples}.by(4)
           end
-          child_example_group.description.should == &quot;ExampleGroup.foobar Does something&quot;
-        end
-        
-        it &quot;should return the class name if nil&quot; do
-          example_group.set_description(nil)
-          example_group.description.should =~ /Class:/
-        end
-        
-        it &quot;should return the class name if nil&quot; do
-          example_group.set_description(&quot;&quot;)
-          example_group.description.should =~ /Class:/
-        end
-      end
-
-      describe &quot;#description_parts&quot; do
-        it &quot;should return an Array of the current class description args&quot; do
-          example_group.description_parts.should == [example_group.description]
         end
 
-        it &quot;should return an Array of the description args from each class in the hierarchy&quot; do
-          child_example_group = Class.new(example_group)
-          child_example_group.describe(&quot;Child&quot;, ExampleGroup)
-          child_example_group.description.should_not be_empty
-
-          grand_child_example_group = Class.new(child_example_group)
-          grand_child_example_group.describe(&quot;GrandChild&quot;, ExampleGroup)
-          grand_child_example_group.description.should_not be_empty
-
-          grand_child_example_group.description_parts.should == [
-            &quot;ExampleGroup&quot;,
-            &quot;Child&quot;,
-            Spec::Example::ExampleGroup,
-            &quot;GrandChild&quot;,
-            Spec::Example::ExampleGroup
-          ]
-        end
-      end
-
-      describe &quot;#described_type&quot; do
-        it &quot;should return passed in type&quot; do
-          child_example_group = Class.new(example_group) do
-            describe Object
+        describe &quot;#class_eval&quot; do
+          it &quot;should allow constants to be defined&quot; do
+            example_group = Class.new(ExampleGroup) do
+              FOO = 1
+              it &quot;should reference FOO&quot; do
+                FOO.should == 1
+              end
+            end
+            success = example_group.run(options)
+            success.should be_true
+            Object.const_defined?(:FOO).should == false
           end
-          child_example_group.described_type.should == Object
         end
 
-        it &quot;should return #described_type of superclass when no passed in type&quot; do
-          parent_example_group = Class.new(ExampleGroup) do
-            describe Object, &quot;#foobar&quot;
+        describe '#register' do
+          after(:each) do
+            Spec::Runner.options.remove_example_group example_group
           end
-          child_example_group = Class.new(parent_example_group) do
-            describe &quot;not a type&quot;
+          it &quot;should add ExampleGroup to set of ExampleGroups to be run&quot; do
+            Spec::Runner.options.add_example_group example_group
+            options.example_groups.should include(example_group)
           end
-          child_example_group.described_type.should == Object
         end
-      end
 
-      describe &quot;#remove_after&quot; do
-        it &quot;should unregister a given after(:each) block&quot; do
-          after_all_ran = false
-          @example_group.it(&quot;example&quot;) {}
-          proc = Proc.new { after_all_ran = true }
-          ExampleGroup.after(:each, &amp;proc)
-          @example_group.run
-          after_all_ran.should be_true
-
-          after_all_ran = false
-          ExampleGroup.remove_after(:each, &amp;proc)
-          @example_group.run
-          after_all_ran.should be_false
+        describe '#unregister' do
+          before(:each) do
+            Spec::Runner.options.add_example_group example_group
+          end
+          it &quot;should remove ExampleGroup from set of ExampleGroups to be run&quot; do
+            Spec::Runner.options.remove_example_group example_group
+            options.example_groups.should_not include(example_group)
+          end
         end
-      end
-
-      describe &quot;#include&quot; do
-        it &quot;should have accessible class methods from included module&quot; 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
+      
+        describe &quot;#run&quot; do
+          describe &quot;given an example group with at least one example&quot; do
+            it &quot;should call add_example_group&quot; do
+              example_group = Class.new(ExampleGroup) do
+                example(&quot;anything&quot;) {}
               end
+              reporter.should_receive(:add_example_group)
+              example_group.run(options)
             end
+          end
 
-            metaclass.class_eval do
-              define_method(:included) do |receiver|
-                receiver.extend class_methods
-              end
+          describe &quot;given an example group with no examples&quot; do
+            it &quot;should NOT call add_example_group&quot; do
+              example_group = Class.new(ExampleGroup) do end
+              reporter.should_not_receive(:add_example_group)
+              example_group.run(options)
             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
+        describe &quot;#matcher_class=&quot; do 
+          it &quot;should call new and matches? on the class used for matching examples&quot; do 
+            example_group = Class.new(ExampleGroup) do
+              it &quot;should do something&quot; do end
+              def self.specified_examples
+                [&quot;something&quot;]
               end
-            end
-
-            metaclass.class_eval do
-              define_method(:included) do |receiver|
-                receiver.extend class_methods
+              def self.to_s
+                &quot;TestMatcher&quot;
               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
+            matcher = mock(&quot;matcher&quot;)
+            matcher.should_receive(:matches?).with([&quot;something&quot;]).any_number_of_times
+          
+            matcher_class = Class.new
+            matcher_class.should_receive(:new).with(&quot;TestMatcher&quot;, &quot;should do something&quot;).and_return(matcher)
 
-      describe &quot;#number_of_examples&quot; do
-        it &quot;should count number of specs&quot; do
-          proc do
-            @example_group.it(&quot;one&quot;) {}
-            @example_group.it(&quot;two&quot;) {}
-            @example_group.it(&quot;three&quot;) {}
-            @example_group.it(&quot;four&quot;) {}
-          end.should change {@example_group.number_of_examples}.by(4)
-        end
-      end
+            begin 
+              ExampleGroupMethods.matcher_class = matcher_class
 
-      describe &quot;#class_eval&quot; do
-        it &quot;should allow constants to be defined&quot; do
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            FOO = 1
-            it &quot;should reference FOO&quot; do
-              FOO.should == 1
+              example_group.run(options)
+            ensure 
+              ExampleGroupMethods.matcher_class = ExampleMatcher
             end
           end
-          example_group.run
-          Object.const_defined?(:FOO).should == false
         end
-      end
 
-      describe '#register' do
-        it &quot;should add ExampleGroup to set of ExampleGroups to be run&quot; 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)
+        describe &quot;#options&quot; do
+          it &quot;should expose the options hash&quot; do
+            group = describe(&quot;group&quot;, :this =&gt; 'hash') {}
+            group.options[:this].should == 'hash'
+          end
         end
-      end
 
-      describe '#unregister' do
-        before do
-          options.example_groups.should include(example_group)
+        describe &quot;#backtrace&quot; do        
+          it &quot;returns the backtrace from where the example group was defined&quot; do
+            example_group = Class.new(ExampleGroup).describe(&quot;foo&quot;) do
+              example &quot;bar&quot; do; end
+            end
+            example_group.backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-3}&quot;)
+          end
         end
 
-        it &quot;should remove ExampleGroup from set of ExampleGroups to be run&quot; do
-          example_group.unregister
-          options.example_groups.should_not include(example_group)
-        end
-      end
+        describe &quot;#example_group_backtrace (deprecated)&quot; do        
+          before(:each) do
+            Kernel.stub!(:warn)
+          end
+          it &quot;sends a deprecation warning&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            Kernel.should_receive(:warn).with(/#example_group_backtrace.*deprecated.*#backtrace instead/m)
+            example_group.example_group_backtrace
+          end
 
-      describe &quot;#registration_backtrace&quot; do
-        it &quot;returns the backtrace of where the ExampleGroup was registered&quot; do
-          example_group = Class.new(ExampleGroup)
-          example_group.registration_backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-1}&quot;)
-        end
-      end
-      
-      describe &quot;#run&quot; do
-        it &quot;should add_example_group if there are any examples to run&quot; do
-          example_group = Class.new(ExampleGroup) do
-            it &quot;should do something&quot; do end
+          it &quot;returns the backtrace from where the example group was defined&quot; do
+            example_group = Class.new(ExampleGroup).describe(&quot;foo&quot;) do
+              example &quot;bar&quot; do; end
+            end
+            example_group.example_group_backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-3}&quot;)
           end
-          reporter.should_receive(:add_example_group)
-          example_group.run
         end
+        
+        describe &quot;#before&quot; do
+          it &quot;stores before(:each) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            block = lambda {}
+            example_group.before(:each, &amp;block)
+            example_group.before_each_parts.should include(block)
+          end
 
-        it &quot;should NOT add_example_group if there are no examples to run&quot; do
-          example_group = Class.new(ExampleGroup) do end
-          reporter.should_not_receive(:add_example_group)
-          example_group.run
-        end
-      end
+          it &quot;stores before(:all) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            block = lambda {}
+            example_group.before(:all, &amp;block)
+            example_group.before_all_parts.should include(block)
+          end
 
-      describe &quot;#matcher_class=&quot; do 
-        it &quot;should call new and matches? on the class used for matching examples&quot; do 
-          example_group = Class.new(ExampleGroup) do
-            it &quot;should do something&quot; do end
-            class &lt;&lt; self
-              def specified_examples
-                [&quot;something&quot;]
-              end
-              def to_s
-                &quot;TestMatcher&quot;
-              end
-            end
+          it &quot;stores before(:suite) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            parts = []
+            ExampleGroupMethods.stub!(:before_suite_parts).and_return(parts)
+            block = lambda {}
+            example_group.before(:suite, &amp;block)
+            example_group.before_suite_parts.should include(block)
           end
+        end
 
-          matcher = mock(&quot;matcher&quot;)
-          matcher.should_receive(:matches?).with([&quot;something&quot;]).any_number_of_times
-          
-          matcher_class = Class.new
-          matcher_class.should_receive(:new).with(&quot;TestMatcher&quot;, &quot;should do something&quot;).twice.and_return(matcher)
+        
+        describe &quot;#after&quot; do
+          it &quot;stores after(:each) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            block = lambda {}
+            example_group.after(:each, &amp;block)
+            example_group.after_each_parts.should include(block)
+          end
 
-          begin 
-            ExampleGroupMethods.matcher_class = matcher_class
+          it &quot;stores after(:all) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            block = lambda {}
+            example_group.after(:all, &amp;block)
+            example_group.after_all_parts.should include(block)
+          end
 
-            example_group.run
-          ensure 
-            ExampleGroupMethods.matcher_class = ExampleMatcher
+          it &quot;stores after(:suite) blocks&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            parts = []
+            ExampleGroupMethods.stub!(:after_suite_parts).and_return(parts)
+            block = lambda {}
+            example_group.after(:suite, &amp;block)
+            example_group.after_suite_parts.should include(block)
           end
         end
+
       end
     end
   end
-end
+end
\ No newline at end of file</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -60,589 +60,589 @@ module Spec
 
     describe ExampleGroup, &quot;#run with failure in example&quot;, :shared =&gt; true do
       it &quot;should add an example failure to the TestResult&quot; do
-        example_group.run.should be_false
+        example_group.run(options).should be_false
       end
     end
 
     describe ExampleGroup, &quot;#run&quot; do
-      it_should_behave_like &quot;sandboxed rspec_options&quot;
-      attr_reader :example_group, :formatter, :reporter
-      before :each do
-        @formatter = mock(&quot;formatter&quot;, :null_object =&gt; true)
-        options.formatters &lt;&lt; formatter
-        options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; true)
-        @reporter = FakeReporter.new(options)
-        options.reporter = reporter
-        @example_group = Class.new(ExampleGroup) do
-          describe(&quot;example&quot;)
-          it &quot;does nothing&quot; do
+      with_sandboxed_options do
+        attr_reader :example_group, :formatter, :reporter
+        before :each do
+          method_with_three_args = lambda { |arg1, arg2, arg3| }
+          @formatter = mock(&quot;formatter&quot;, :null_object =&gt; true, :example_pending =&gt; method_with_three_args)
+          options.formatters &lt;&lt; formatter
+          options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; true)
+          @reporter = FakeReporter.new(options)
+          options.reporter = reporter
+          @example_group = Class.new(ExampleGroup) do
+            describe(&quot;example&quot;)
+            it &quot;does nothing&quot; do
+            end
+          end
+          class &lt;&lt; example_group
+            public :include
           end
         end
-        class &lt;&lt; example_group
-          public :include
+
+        after :each do
+          ExampleGroup.reset
         end
-      end
 
-      after :each do
-        ExampleGroup.reset
-      end
+        it &quot;should not run when there are no examples&quot; do
+          example_group = Class.new(ExampleGroup) do
+            describe(&quot;Foobar&quot;)
+          end
+          example_group.examples.should be_empty
 
-      it &quot;should not run when there are no examples&quot; do
-        example_group = Class.new(ExampleGroup) do
-          describe(&quot;Foobar&quot;)
+          reporter = mock(&quot;Reporter&quot;)
+          reporter.should_not_receive(:add_example_group)
+          example_group.run(options)
         end
-        example_group.examples.should be_empty
-
-        reporter = mock(&quot;Reporter&quot;)
-        reporter.should_not_receive(:add_example_group)
-        example_group.run
-      end
       
-      describe &quot;when before_each fails&quot; do
-        before(:each) do
-          $example_ran = $after_each_ran = false
-          @example_group = describe(&quot;Foobar&quot;) do
-            before(:each) {raise}
-            it &quot;should not be run&quot; do
-              $example_ran = true
-            end
-            after(:each) do
-              $after_each_ran = true
+        describe &quot;when before_each fails&quot; do
+          before(:each) do
+            $example_ran = $after_each_ran = false
+            @example_group = describe(&quot;Foobar&quot;) do
+              before(:each) {raise}
+              it &quot;should not be run&quot; do
+                $example_ran = true
+              end
+              after(:each) do
+                $after_each_ran = true
+              end
             end
           end
-        end
 
-        it &quot;should not run example block&quot; do
-          example_group.run
-          $example_ran.should be_false
-        end
+          it &quot;should not run example block&quot; do
+            example_group.run(options)
+            $example_ran.should be_false
+          end
         
-        it &quot;should run after_each&quot; do
-          example_group.run
-          $after_each_ran.should be_true
-        end
-
-        it &quot;should report failure location when in before_each&quot; do
-          reporter.should_receive(:example_finished) do |example_group, error|
-            error.message.should eql(&quot;in before_each&quot;)
+          it &quot;should run after_each&quot; do
+            example_group.run(options)
+            $after_each_ran.should be_true
           end
-          example_group.run
-        end
-      end
-
-      describe ExampleGroup, &quot;#run on dry run&quot; do
-        before do
-          @options.dry_run = true
-        end
-
-        it &quot;should not run before(:all) or after(:all)&quot; 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(&quot;should&quot;) {}
-          example_group.run
-          before_all_ran.should be_false
-          after_all_ran.should be_false
-        end
 
-        it &quot;should not run example&quot; do
-          example_ran = false
-          example_group.it(&quot;should&quot;) {example_ran = true}
-          example_group.run
-          example_ran.should be_false
-        end
-      end
-
-      describe ExampleGroup, &quot;#run with specified examples&quot; do
-        attr_reader :examples_that_were_run
-        before do
-          @examples_that_were_run = []
+          it &quot;should report failure location when in before_each&quot; do
+            reporter.should_receive(:example_finished) do |example_group, error|
+              error.message.should eql(&quot;in before_each&quot;)
+            end
+            example_group.run(options)
+          end
         end
 
-        describe &quot;when specified_examples matches entire ExampleGroup&quot; do
+        describe ExampleGroup, &quot;#run on dry run&quot; do
           before do
-            examples_that_were_run = @examples_that_were_run
-            @example_group = Class.new(ExampleGroup) do
-              describe(&quot;the ExampleGroup&quot;)
-              it(&quot;should be run&quot;) do
-                examples_that_were_run &lt;&lt; 'should be run'
-              end
+            @options.dry_run = true
+          end
 
-              it(&quot;should also be run&quot;) do
-                examples_that_were_run &lt;&lt; 'should also be run'
-              end
-            end
-            options.examples = [&quot;the ExampleGroup&quot;]
+          it &quot;should not run before(:all) or after(:all)&quot; 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(&quot;should&quot;) {}
+            example_group.run(options)
+            before_all_ran.should be_false
+            after_all_ran.should be_false
           end
 
-          it &quot;should not run the Examples in the ExampleGroup&quot; do
-            example_group.run
-            examples_that_were_run.should == ['should be run', 'should also be run']
+          it &quot;should not run example&quot; do
+            example_ran = false
+            example_group.it(&quot;should&quot;) {example_ran = true}
+            example_group.run(options)
+            example_ran.should be_false
           end
         end
 
-        describe ExampleGroup, &quot;#run when specified_examples matches only Example description&quot; do
+        describe ExampleGroup, &quot;#run with specified examples&quot; do
+          attr_reader :examples_that_were_run
           before do
-            examples_that_were_run = @examples_that_were_run
-            @example_group = Class.new(ExampleGroup) do
-              describe(&quot;example&quot;)
-              it(&quot;should be run&quot;) do
-                examples_that_were_run &lt;&lt; 'should be run'
-              end
-            end
-            options.examples = [&quot;should be run&quot;]
+            @examples_that_were_run = []
           end
 
-          it &quot;should not run the example&quot; do
-            example_group.run
-            examples_that_were_run.should == ['should be run']
-          end
-        end
+          describe &quot;when specified_examples matches entire ExampleGroup&quot; do
+            before do
+              examples_that_were_run = @examples_that_were_run
+              @example_group = Class.new(ExampleGroup) do
+                describe(&quot;the ExampleGroup&quot;)
+                it(&quot;should be run&quot;) do
+                  examples_that_were_run &lt;&lt; 'should be run'
+                end
 
-        describe ExampleGroup, &quot;#run when specified_examples does not match an Example description&quot; do
-          before do
-            examples_that_were_run = @examples_that_were_run
-            @example_group = Class.new(ExampleGroup) do
-              describe(&quot;example&quot;)
-              it(&quot;should be something else&quot;) do
-                examples_that_were_run &lt;&lt; 'should be something else'
+                it(&quot;should also be run&quot;) do
+                  examples_that_were_run &lt;&lt; 'should also be run'
+                end
               end
+              options.parse_example &quot;the ExampleGroup&quot;
             end
-            options.examples = [&quot;does not match anything&quot;]
-          end
 
-          it &quot;should not run the example&quot; do
-            example_group.run
-            examples_that_were_run.should == []
+            it &quot;should not run the Examples in the ExampleGroup&quot; do
+              example_group.run(options)
+              examples_that_were_run.should == ['should be run', 'should also be run']
+            end
           end
-        end
 
-        describe ExampleGroup, &quot;#run when specified_examples matches an Example description&quot; do
-          before do
-            examples_that_were_run = @examples_that_were_run
-            @example_group = Class.new(ExampleGroup) do
-              describe(&quot;example&quot;)
-              it(&quot;should be run&quot;) do
-                examples_that_were_run &lt;&lt; 'should be run'
-              end
-              it(&quot;should not be run&quot;) do
-                examples_that_were_run &lt;&lt; 'should not be run'
+          describe ExampleGroup, &quot;#run when specified_examples matches only Example description&quot; do
+            before do
+              examples_that_were_run = @examples_that_were_run
+              @example_group = Class.new(ExampleGroup) do
+                describe(&quot;example&quot;)
+                it(&quot;should be run&quot;) do
+                  examples_that_were_run &lt;&lt; 'should be run'
+                end
               end
+              options.parse_example &quot;should be run&quot;
             end
-            options.examples = [&quot;should be run&quot;]
-          end
 
-          it &quot;should run only the example, when there in only one&quot; do
-            example_group.run
-            examples_that_were_run.should == [&quot;should be run&quot;]
+            it &quot;should not run the example&quot; do
+              example_group.run(options)
+              examples_that_were_run.should == ['should be run']
+            end
           end
 
-          it &quot;should run only the one example&quot; do
-            example_group.run
-            examples_that_were_run.should == [&quot;should be run&quot;]          end
-        end
-      end
+          describe ExampleGroup, &quot;#run when specified_examples does not match an Example description&quot; do
+            before do
+              examples_that_were_run = @examples_that_were_run
+              @example_group = Class.new(ExampleGroup) do
+                describe(&quot;example&quot;)
+                it(&quot;should be something else&quot;) do
+                  examples_that_were_run &lt;&lt; 'should be something else'
+                end
+              end
+              options.parse_example &quot;does not match anything&quot;
+            end
 
-      describe ExampleGroup, &quot;#run with success&quot; 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
+            it &quot;should not run the example&quot; do
+              example_group.run(options)
+              examples_that_were_run.should == []
+            end
+          end
 
-        after do
-          ExampleGroupFactory.reset
-        end
+          describe ExampleGroup, &quot;#run when specified_examples matches an Example description&quot; do
+            before do
+              examples_that_were_run = @examples_that_were_run
+              @example_group = Class.new(ExampleGroup) do
+                describe(&quot;example&quot;)
+                it(&quot;should be run&quot;) do
+                  examples_that_were_run &lt;&lt; 'should be run'
+                end
+                it(&quot;should not be run&quot;) do
+                  examples_that_were_run &lt;&lt; 'should not be run'
+                end
+              end
+              options.parse_example &quot;should be run&quot;
+            end
 
-        it &quot;should send reporter add_example_group&quot; do
-          example_group.run
-          reporter.example_groups.should == [example_group]
-        end
+            it &quot;should run only the example, when there is only one&quot; do
+              example_group.run(options)
+              examples_that_were_run.should == [&quot;should be run&quot;]
+            end
 
-        it &quot;should run example on run&quot; do
-          example_ran = false
-          example_group.it(&quot;should&quot;) {example_ran = true}
-          example_group.run
-          example_ran.should be_true
+            it &quot;should run only the one example&quot; do
+              example_group.run(options)
+              examples_that_were_run.should == [&quot;should be run&quot;]          end
+          end
         end
 
-        it &quot;should run before(:all) block only once&quot; do
-          before_all_run_count_run_count = 0
-          example_group.before(:all) {before_all_run_count_run_count += 1}
-          example_group.it(&quot;test&quot;) {true}
-          example_group.it(&quot;test2&quot;) {true}
-          example_group.run
-          before_all_run_count_run_count.should == 1
-        end
+        describe ExampleGroup, &quot;#run with success&quot; 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
 
-        it &quot;should run after(:all) block only once&quot; do
-          after_all_run_count = 0
-          example_group.after(:all) {after_all_run_count += 1}
-          example_group.it(&quot;test&quot;) {true}
-          example_group.it(&quot;test2&quot;) {true}
-          example_group.run
-          after_all_run_count.should == 1
-          @reporter.rspec_verify
-        end
+          after do
+            ExampleGroupFactory.reset
+          end
 
-        it &quot;after(:all) should have access to all instance variables defined in before(:all)&quot; do
-          context_instance_value_in = &quot;Hello there&quot;
-          context_instance_value_out = &quot;&quot;
-          example_group.before(:all) { @instance_var = context_instance_value_in }
-          example_group.after(:all) { context_instance_value_out = @instance_var }
-          example_group.it(&quot;test&quot;) {true}
-          example_group.run
-          context_instance_value_in.should == context_instance_value_out
-        end
+          it &quot;should send reporter add_example_group&quot; do
+            example_group.run(options)
+            reporter.example_groups.should == [example_group]
+          end
 
-        it &quot;should copy instance variables from before(:all)'s execution context into spec's execution context&quot; do
-          context_instance_value_in = &quot;Hello there&quot;
-          context_instance_value_out = &quot;&quot;
-          example_group.before(:all) { @instance_var = context_instance_value_in }
-          example_group.it(&quot;test&quot;) {context_instance_value_out = @instance_var}
-          example_group.run
-          context_instance_value_in.should == context_instance_value_out
-        end
+          it &quot;should run example on run&quot; do
+            example_ran = false
+            example_group.it(&quot;should&quot;) {example_ran = true}
+            example_group.run(options)
+            example_ran.should be_true
+          end
 
-        it &quot;should not add global before callbacks for untargetted example_group&quot; do
-          fiddle = []
+          it &quot;should run before(:all) block only once&quot; do
+            before_all_run_count_run_count = 0
+            example_group.before(:all) {before_all_run_count_run_count += 1}
+            example_group.it(&quot;test&quot;) {true}
+            example_group.it(&quot;test2&quot;) {true}
+            example_group.run(options)
+            before_all_run_count_run_count.should == 1
+          end
 
-          ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
-          ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
-          @special_example_group.before(:each) { fiddle &lt;&lt; &quot;Example.before(:each, :type =&gt; :special)&quot; }
-          @special_example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;Example.prepend_before(:each, :type =&gt; :special)&quot; }
-          @special_example_group.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all, :type =&gt; :special)&quot; }
-          @special_example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all, :type =&gt; :special)&quot; }
+          it &quot;should run after(:all) block only once&quot; do
+            after_all_run_count = 0
+            example_group.after(:all) {after_all_run_count += 1}
+            example_group.it(&quot;test&quot;) {true}
+            example_group.it(&quot;test2&quot;) {true}
+            example_group.run(options)
+            after_all_run_count.should == 1
+            @reporter.rspec_verify
+          end
 
-          example_group = Class.new(ExampleGroup) do
-            describe(&quot;I'm not special&quot;, :type =&gt; :not_special)
-            it &quot;does nothing&quot;
-          end
-          example_group.run
-          fiddle.should == [
-            'Example.prepend_before(:all)',
-            'Example.before(:all)',
-          ]
-        end
+          it &quot;after(:all) should have access to all instance variables defined in before(:all)&quot; do
+            context_instance_value_in = &quot;Hello there&quot;
+            context_instance_value_out = &quot;&quot;
+            example_group.before(:all) { @instance_var = context_instance_value_in }
+            example_group.after(:all) { context_instance_value_out = @instance_var }
+            example_group.it(&quot;test&quot;) {true}
+            example_group.run(options)
+            context_instance_value_in.should == context_instance_value_out
+          end
 
-        it &quot;should add global before callbacks for targetted example_groups&quot; do
-          fiddle = []
-
-          ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
-          ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
-          @special_example_group.before(:each) { fiddle &lt;&lt; &quot;special.before(:each, :type =&gt; :special)&quot; }
-          @special_example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;special.prepend_before(:each, :type =&gt; :special)&quot; }
-          @special_example_group.before(:all) { fiddle &lt;&lt; &quot;special.before(:all, :type =&gt; :special)&quot; }
-          @special_example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;special.prepend_before(:all, :type =&gt; :special)&quot; }
-          @special_example_group.append_before(:each) { fiddle &lt;&lt; &quot;special.append_before(:each, :type =&gt; :special)&quot; }
-
-          example_group = Class.new(@special_example_group).describe(&quot;I'm a special example_group&quot;) {}
-          example_group.it(&quot;test&quot;) {true}
-          example_group.run
-          fiddle.should == [
-            'Example.prepend_before(:all)',
-            'Example.before(:all)',
-            'special.prepend_before(:all, :type =&gt; :special)',
-            'special.before(:all, :type =&gt; :special)',
-            'special.prepend_before(:each, :type =&gt; :special)',
-            'special.before(:each, :type =&gt; :special)',
-            'special.append_before(:each, :type =&gt; :special)',
-          ]
-        end
+          it &quot;should copy instance variables from before(:all)'s execution context into spec's execution context&quot; do
+            context_instance_value_in = &quot;Hello there&quot;
+            context_instance_value_out = &quot;&quot;
+            example_group.before(:all) { @instance_var = context_instance_value_in }
+            example_group.it(&quot;test&quot;) {context_instance_value_out = @instance_var}
+            example_group.run(options)
+            context_instance_value_in.should == context_instance_value_out
+          end
 
-        it &quot;should order before callbacks from global to local&quot; do
-          fiddle = []
-          ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
-          ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
-          example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;prepend_before(:all)&quot; }
-          example_group.before(:all) { fiddle &lt;&lt; &quot;before(:all)&quot; }
-          example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;prepend_before(:each)&quot; }
-          example_group.before(:each) { fiddle &lt;&lt; &quot;before(:each)&quot; }
-          example_group.run
-          fiddle.should == [
-            'Example.prepend_before(:all)',
-            'Example.before(:all)',
-            'prepend_before(:all)',
-            'before(:all)',
-            'prepend_before(:each)',
-            'before(:each)'
-          ]
-        end
+          it &quot;should not add global before callbacks for untargetted example_group&quot; do
+            fiddle = []
 
-        it &quot;should order after callbacks from local to global&quot; do
-          fiddle = []
-          example_group.after(:each) { fiddle &lt;&lt; &quot;after(:each)&quot; }
-          example_group.append_after(:each) { fiddle &lt;&lt; &quot;append_after(:each)&quot; }
-          example_group.after(:all) { fiddle &lt;&lt; &quot;after(:all)&quot; }
-          example_group.append_after(:all) { fiddle &lt;&lt; &quot;append_after(:all)&quot; }
-          ExampleGroup.after(:all) { fiddle &lt;&lt; &quot;Example.after(:all)&quot; }
-          ExampleGroup.append_after(:all) { fiddle &lt;&lt; &quot;Example.append_after(:all)&quot; }
-          example_group.run
-          fiddle.should == [
-            'after(:each)',
-            'append_after(:each)',
-            'after(:all)',
-            'append_after(:all)',
-            'Example.after(:all)',
-            'Example.append_after(:all)'
-          ]
-        end
+            ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
+            ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
+            @special_example_group.before(:each) { fiddle &lt;&lt; &quot;Example.before(:each, :type =&gt; :special)&quot; }
+            @special_example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;Example.prepend_before(:each, :type =&gt; :special)&quot; }
+            @special_example_group.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all, :type =&gt; :special)&quot; }
+            @special_example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all, :type =&gt; :special)&quot; }
 
-        it &quot;should have accessible instance methods from included module&quot; do
-          mod1_method_called = false
-          mod1 = Module.new do
-            define_method :mod1_method do
-              mod1_method_called = true
+            example_group = Class.new(ExampleGroup) do
+              describe(&quot;I'm not special&quot;, :type =&gt; :not_special)
+              it &quot;does nothing&quot;
+            end
+            example_group.run(options)
+            fiddle.should == [
+              'Example.prepend_before(:all)',
+              'Example.before(:all)',
+            ]
+          end
+
+          it &quot;should add global before callbacks for targetted example_groups&quot; do
+            fiddle = []
+
+            ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
+            ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
+            @special_example_group.before(:each) { fiddle &lt;&lt; &quot;special.before(:each, :type =&gt; :special)&quot; }
+            @special_example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;special.prepend_before(:each, :type =&gt; :special)&quot; }
+            @special_example_group.before(:all) { fiddle &lt;&lt; &quot;special.before(:all, :type =&gt; :special)&quot; }
+            @special_example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;special.prepend_before(:all, :type =&gt; :special)&quot; }
+            @special_example_group.append_before(:each) { fiddle &lt;&lt; &quot;special.append_before(:each, :type =&gt; :special)&quot; }
+
+            example_group = Class.new(@special_example_group).describe(&quot;I'm a special example_group&quot;) {}
+            example_group.it(&quot;test&quot;) {true}
+            example_group.run(options)
+            fiddle.should == [
+              'Example.prepend_before(:all)',
+              'Example.before(:all)',
+              'special.prepend_before(:all, :type =&gt; :special)',
+              'special.before(:all, :type =&gt; :special)',
+              'special.prepend_before(:each, :type =&gt; :special)',
+              'special.before(:each, :type =&gt; :special)',
+              'special.append_before(:each, :type =&gt; :special)',
+            ]
+          end
+
+          it &quot;should order before callbacks from global to local&quot; do
+            fiddle = []
+            ExampleGroup.prepend_before(:all) { fiddle &lt;&lt; &quot;Example.prepend_before(:all)&quot; }
+            ExampleGroup.before(:all) { fiddle &lt;&lt; &quot;Example.before(:all)&quot; }
+            example_group.prepend_before(:all) { fiddle &lt;&lt; &quot;prepend_before(:all)&quot; }
+            example_group.before(:all) { fiddle &lt;&lt; &quot;before(:all)&quot; }
+            example_group.prepend_before(:each) { fiddle &lt;&lt; &quot;prepend_before(:each)&quot; }
+            example_group.before(:each) { fiddle &lt;&lt; &quot;before(:each)&quot; }
+            example_group.run(options)
+            fiddle.should == [
+              'Example.prepend_before(:all)',
+              'Example.before(:all)',
+              'prepend_before(:all)',
+              'before(:all)',
+              'prepend_before(:each)',
+              'before(:each)'
+            ]
+          end
+
+          it &quot;should order after callbacks from local to global&quot; do
+            fiddle = []
+            example_group.after(:each) { fiddle &lt;&lt; &quot;after(:each)&quot; }
+            example_group.append_after(:each) { fiddle &lt;&lt; &quot;append_after(:each)&quot; }
+            example_group.after(:all) { fiddle &lt;&lt; &quot;after(:all)&quot; }
+            example_group.append_after(:all) { fiddle &lt;&lt; &quot;append_after(:all)&quot; }
+            ExampleGroup.after(:all) { fiddle &lt;&lt; &quot;Example.after(:all)&quot; }
+            ExampleGroup.append_after(:all) { fiddle &lt;&lt; &quot;Example.append_after(:all)&quot; }
+            example_group.run(options)
+            fiddle.should == [
+              'after(:each)',
+              'append_after(:each)',
+              'after(:all)',
+              'append_after(:all)',
+              'Example.after(:all)',
+              'Example.append_after(:all)'
+            ]
+          end
+
+          it &quot;should have accessible instance methods from included module&quot; do
+            mod1_method_called = false
+            mod1 = Module.new do
+              define_method :mod1_method do
+                mod1_method_called = true
+              end
             end
-          end
 
-          mod2_method_called = false
-          mod2 = Module.new do
-            define_method :mod2_method do
-              mod2_method_called = true
+            mod2_method_called = false
+            mod2 = Module.new do
+              define_method :mod2_method do
+                mod2_method_called = true
+              end
             end
-          end
 
-          example_group.include mod1, mod2
+            example_group.include mod1, mod2
 
-          example_group.it(&quot;test&quot;) do
-            mod1_method
-            mod2_method
+            example_group.it(&quot;test&quot;) do
+              mod1_method
+              mod2_method
+            end
+            example_group.run(options)
+            mod1_method_called.should be_true
+            mod2_method_called.should be_true
           end
-          example_group.run
-          mod1_method_called.should be_true
-          mod2_method_called.should be_true
-        end
 
-        it &quot;should include targetted modules included using configuration&quot; do
-          mod1 = Module.new
-          mod2 = Module.new
-          mod3 = Module.new
-          Spec::Runner.configuration.include(mod1, mod2)
-          Spec::Runner.configuration.include(mod3, :type =&gt; :not_special)
+          it &quot;should include targetted modules included using configuration&quot; do
+            mod1 = Module.new
+            mod2 = Module.new
+            mod3 = Module.new
+            Spec::Runner.configuration.include(mod1, mod2)
+            Spec::Runner.configuration.include(mod3, :type =&gt; :not_special)
 
-          example_group = Class.new(@special_example_group).describe(&quot;I'm special&quot;, :type =&gt; :special) do
-            it &quot;does nothing&quot;
-          end
-          example_group.run
+            example_group = Class.new(@special_example_group).describe(&quot;I'm special&quot;, :type =&gt; :special) do
+              it &quot;does nothing&quot;
+            end
+            example_group.run(options)
 
-          example_group.included_modules.should include(mod1)
-          example_group.included_modules.should include(mod2)
-          example_group.included_modules.should_not include(mod3)
-        end
+            example_group.included_modules.should include(mod1)
+            example_group.included_modules.should include(mod2)
+            example_group.included_modules.should_not include(mod3)
+          end
 
-        it &quot;should include any predicate_matchers included using configuration&quot; do
-          $included_predicate_matcher_found = false
-          Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
-          example_group = Class.new(ExampleGroup) do
-            describe('example')
-            it &quot;should respond to do_something&quot; do
-              $included_predicate_matcher_found = respond_to?(:do_something)
+          it &quot;should include any predicate_matchers included using configuration&quot; do
+            $included_predicate_matcher_found = false
+            Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
+            example_group = Class.new(ExampleGroup) do
+              describe('example')
+              it &quot;should respond to do_something&quot; do
+                $included_predicate_matcher_found = respond_to?(:do_something)
+              end
             end
+            example_group.run(options)
+            $included_predicate_matcher_found.should be(true)
           end
-          example_group.run
-          $included_predicate_matcher_found.should be(true)
-        end
 
-        it &quot;should use a mock framework set up in config&quot; do
-          mod = Module.new do
-            class &lt;&lt; self
-              def included(mod)
+          it &quot;should use a mock framework set up in config&quot; do
+            mod = Module.new do
+              def self.included(mod)
                 $included_module = mod
               end
+
+              def teardown_mocks_for_rspec
+                $torn_down = true
+              end
             end
 
-            def teardown_mocks_for_rspec
+            begin
+              $included_module = nil
               $torn_down = true
-            end
-          end
+              Spec::Runner.configuration.mock_with mod
 
-          begin
-            $included_module = nil
-            $torn_down = true
-            Spec::Runner.configuration.mock_with mod
+              example_group = Class.new(ExampleGroup) do
+                describe('example')
+                it &quot;does nothing&quot;
+              end
+              example_group.run(options)
 
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              it &quot;does nothing&quot;
+              $included_module.should_not be_nil
+              $torn_down.should == true
+            ensure
+              Spec::Runner.configuration.mock_with :rspec
             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, &quot;#run with pending example that has a failing assertion&quot; do
-        before do
-          example_group.it(&quot;should be pending&quot;) do
-            pending(&quot;Example fails&quot;) {false.should be_true}
+        describe ExampleGroup, &quot;#run with pending example that has a failing assertion&quot; do
+          before do
+            example_group.it(&quot;should be pending&quot;) do
+              pending(&quot;Example fails&quot;) {false.should be_true}
+            end
           end
-        end
 
-        it &quot;should send example_pending to formatter&quot; do
-          @formatter.should_receive(:example_pending).with(&quot;example&quot;, &quot;should be pending&quot;, &quot;Example fails&quot;)
-          example_group.run
+          it &quot;should send example_pending to formatter&quot; do
+            @formatter.should_receive(:example_pending).with(&quot;example&quot;, &quot;should be pending&quot;, &quot;Example fails&quot;)
+            example_group.run(options)
+          end
         end
-      end
 
-      describe ExampleGroup, &quot;#run with pending example that does not have a failing assertion&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run with pending example that does not have a failing assertion&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          example_group.it(&quot;should be pending&quot;) do
-            pending(&quot;Example passes&quot;) {true.should be_true}
+          before do
+            example_group.it(&quot;should be pending&quot;) do
+              pending(&quot;Example passes&quot;) {true.should be_true}
+            end
           end
-        end
 
-        it &quot;should send example_pending to formatter&quot; do
-          @formatter.should_receive(:example_pending).with(&quot;example&quot;, &quot;should be pending&quot;, &quot;Example passes&quot;)
-          example_group.run
+          it &quot;should send example_pending to formatter&quot; do
+            @formatter.should_receive(:example_pending).with(&quot;example&quot;, &quot;should be pending&quot;, &quot;Example passes&quot;)
+            example_group.run(options)
+          end
         end
-      end
-
-      describe ExampleGroup, &quot;#run when before(:all) fails&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          ExampleGroup.before(:all) { raise NonStandardError, &quot;before(:all) failure&quot; }
-        end
+        describe ExampleGroup, &quot;#run when before(:all) fails&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        it &quot;should not run any example&quot; do
-          spec_ran = false
-          example_group.it(&quot;test&quot;) {spec_ran = true}
-          example_group.run
-          spec_ran.should be_false
-        end
+          before do
+            ExampleGroup.before(:all) { raise NonStandardError, &quot;before(:all) failure&quot; }
+          end
 
-        it &quot;should run ExampleGroup after(:all)&quot; do
-          after_all_ran = false
-          ExampleGroup.after(:all) { after_all_ran = true }
-          example_group.run
-          after_all_ran.should be_true
-        end
+          it &quot;should not run any example&quot; do
+            spec_ran = false
+            example_group.it(&quot;test&quot;) {spec_ran = true}
+            example_group.run(options)
+            spec_ran.should be_false
+          end
 
-        it &quot;should run example_group after(:all)&quot; do
-          after_all_ran = false
-          example_group.after(:all) { after_all_ran = true }
-          example_group.run
-          after_all_ran.should be_true
-        end
+          it &quot;should run ExampleGroup after(:all)&quot; do
+            after_all_ran = false
+            ExampleGroup.after(:all) { after_all_ran = true }
+            example_group.run(options)
+            after_all_ran.should be_true
+          end
 
-        it &quot;should supply before(:all) as description&quot; do
-          @reporter.should_receive(:failure) do |example, error|
-            example.description.should eql(&quot;before(:all)&quot;)
-            error.message.should eql(&quot;before(:all) failure&quot;)
+          it &quot;should run example_group after(:all)&quot; do
+            after_all_ran = false
+            example_group.after(:all) { after_all_ran = true }
+            example_group.run(options)
+            after_all_ran.should be_true
           end
 
-          example_group.it(&quot;test&quot;) {true}
-          example_group.run
+          it &quot;should supply before(:all) as description&quot; do
+            @reporter.should_receive(:failure) do |example, error|
+              example.description.should eql(&quot;before(:all)&quot;)
+              error.message.should eql(&quot;before(:all) failure&quot;)
+            end
+
+            example_group.it(&quot;test&quot;) {true}
+            example_group.run(options)
+          end
         end
-      end
 
-      describe ExampleGroup, &quot;#run when before(:each) fails&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run when before(:each) fails&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          ExampleGroup.before(:each) { raise NonStandardError }
-        end
+          before do
+            ExampleGroup.before(:each) { raise NonStandardError }
+          end
 
-        it &quot;should run after(:all)&quot; do
-          after_all_ran = false
-          ExampleGroup.after(:all) { after_all_ran = true }
-          example_group.run
-          after_all_ran.should be_true
+          it &quot;should run after(:all)&quot; do
+            after_all_ran = false
+            ExampleGroup.after(:all) { after_all_ran = true }
+            example_group.run(options)
+            after_all_ran.should be_true
+          end
         end
-      end
 
-      describe ExampleGroup, &quot;#run when any example fails&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run when any example fails&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          example_group.it(&quot;should&quot;) { raise NonStandardError }
-        end
+          before do
+            example_group.it(&quot;should&quot;) { raise NonStandardError }
+          end
 
-        it &quot;should run after(:all)&quot; do
-          after_all_ran = false
-          ExampleGroup.after(:all) { after_all_ran = true }
-          example_group.run
-          after_all_ran.should be_true
+          it &quot;should run after(:all)&quot; do
+            after_all_ran = false
+            ExampleGroup.after(:all) { after_all_ran = true }
+            example_group.run(options)
+            after_all_ran.should be_true
+          end
         end
-      end
 
-      describe ExampleGroup, &quot;#run when first after(:each) block fails&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run when first after(:each) block fails&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          class &lt;&lt; example_group
-            attr_accessor :first_after_ran, :second_after_ran
-          end
-          example_group.first_after_ran = false
-          example_group.second_after_ran = false
+          before do
+            class &lt;&lt; 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 &quot;first&quot;
+            example_group.after(:each) do
+              self.class.second_after_ran = true
+            end
+            example_group.after(:each) do
+              self.class.first_after_ran = true
+              raise &quot;first&quot;
+            end
           end
-        end
 
-        it &quot;should run second after(:each) block&quot; do
-          reporter.should_receive(:example_finished) do |example, error|
-            example.should equal(example)
-            error.message.should eql(&quot;first&quot;)
+          it &quot;should run second after(:each) block&quot; do
+            reporter.should_receive(:example_finished) do |example, error|
+              example.should equal(example)
+              error.message.should eql(&quot;first&quot;)
+            end
+            example_group.run(options)
+            example_group.first_after_ran.should be_true
+            example_group.second_after_ran.should be_true
           end
-          example_group.run
-          example_group.first_after_ran.should be_true
-          example_group.second_after_ran.should be_true
         end
-      end
 
-      describe ExampleGroup, &quot;#run when first before(:each) block fails&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run when first before(:each) block fails&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          class &lt;&lt; example_group
-            attr_accessor :first_before_ran, :second_before_ran
-          end
-          example_group.first_before_ran = false
-          example_group.second_before_ran = false
+          before do
+            class &lt;&lt; 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 &quot;first&quot;
-          end
-          example_group.before(:each) do
-            self.class.second_before_ran = true
+            example_group.before(:each) do
+              self.class.first_before_ran = true
+              raise &quot;first&quot;
+            end
+            example_group.before(:each) do
+              self.class.second_before_ran = true
+            end
           end
-        end
 
-        it &quot;should not run second before(:each)&quot; do
-          reporter.should_receive(:example_finished) do |name, error|
-            error.message.should eql(&quot;first&quot;)
+          it &quot;should not run second before(:each)&quot; do
+            reporter.should_receive(:example_finished) do |name, error|
+              error.message.should eql(&quot;first&quot;)
+            end
+            example_group.run(options)
+            example_group.first_before_ran.should be_true
+            example_group.second_before_ran.should be_false
           end
-          example_group.run
-          example_group.first_before_ran.should be_true
-          example_group.second_before_ran.should be_false
         end
-      end
 
-      describe ExampleGroup, &quot;#run when failure in after(:all)&quot; do
-        it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
+        describe ExampleGroup, &quot;#run when failure in after(:all)&quot; do
+          it_should_behave_like &quot;Spec::Example::ExampleGroup#run with failure in example&quot;
 
-        before do
-          ExampleGroup.after(:all) { raise NonStandardError, &quot;in after(:all)&quot; }
-        end
+          before do
+            ExampleGroup.after(:all) { raise NonStandardError, &quot;in after(:all)&quot; }
+          end
 
-        it &quot;should return false&quot; do
-          example_group.run.should be_false
+          it &quot;should return false&quot; do
+            example_group.run(options).should be_false
+          end
         end
       end
     end
@@ -659,7 +659,7 @@ module Spec
         example_group = Class.new(ExampleSubclass) do
           describe(Array)
         end
-        example_group.send(:described_type).should == Array
+        example_group.__send__(:described_type).should == Array
       end
 
       it &quot;should concat descriptions when nested&quot; do
@@ -671,53 +671,5 @@ module Spec
         $nested_group.description.to_s.should == &quot;Array when empty&quot;
       end
     end
-
-    describe Enumerable do
-      before(:each) do
-        Kernel.stub!(:warn)
-      end
-      
-      def each(&amp;block)
-        [&quot;4&quot;, &quot;2&quot;, &quot;1&quot;].each(&amp;block)
-      end
-
-      it &quot;should be included in examples because it is a module&quot; do
-        map{|e| e.to_i}.should == [4,2,1]
-      end
-    end
-
-    describe &quot;An&quot;, Enumerable, &quot;as a second argument&quot; do
-      before(:each) do
-        Kernel.stub!(:warn)
-      end
-      
-      def each(&amp;block)
-        [&quot;4&quot;, &quot;2&quot;, &quot;1&quot;].each(&amp;block)
-      end
-
-      it &quot;should be included in examples because it is a module&quot; do
-        map{|e| e.to_i}.should == [4,2,1]
-      end
-    end
-
-    describe Enumerable do
-      describe &quot;as the parent of nested example groups&quot; do
-        before(:each) do
-          Kernel.stub!(:warn)
-        end
-        
-        it &quot;should be included in examples because it is a module&quot; do
-          pending(&quot;need to make sure nested groups know the described type&quot;) do
-            map{|e| e.to_i}.should == [4,2,1]
-          end
-        end
-      end
-    end
-
-    describe String do
-      it &quot;should not be included in examples because it is not a module&quot; do
-        lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/)
-      end
-    end
   end
 end</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_group_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,31 +2,14 @@ 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
-          &quot;expected matcher.matches?(#{@description.inspect}) to return true, got false&quot;
-        end
-        
-        def negative_failure_message
-          &quot;expected matcher.matches?(#{@description.inspect}) to return false, got true&quot;
-        end
-      end
+    describe ExampleMatcher, &quot;#matches?&quot; do
       def match_description(description)
-        MatchDescription.new(description)
+        simple_matcher do |actual, matcher|
+          matcher.failure_message = &quot;expected matcher.matches?(#{description.inspect}) to return true, got false&quot;
+          matcher.negative_failure_message = &quot;expected matcher.matches?(#{description.inspect}) to return false, got true&quot;
+          actual.matches?(description)
+        end
       end
-    end
-
-    describe ExampleMatcher, &quot;#matches?&quot; do
-      include ExampleMatcherSpecHelper
       
       it &quot;should match correct example_group and example&quot; do
         matcher = ExampleMatcher.new(&quot;example_group&quot;, &quot;example&quot;)</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,105 +22,270 @@ module Spec
       end
 
       describe &quot;lifecycle&quot; do
-        before do
-          @original_rspec_options = $rspec_options
-          @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
-          $rspec_options = @options
-          @options.formatters &lt;&lt; mock(&quot;formatter&quot;, :null_object =&gt; true)
-          @options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; true)
-          @reporter = FakeReporter.new(@options)
-          @options.reporter = @reporter
-
-          ExampleMethods.before_all_parts.should == []
-          ExampleMethods.before_each_parts.should == []
-          ExampleMethods.after_each_parts.should == []
-          ExampleMethods.after_all_parts.should == []
-          def ExampleMethods.count
-            @count ||= 0
-            @count = @count + 1
-            @count
+        with_sandboxed_options do
+          with_sandboxed_config do
+            before do
+              @options.formatters &lt;&lt; mock(&quot;formatter&quot;, :null_object =&gt; true)
+              @options.backtrace_tweaker = mock(&quot;backtrace_tweaker&quot;, :null_object =&gt; 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
           end
-        end
 
-        after do
-          $rspec_options = @original_rspec_options
-          ExampleMethods.instance_variable_set(&quot;@before_all_parts&quot;, [])
-          ExampleMethods.instance_variable_set(&quot;@before_each_parts&quot;, [])
-          ExampleMethods.instance_variable_set(&quot;@after_each_parts&quot;, [])
-          ExampleMethods.instance_variable_set(&quot;@after_all_parts&quot;, [])
-        end
-
-        it &quot;should pass before and after callbacks to all ExampleGroup subclasses&quot; do
-          ExampleMethods.before(:suite) do
-            ExampleMethods.count.should == 1
+          after do
+            ExampleGroup.instance_variable_set(&quot;@before_all_parts&quot;, [])
+            ExampleGroup.instance_variable_set(&quot;@before_each_parts&quot;, [])
+            ExampleGroup.instance_variable_set(&quot;@after_each_parts&quot;, [])
+            ExampleGroup.instance_variable_set(&quot;@after_all_parts&quot;, [])
           end
 
-          ExampleMethods.before(:all) do
-            ExampleMethods.count.should == 2
-          end
+          describe &quot;eval_block&quot; do
+            before(:each) do
+              @example_group = Class.new(ExampleGroup)
+            end
+          
+            describe &quot;with a given description&quot; do
+              it &quot;should provide the given description&quot; do
+                @example = @example_group.it(&quot;given description&quot;) { 2.should == 2 }
+                @example.eval_block
+                @example.description.should == &quot;given description&quot;
+              end
+            end
 
-          ExampleMethods.before(:each) do
-            ExampleMethods.count.should == 3
+            describe &quot;with no given description&quot; do
+              it &quot;should provide the generated description&quot; do
+                @example = @example_group.it { 2.should == 2 }
+                @example.eval_block
+                @example.description.should == &quot;should == 2&quot;
+              end
+            end
+          
+            describe &quot;with no implementation&quot; do
+              it &quot;should raise an NotYetImplementedError&quot; do
+                lambda {
+                  @example = @example_group.it
+                  @example.eval_block
+                }.should raise_error(Spec::Example::NotYetImplementedError, &quot;Not Yet Implemented&quot;)
+              end
+            
+              def extract_error(&amp;blk)
+                begin
+                  blk.call
+                rescue Exception =&gt; e
+                  return e
+                end
+              
+                nil
+              end
+            
+              it &quot;should use the proper file and line number for the NotYetImplementedError&quot; do
+                file = __FILE__
+                line_number = __LINE__ + 3
+              
+                error = extract_error do
+                  @example = @example_group.it
+                  @example.eval_block
+                end
+              
+                error.pending_caller.should == &quot;#{file}:#{line_number}&quot;
+              end
+            end
           end
+        end
+      end
 
-          ExampleMethods.after(:each) do
-            ExampleMethods.count.should == 4
+      describe &quot;#backtrace&quot; do        
+        with_sandboxed_options do
+          it &quot;returns the backtrace from where the example was defined&quot; do
+            example_group = Class.new(ExampleGroup) do
+              example &quot;of something&quot; do; end
+            end
+            
+            example = example_group.examples.first
+            example.backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-4}&quot;)
           end
-
-          ExampleMethods.after(:all) do
-            ExampleMethods.count.should == 5
+        end
+      end
+      
+      describe &quot;#implementation_backtrace (deprecated)&quot; do
+        with_sandboxed_options do
+          before(:each) do
+            Kernel.stub!(:warn)
           end
 
-          ExampleMethods.after(:suite) do
-            ExampleMethods.count.should == 6
+          it &quot;sends a deprecation warning&quot; do
+            example_group = Class.new(ExampleGroup) {}
+            example = example_group.example(&quot;&quot;) {}
+            Kernel.should_receive(:warn).with(/#implementation_backtrace.*deprecated.*#backtrace instead/m)
+            example.implementation_backtrace
           end
-
-          @example_group = Class.new(ExampleGroup) do
-            it &quot;should use ExampleMethods callbacks&quot; do
+          
+          it &quot;returns the backtrace from where the example was defined&quot; do
+            example_group = Class.new(ExampleGroup) do
+              example &quot;of something&quot; do; end
             end
+            
+            example = example_group.examples.first
+            example.backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-4}&quot;)
           end
-          @options.run_examples
-          ExampleMethods.count.should == 7
         end
+      end
 
-        describe &quot;run_with_description_capturing&quot; do
-          before(:each) do
-            @example_group = Class.new(ExampleGroup) do end
-            @example = @example_group.new(&quot;foo&quot;, &amp;(lambda { 2.should == 2 }))
-            @example.run_with_description_capturing
+      describe &quot;#full_description&quot; do
+        it &quot;should return the full description of the ExampleGroup and Example&quot; do
+          example_group = Class.new(ExampleGroup).describe(&quot;An ExampleGroup&quot;) do
+            it &quot;should do something&quot; do
+            end
           end
-
-          it &quot;should provide the generated description&quot; do
-            @example.instance_eval { @_matcher_description }.should == &quot;should == 2&quot;
+          example = example_group.examples.first
+          example.full_description.should == &quot;An ExampleGroup should do something&quot;
+        end
+      end
+      
+      describe &quot;#subject&quot; do
+        with_sandboxed_options do
+          it &quot;should return an instance variable named after the described type&quot; do
+            example_group = Class.new(ExampleGroup).describe(Array) do
+              example {}
+            end
+            example = example_group.examples.first
+            example.subject.should == []
           end
-
-          it &quot;should clear the global generated_description&quot; do
-            Spec::Matchers.generated_description.should == nil
+      
+          it &quot;should not barf on a module (as opposed to a class)&quot; do
+            example_group = Class.new(ExampleGroup).describe(ObjectSpace) do
+              example {}
+            end
+            example_group.examples.first.subject.should be_nil
+          end
+      
+          it &quot;should not barf on a string&quot; do
+            example_group = Class.new(ExampleGroup).describe('foo') do
+              example {}
+            end
+            example_group.examples.first.subject.should be_nil
+          end
+      
+          it &quot;should interact with the same scope as the before block&quot; do
+            example_group = Class.new(ExampleGroup) do
+              subject { @foo = 'foo'}
+              example { should == @foo}
+              it { should == 'foo'}
+            end
+            example_group.run(options).should be_true
           end
         end
       end
 
-      describe &quot;#implementation_backtrace&quot; do
-        it &quot;returns the backtrace of where the implementation was defined&quot; do
-          example_group = Class.new(ExampleGroup) do
-            it &quot;should use ExampleMethods callbacks&quot; do
+      describe &quot;#should&quot; do
+        with_sandboxed_options do
+          class Thing
+            def ==(other)
+              true
             end
           end
-          example = example_group.examples.first
-          example.implementation_backtrace.join(&quot;\n&quot;).should include(&quot;#{__FILE__}:#{__LINE__-4}&quot;)
+          
+          describe &quot;in an ExampleGroup with the ivar defined in before&quot; do
+            attr_reader :example, :success
+
+            before(:each) do
+              example_group = describe(Thing, &quot;1&quot;) do
+                before(:each) { @spec_example_thing = 'expected' }
+                it { should eql('expected') }
+              end
+              @example = example_group.examples.first
+              @success = example_group.run(options)
+            end
+
+            it &quot;should create an example using the description from the matcher&quot; do
+              example.description.should == 'should eql &quot;expected&quot;'
+            end
+
+            it &quot;should test the matcher returned from the block&quot; do
+              success.should be_true
+            end
+          end
+
+          describe &quot;in an ExampleGroup with the subject defined using #subject&quot; do
+            it &quot;should create an example using the description from the matcher&quot; do
+              example_group = describe(Thing, &quot;2&quot;) do
+                subject {'this is the subject'}
+                it { should eql('this is the subject') }
+              end
+              example = example_group.examples.first
+              example_group.run(options)
+              example.description.should =~ /should eql &quot;this is the subject&quot;/
+            end
+          end
+          
+          describe &quot;in an ExampleGroup using an implicit ivar&quot; do
+            it &quot;should create an example using the description from the matcher&quot; do
+              example_group = describe(Thing, &quot;3&quot;) do
+                it { should == Thing.new }
+              end
+              example = example_group.examples.first
+              success = example_group.run(options)
+              example.description.should =~ /should == #&lt;Spec::Example::Thing/
+              success.should be_true
+            end
+          end
+          
+          after(:each) do
+            ExampleGroup.reset
+          end
+          
         end
       end
 
-      describe &quot;#__full_description&quot; do
-        it &quot;should return the full description of the ExampleGroup and Example&quot; do
-          example_group = Class.new(ExampleGroup).describe(&quot;An ExampleGroup&quot;) do
-            it &quot;should do something&quot; do
+      describe &quot;#should_not&quot; do
+        with_sandboxed_options do
+
+          attr_reader :example_group, :example, :success
+
+          before do
+            @example_group = Class.new(ExampleGroup) do
+              def subject; @actual; end
+              before(:each) { @actual = 'expected' }
+              it { should_not eql('unexpected') }
             end
+            @example = @example_group.examples.first
+
+            @success = example_group.run(options)
           end
-          example = example_group.examples.first
-          example.__full_description.should == &quot;An ExampleGroup should do something&quot;
+
+          it &quot;should create an example using the description from the matcher&quot; do
+            example.description.should == 'should not eql &quot;unexpected&quot;'
+          end
+
+          it &quot;should test the matcher returned from the block&quot; do
+            success.should be_true
+          end
+
+          after do
+            ExampleGroup.reset
+          end
+
         end
       end
     end
+
+    describe &quot;#options&quot; do
+      it &quot;should expose the options hash&quot; do
+        example_group = Class.new(ExampleGroup)
+        example = example_group.example &quot;name&quot;, :this =&gt; 'that' do; end
+        example.options[:this].should == 'that'
+      end
+    end
+
   end
-end
\ No newline at end of file
+end</diff>
      <filename>vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,12 @@ module Spec
       
       it 'should raise an ExamplePendingError if no block is supplied' do
         lambda {
-          include Pending
           pending &quot;TODO&quot;
         }.should raise_error(ExamplePendingError, /TODO/)
       end
       
       it 'should raise an ExamplePendingError if a supplied block fails as expected' do
         lambda {
-          include Pending
           pending &quot;TODO&quot; do
             raise &quot;oops&quot;
           end
@@ -20,7 +18,6 @@ module Spec
       
       it 'should raise an ExamplePendingError if a supplied block fails as expected with a mock' do
         lambda {
-          include Pending
           pending &quot;TODO&quot; do
             m = mock('thing')
             m.should_receive(:foo)
@@ -31,12 +28,112 @@ module Spec
       
       it 'should raise a PendingExampleFixedError if a supplied block starts working' do
         lambda {
-          include Pending
           pending &quot;TODO&quot; do
             # success!
           end
         }.should raise_error(PendingExampleFixedError, /TODO/)
       end
+      
+      it &quot;should have the correct file and line number for pending given with a block which fails&quot; do
+        file = __FILE__
+        line_number = __LINE__ + 2
+        begin
+          pending do
+            raise
+          end
+        rescue =&gt; error
+          error.pending_caller.should == &quot;#{file}:#{line_number}&quot;
+        end
+      end
+      
+      it &quot;should have the correct file and line number for pending given with no block&quot; do
+        file = __FILE__
+        line_number = __LINE__ + 2
+        begin
+          pending(&quot;TODO&quot;)
+        rescue =&gt; error
+          error.pending_caller.should == &quot;#{file}:#{line_number}&quot;
+        end
+      end
+    end
+    
+    describe ExamplePendingError do
+      it &quot;should have the caller (from two calls from initialization)&quot; do
+        two_calls_ago = caller[0]
+        ExamplePendingError.new(&quot;a message&quot;).pending_caller.should == two_calls_ago
+      end
+      
+      it &quot;should keep the trace information from initialization&quot; do
+        two_calls_ago = caller[0]
+        obj = ExamplePendingError.new(&quot;a message&quot;)
+        obj.pending_caller
+        def another_caller(obj)
+          obj.pending_caller
+        end
+        
+        another_caller(obj).should == two_calls_ago
+      end
+      
+      it &quot;should have the message provided&quot; do
+        ExamplePendingError.new(&quot;a message&quot;).message.should == &quot;a message&quot;
+      end
+
+      it &quot;should use a 'ExamplePendingError' as it's default message&quot; do
+        ExamplePendingError.new.message.should == &quot;Spec::Example::ExamplePendingError&quot;
+      end
+    end
+    
+    describe NotYetImplementedError do
+      def rspec_root
+        File.expand_path(__FILE__.gsub(&quot;/spec/spec/example/pending_module_spec.rb&quot;, &quot;/lib&quot;))
+      end
+      
+      it &quot;should have the root rspec path&quot; do
+        NotYetImplementedError::RSPEC_ROOT_LIB.should == rspec_root
+      end
+      
+      it &quot;should always have the error 'Not Yet Implemented'&quot; do
+        NotYetImplementedError.new([]).message.should == &quot;Not Yet Implemented&quot;
+      end
+      
+      describe &quot;pending_caller&quot; do
+        it &quot;should select an element out of the backtrace&quot; do
+          error = NotYetImplementedError.new([&quot;foo/bar.rb:18&quot;])
+          
+          error.pending_caller.should == &quot;foo/bar.rb:18&quot;
+        end
+        
+        it &quot;should actually report the element from the backtrace&quot; do
+          error = NotYetImplementedError.new([&quot;bar.rb:18&quot;])
+          
+          error.pending_caller.should == &quot;bar.rb:18&quot;
+        end
+        
+        it &quot;should not use an element with the rspec root path&quot; do
+          error = NotYetImplementedError.new([&quot;#{rspec_root}:8&quot;])
+          
+          error.pending_caller.should be_nil
+        end
+        
+        it &quot;should select the first line in the backtrace which isn't in the rspec root&quot; do
+          error = NotYetImplementedError.new([
+            &quot;#{rspec_root}/foo.rb:2&quot;,
+            &quot;#{rspec_root}/foo/bar.rb:18&quot;,
+            &quot;path1.rb:22&quot;,
+            &quot;path2.rb:33&quot;
+          ])
+          
+          error.pending_caller.should == &quot;path1.rb:22&quot;
+        end
+        
+        it &quot;should cache the caller&quot; 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>
      <filename>vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,262 +3,254 @@ require File.dirname(__FILE__) + '/../../spec_helper'
 module Spec
   module Example
     describe ExampleGroup, &quot;with :shared =&gt; true&quot; do
-      it_should_behave_like &quot;sandboxed rspec_options&quot;
-      attr_reader :formatter, :example_group
-      before(:each) do
-        @formatter = Spec::Mocks::Mock.new(&quot;formatter&quot;, :null_object =&gt; true)
-        options.formatters &lt;&lt; formatter
-        @example_group = Class.new(ExampleGroup).describe(&quot;example_group&quot;)
-        class &lt;&lt; example_group
-          public :include
+      with_sandboxed_options do
+        attr_reader :formatter, :example_group
+        before(:each) do
+          @formatter = Spec::Mocks::Mock.new(&quot;formatter&quot;, :null_object =&gt; true)
+          options.formatters &lt;&lt; formatter
+          @example_group = Class.new(ExampleGroup).describe(&quot;example_group&quot;)
+          class &lt;&lt; example_group
+            public :include
+          end
         end
-      end
-
-      after(:each) do
-        @formatter.rspec_verify
-        @example_group = nil
-        $shared_example_groups.clear unless $shared_example_groups.nil?
-      end
-
-      def make_shared_example_group(name, opts=nil, &amp;block)
-        example_group = SharedExampleGroup.new(name, :shared =&gt; true, &amp;block)
-        SharedExampleGroup.add_shared_example_group(example_group)
-        example_group
-      end
-
-      def non_shared_example_group()
-        @non_shared_example_group ||= Class.new(ExampleGroup).describe(&quot;example_group&quot;)
-      end
-
-      it &quot;should accept an optional options hash&quot; do
-        lambda { Class.new(ExampleGroup).describe(&quot;context&quot;) }.should_not raise_error(Exception)
-        lambda { Class.new(ExampleGroup).describe(&quot;context&quot;, :shared =&gt; true) }.should_not raise_error(Exception)
-      end
 
-      it &quot;should return all shared example_groups&quot; do
-        b1 = make_shared_example_group(&quot;b1&quot;, :shared =&gt; true) {}
-        b2 = make_shared_example_group(&quot;b2&quot;, :shared =&gt; true) {}
+        after(:each) do
+          @formatter.rspec_verify
+          @example_group = nil
+          Spec::Example::SharedExampleGroup.clear
+        end
+        
+        describe &quot;#register&quot; do
+          it &quot;creates a new shared example group with the submitted args&quot; do
+            block = lambda {}
+            group = SharedExampleGroup.new(&quot;shared group&quot;) do end
+            Spec::Example::SharedExampleGroup.should_receive(:new).with(&quot;share me&quot;, &amp;block).and_return(group)
+            Spec::Example::SharedExampleGroup.register(&quot;share me&quot;, &amp;block)
+          end
 
-        b1.should_not be(nil)
-        b2.should_not be(nil)
+          it &quot;registers the shared example group&quot; do
+            lambda do
+              Spec::Example::SharedExampleGroup.register &quot;share me&quot; do end
+            end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+          end
+        end
 
-        SharedExampleGroup.find_shared_example_group(&quot;b1&quot;).should equal(b1)
-        SharedExampleGroup.find_shared_example_group(&quot;b2&quot;).should equal(b2)
-      end
+        it &quot;complains when adding a second shared example_group with the same description&quot; do
+          describe &quot;shared example_group&quot;, :shared =&gt; true do
+          end
+          lambda do
+            describe &quot;shared example_group&quot;, :shared =&gt; true do
+            end
+          end.should raise_error(ArgumentError)
+        end
+        
+        it &quot;does NOT add the same group twice&quot; do
+          lambda do
+            2.times do
+              describe &quot;shared example_group which gets loaded twice&quot;, :shared =&gt; true do
+              end
+            end
+          end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+        end
 
-      it &quot;should register as shared example_group&quot; do
-        example_group = make_shared_example_group(&quot;example_group&quot;) {}
-        SharedExampleGroup.shared_example_groups.should include(example_group)
-      end
+        it &quot;does NOT complain when adding the same shared example_group again (i.e. file gets reloaded)&quot; do
+          lambda do
+            2.times do
+              describe &quot;shared example_group which gets loaded twice&quot;, :shared =&gt; true do
+              end
+            end
+          end.should_not raise_error(ArgumentError)
+        end
 
-      it &quot;should not be shared when not configured as shared&quot; do
-        example_group = non_shared_example_group
-        SharedExampleGroup.shared_example_groups.should_not include(example_group)
-      end
+        it &quot;does NOT complain when adding the same shared example_group in same file with different absolute path&quot; do
+          SharedExampleGroup.register(
+            &quot;shared example_group&quot;,
+            :shared =&gt; true,
+            :spec_path =&gt; &quot;/my/spec/a/../shared.rb&quot;
+          )
+          SharedExampleGroup.register(
+            &quot;shared example_group&quot;,
+            :shared =&gt; true,
+            :spec_path =&gt; &quot;/my/spec/b/../shared.rb&quot;
+          )
+        end
 
-      it &quot;should complain when adding a second shared example_group with the same description&quot; do
-        describe &quot;shared example_group&quot;, :shared =&gt; true do
+        it &quot;complains when adding a different shared example_group with the same name in a different file with the same basename&quot; do
+          SharedExampleGroup.register(
+            &quot;shared example_group&quot;,
+            :shared =&gt; true,
+            :spec_path =&gt; &quot;/my/spec/a/shared.rb&quot;
+          )
+          lambda do
+            SharedExampleGroup.register(
+              &quot;shared example_group&quot;,
+              :shared =&gt; true,
+              :spec_path =&gt; &quot;/my/spec/b/shared.rb&quot;
+            )
+          end.should raise_error(ArgumentError, /already exists/)
         end
-        lambda do
-          describe &quot;shared example_group&quot;, :shared =&gt; true do
+
+        it &quot;adds examples to current example_group using it_should_behave_like&quot; do
+          shared_example_group = SharedExampleGroup.register(&quot;shared example_group&quot;) do
+            it(&quot;shared example&quot;) {}
+            it(&quot;shared example 2&quot;) {}
           end
-        end.should raise_error(ArgumentError)
-      end
 
-      it &quot;should NOT complain when adding the same shared example_group instance again&quot; do
-        shared_example_group = Class.new(ExampleGroup).describe(&quot;shared example_group&quot;, :shared =&gt; true)
-        SharedExampleGroup.add_shared_example_group(shared_example_group)
-        SharedExampleGroup.add_shared_example_group(shared_example_group)
-      end
+          example_group.it(&quot;example&quot;) {}
+          example_group.number_of_examples.should == 1
+          example_group.it_should_behave_like(&quot;shared example_group&quot;)
+          example_group.number_of_examples.should == 3
+        end
 
-      it &quot;should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)&quot; do
-        lambda do
-          2.times do
-            describe &quot;shared example_group which gets loaded twice&quot;, :shared =&gt; true do
-            end
+        it &quot;adds examples to from two shared groups&quot; do
+          shared_example_group_1 = SharedExampleGroup.register(&quot;shared example_group 1&quot;) do
+            it(&quot;shared example 1&quot;) {}
           end
-        end.should_not raise_error(ArgumentError)
-      end
-
-      it &quot;should NOT complain when adding the same shared example_group in same file with different absolute path&quot; do
-        shared_example_group_1 = Class.new(ExampleGroup).describe(
-          &quot;shared example_group&quot;,
-          :shared =&gt; true,
-          :spec_path =&gt; &quot;/my/spec/a/../shared.rb&quot;
-        )
-        shared_example_group_2 = Class.new(ExampleGroup).describe(
-          &quot;shared example_group&quot;,
-          :shared =&gt; true,
-          :spec_path =&gt; &quot;/my/spec/b/../shared.rb&quot;
-        )
-
-        SharedExampleGroup.add_shared_example_group(shared_example_group_1)
-        SharedExampleGroup.add_shared_example_group(shared_example_group_2)
-      end
 
-      it &quot;should complain when adding a different shared example_group with the same name in a different file with the same basename&quot; do
-        shared_example_group_1 = Class.new(ExampleGroup).describe(
-          &quot;shared example_group&quot;,
-          :shared =&gt; true,
-          :spec_path =&gt; &quot;/my/spec/a/shared.rb&quot;
-        )
-        shared_example_group_2 = Class.new(ExampleGroup).describe(
-          &quot;shared example_group&quot;,
-          :shared =&gt; true,
-          :spec_path =&gt; &quot;/my/spec/b/shared.rb&quot;
-        )
-
-        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
+          shared_example_group_1 = SharedExampleGroup.register(&quot;shared example_group 2&quot;) do
+            it(&quot;shared example 2&quot;) {}
+          end
 
-      it &quot;should add examples to current example_group using it_should_behave_like&quot; do
-        shared_example_group = make_shared_example_group(&quot;shared example_group&quot;) do
-          it(&quot;shared example&quot;) {}
-          it(&quot;shared example 2&quot;) {}
+          example_group.it(&quot;example&quot;) {}
+          example_group.number_of_examples.should == 1
+          example_group.it_should_behave_like(&quot;shared example_group 1&quot;, &quot;shared example_group 2&quot;)
+          example_group.number_of_examples.should == 3
         end
 
-        example_group.it(&quot;example&quot;) {}
-        example_group.number_of_examples.should == 1
-        example_group.it_should_behave_like(&quot;shared example_group&quot;)
-        example_group.number_of_examples.should == 3
-      end
-
-      it &quot;should add examples to current example_group using include&quot; do
-        shared_example_group = describe &quot;all things&quot;, :shared =&gt; true do
-          it &quot;should do stuff&quot; do end
-        end
+        it &quot;adds examples to current example_group using include&quot; do
+          shared_example_group = describe &quot;all things&quot;, :shared =&gt; true do
+            it &quot;should do stuff&quot; do end
+          end
         
-        example_group = describe &quot;one thing&quot; do
-          include shared_example_group
-        end
+          example_group = describe &quot;one thing&quot; do
+            include shared_example_group
+          end
         
-        example_group.number_of_examples.should == 1
-      end
-
-      it &quot;should add examples to current example_group using it_should_behave_like with a module&quot; do
-        AllThings = describe &quot;all things&quot;, :shared =&gt; true do
-          it &quot;should do stuff&quot; do end
+          example_group.number_of_examples.should == 1
         end
+
+        it &quot;adds examples to current example_group using it_should_behave_like with a module&quot; do
+          AllThings = describe &quot;all things&quot;, :shared =&gt; true do
+            it &quot;should do stuff&quot; do end
+          end
         
-        example_group = describe &quot;one thing&quot; do
-          it_should_behave_like AllThings
-        end
+          example_group = describe &quot;one thing&quot; do
+            it_should_behave_like AllThings
+          end
         
-        example_group.number_of_examples.should == 1
-      end
-
-      it &quot;should run shared examples&quot; do
-        shared_example_ran = false
-        shared_example_group = make_shared_example_group(&quot;shared example_group&quot;) do
-          it(&quot;shared example&quot;) { shared_example_ran = true }
+          example_group.number_of_examples.should == 1
         end
 
-        example_ran = false
+        it &quot;runs shared examples&quot; do
+          shared_example_ran = false
+          shared_example_group = SharedExampleGroup.register(&quot;shared example_group&quot;) do
+            it(&quot;shared example&quot;) { shared_example_ran = true }
+          end
 
-        example_group.it_should_behave_like(&quot;shared example_group&quot;)
-        example_group.it(&quot;example&quot;) {example_ran = true}
-        example_group.run
-        example_ran.should be_true
-        shared_example_ran.should be_true
-      end
+          example_ran = false
 
-      it &quot;should run setup and teardown from shared example_group&quot; do
-        shared_setup_ran = false
-        shared_teardown_ran = false
-        shared_example_group = make_shared_example_group(&quot;shared example_group&quot;) do
-          before { shared_setup_ran = true }
-          after { shared_teardown_ran = true }
-          it(&quot;shared example&quot;) { shared_example_ran = true }
+          example_group.it_should_behave_like(&quot;shared example_group&quot;)
+          example_group.it(&quot;example&quot;) {example_ran = true}
+          example_group.run(options)
+          example_ran.should be_true
+          shared_example_ran.should be_true
         end
 
-        example_ran = false
+        it &quot;runs before(:each) and after(:each) from shared example_group&quot; do
+          shared_setup_ran = false
+          shared_teardown_ran = false
+          shared_example_group = SharedExampleGroup.register(&quot;shared example_group&quot;) do
+            before(:each) { shared_setup_ran = true }
+            after(:each)  { shared_teardown_ran = true }
+            it(&quot;shared example&quot;) { shared_example_ran = true }
+          end
 
-        example_group.it_should_behave_like(&quot;shared example_group&quot;)
-        example_group.it(&quot;example&quot;) {example_ran = true}
-        example_group.run
-        example_ran.should be_true
-        shared_setup_ran.should be_true
-        shared_teardown_ran.should be_true
-      end
+          example_ran = false
 
-      it &quot;should run before(:all) and after(:all) only once from shared example_group&quot; do
-        shared_before_all_run_count = 0
-        shared_after_all_run_count = 0
-        shared_example_group = make_shared_example_group(&quot;shared example_group&quot;) do
-          before(:all) { shared_before_all_run_count += 1}
-          after(:all) { shared_after_all_run_count += 1}
-          it(&quot;shared example&quot;) { shared_example_ran = true }
+          example_group.it_should_behave_like(&quot;shared example_group&quot;)
+          example_group.it(&quot;example&quot;) {example_ran = true}
+          example_group.run(options)
+          example_ran.should be_true
+          shared_setup_ran.should be_true
+          shared_teardown_ran.should be_true
         end
 
-        example_ran = false
-
-        example_group.it_should_behave_like(&quot;shared example_group&quot;)
-        example_group.it(&quot;example&quot;) {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 &quot;should run before(:all) and after(:all) only once from shared example_group&quot; do
+          shared_before_all_run_count = 0
+          shared_after_all_run_count = 0
+          shared_example_group = SharedExampleGroup.register(&quot;shared example_group&quot;) do
+            before(:all) { shared_before_all_run_count += 1}
+            after(:all)  { shared_after_all_run_count += 1}
+            it(&quot;shared example&quot;) { shared_example_ran = true }
+          end
 
-      it &quot;should include modules, included into shared example_group, into current example_group&quot; do
-        @formatter.should_receive(:add_example_group).with(any_args)
+          example_ran = false
 
-        shared_example_group = make_shared_example_group(&quot;shared example_group&quot;) do
-          it(&quot;shared example&quot;) { shared_example_ran = true }
+          example_group.it_should_behave_like(&quot;shared example_group&quot;)
+          example_group.it(&quot;example&quot;) {example_ran = true}
+          example_group.run(options)
+          example_ran.should be_true
+          shared_before_all_run_count.should == 1
+          shared_after_all_run_count.should == 1
         end
 
-        mod1_method_called = false
-        mod1 = Module.new do
-          define_method :mod1_method do
-            mod1_method_called = true
+        it &quot;should include modules, included into shared example_group, into current example_group&quot; do
+          @formatter.should_receive(:add_example_group).with(any_args)
+
+          shared_example_group = SharedExampleGroup.register(&quot;shared example_group&quot;) do
+            it(&quot;shared example&quot;) { shared_example_ran = true }
           end
-        end
 
-        mod2_method_called = false
-        mod2 = Module.new do
-          define_method :mod2_method do
-            mod2_method_called = true
+          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
-        end
 
-        shared_example_group.include mod2
+          shared_example_group.__send__ :include, mod2
 
-        example_group.