<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/any_instance.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/any_instance/any_instance_proxy.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/any_instance/method_stubber.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/any_instance/methods.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/extensions.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/extensions/class.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/mocks/framework.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/mocks/any_instance_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/stories/mock_framework_integration/stories.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/stories/mock_framework_integration/use_flexmock.story</filename>
    </added>
    <added>
      <filename>vendor/plugins/rspec/stories/resources/spec/spec_with_flexmock.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,6 @@
 --colour
 --format
-profile
+nested
 --loadby
 mtime
 --reverse</diff>
      <filename>spec/spec.opts</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 --- 
 format: 1
 handler: 
-  piston:remote-revision: 1545
+  piston:remote-revision: 1588
   piston:uuid: af276e61-6b34-4dac-905b-574b5f35ef33
 repository_url: http://pivotalrb.rubyforge.org/svn/polonium/trunk
 lock: false</diff>
      <filename>vendor/plugins/polonium/.piston.yml</filename>
    </modified>
    <modified>
      <diff>@@ -37,7 +37,7 @@ PKG_FILES = FileList[
 spec = Gem::Specification.new do |s|
   s.name = PKG_NAME
   s.version = PKG_VERSION
-  s.summary = &quot;Selenium RC with enhanced assertions that also runs your rails app.&quot;
+  s.summary = &quot;Selenium RC with Rails integration and enhanced assertions.&quot;
   s.test_files = &quot;spec/spec_suite.rb&quot;
   s.description = s.summary
 </diff>
      <filename>vendor/plugins/polonium/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -17,8 +17,7 @@ module Polonium
     end
 
     def assert_value(expected_value)
-      assert_element_present
-      wait_for do |configuration|
+      wait_for_element do |configuration|
         actual_value = driver.get_value(locator)
         configuration.message = &quot;Expected '#{locator}' to be '#{expected_value}' but was '#{actual_value}'&quot;
         has_value? expected_value, actual_value
@@ -26,9 +25,8 @@ module Polonium
     end
 
     def assert_attribute(expected_name, expected_value)
-      assert_element_present
       attr_locator = &quot;#{locator}@#{expected_name}&quot;
-      wait_for do |configuration|
+      wait_for_element do |configuration|
         actual = driver.get_attribute(attr_locator)  #todo: actual value
         configuration.message = &quot;Expected attribute '#{attr_locator}' to be '#{expected_value}' but was '#{actual}'&quot;
         values_match? actual, expected_value
@@ -36,9 +34,8 @@ module Polonium
     end
 
     def assert_attribute_does_not_contain(attribute_name, illegal_value)
-      assert_element_present
       attr_locator = &quot;#{locator}@#{attribute_name}&quot;
-      wait_for do |configuration|
+      wait_for_element do |configuration|
         actual = driver.get_attribute(attr_locator)  #todo: actual value
         configuration.message = &quot;Expected attribute '#{attr_locator}' to not contain '#{illegal_value}' but was '#{actual}'&quot;
         !actual.match(illegal_value)
@@ -46,8 +43,7 @@ module Polonium
     end
 
     def assert_selected(expected_value)
-      assert_element_present
-      wait_for do |configuration|
+      wait_for_element do |configuration|
         actual = driver.get_selected_label(locator)
         configuration.message = &quot;Expected '#{locator}' to be selected with '#{expected_value}' but was '#{actual}&quot;
         values_match? actual, expected_value
@@ -55,42 +51,37 @@ module Polonium
     end
 
     def assert_visible(options={})
-      assert_element_present
       options = {
         :message =&gt; &quot;Expected '#{locator}' to be visible, but it wasn't&quot;
       }.merge(options)
-      wait_for(options) do
+      wait_for_element(options) do
         driver.is_visible(locator)
       end
     end
 
     def assert_not_visible(options={})
-      assert_element_present
       options = {
         :message =&gt; &quot;Expected '#{locator}' to be hidden, but it wasn't&quot;
       }.merge(options)
-      wait_for(options) do
+      wait_for_element(options) do
         !driver.is_visible(locator)
       end
     end
 
     def assert_checked
-      assert_element_present
-      wait_for(:message =&gt; &quot;Expected '#{locator}' to be checked&quot;) do
+      wait_for_element(:message =&gt; &quot;Expected '#{locator}' to be checked&quot;) do
         driver.is_checked(locator)
       end
     end
 
     def assert_not_checked
-      assert_element_present
-      wait_for(:message =&gt; &quot;Expected '#{locator}' to not be checked&quot;) do
+      wait_for_element(:message =&gt; &quot;Expected '#{locator}' to not be checked&quot;) do
         !driver.is_checked(locator)
       end
     end
 
     def assert_text(expected_text, options={})
-      assert_element_present
-      wait_for(options) do |configuration|
+      wait_for_element(options) do |configuration|
         actual = driver.get_text(locator)
         configuration.message = &quot;Expected text '#{expected_text}' to be full contents of #{locator} but was '#{actual}')&quot;
         values_match? actual, expected_text
@@ -99,34 +90,32 @@ module Polonium
 
     def assert_contains(expected_text, options={})
       return assert_contains_in_order(*expected_text) if expected_text.is_a? Array
-      assert_element_present
-      options = {
-        :message =&gt; &quot;#{locator} should contain #{expected_text}&quot;
-      }.merge(options)
-      wait_for(options) do
-        contains?(expected_text)
+      wait_for_element(options) do |configuration|
+        if contains?(expected_text)
+          true
+        else
+          configuration.message = &quot;#{locator} should contain #{expected_text}&quot;
+          false
+        end
       end
     end
 
     def assert_does_not_contain(expected_text, options={})
-      assert_element_present
-      wait_for(options) do
+      wait_for_element(options) do
         !contains?(expected_text)
       end
     end
 
     def assert_next_sibling(expected_sibling_id, options = {})
-      assert_element_present
       eval_js = &quot;this.page().findElement('#{locator}').nextSibling.id&quot;
-      wait_for(:message =&gt; &quot;id '#{locator}' should be next to '#{expected_sibling_id}'&quot;) do
+      wait_for_element(:message =&gt; &quot;id '#{locator}' should be next to '#{expected_sibling_id}'&quot;) do
         actual_sibling_id = driver.get_eval(eval_js)
         expected_sibling_id == actual_sibling_id
       end
     end
 
     def assert_contains_in_order(*text_fragments)
-      assert_element_present
-      wait_for do |configuration|
+      wait_for_element do |configuration|
         success = false
 
         html = driver.get_text(locator)
@@ -151,9 +140,8 @@ module Polonium
     end
     
     def assert_number_of_children(expected_number)
-      assert_element_present
       eval_js = &quot;this.page().findElement('#{locator}').childNodes.length&quot;
-      wait_for(:message =&gt; &quot;id '#{locator}' should contain exactly #{expected_number} children&quot;) do
+      wait_for_element(:message =&gt; &quot;id '#{locator}' should contain exactly #{expected_number} children&quot;) do
         actual_number = driver.get_eval(eval_js)
         expected_number == actual_number.to_i
       end
@@ -199,6 +187,18 @@ module Polonium
     end
 
     protected
+    def wait_for_element(options={})
+      wait_for(options) do |configuration|
+        if is_present?
+          configuration.message = &quot;&quot;
+          yield(configuration)
+        else
+          configuration.message = &quot;Expected element '#{locator}' to be present, but it was not&quot;
+          false
+        end
+      end
+    end
+
     def method_missing(method_name, *args, &amp;blk)
       if driver.respond_to?(method_name)
         driver_args = [locator] + args</diff>
      <filename>vendor/plugins/polonium/lib/polonium/element.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,10 @@ module Polonium
       configuration = Context.new(message)
       begin_time = time_class.now
       while (time_class.now - begin_time) &lt; timeout
-        return if yield(configuration)
+        if value = yield(configuration)
+          return value
+        end
+        return value if value
         sleep 0.25
       end
       flunk(configuration.message + &quot; (after #{timeout} sec)&quot;)</diff>
      <filename>vendor/plugins/polonium/lib/polonium/wait_for.rb</filename>
    </modified>
    <modified>
      <diff>@@ -109,7 +109,7 @@ module Polonium
 
     describe &quot;#assert_value&quot; do
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -121,7 +121,7 @@ module Polonium
       end
 
       it &quot;fails when element is present and not expected value&quot; do
-        mock(driver).is_element_present(element_locator) {true}
+        stub(driver).is_element_present(element_locator) {true}
         stub(driver).get_value(element_locator) {&quot;jane&quot;}
         proc do
           element.assert_value(&quot;joe&quot;)
@@ -150,7 +150,7 @@ module Polonium
 
     describe &quot;#assert_attribute&quot; do
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -209,7 +209,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -246,7 +246,7 @@ module Polonium
       end
 
       it &quot;passes when element exists and is visible&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -279,7 +279,7 @@ module Polonium
       end
 
       it &quot;passes when element exists and is not visible&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -312,7 +312,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -345,7 +345,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -378,7 +378,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(element_locator) do
           element_ticks.shift
         end.times(4)
@@ -417,7 +417,7 @@ module Polonium
 
       describe &quot;when passed a String&quot; do
         it &quot;passes when element is present and the element contains text&quot; do
-          element_ticks = [false, false, false, true]
+          element_ticks = [true, true, true, true]
           mock(driver).is_element_present(element_locator) do
             element_ticks.shift
           end.times(4)
@@ -439,7 +439,7 @@ module Polonium
 
       describe &quot;when passed a Regexp&quot; do
         it &quot;passes when element is present and the element contains text that matches the regexp&quot; do
-          element_ticks = [false, false, false, true]
+          element_ticks = [true, true, true, true]
           mock(driver).is_element_present(element_locator) do
             element_ticks.shift
           end.times(4)
@@ -484,7 +484,7 @@ module Polonium
 
       describe &quot;when passed a String&quot; do
         it &quot;passes when element is present and the element does not contain text&quot; do
-          element_ticks = [false, false, false, true]
+          element_ticks = [true, true, true, true]
           mock(driver).is_element_present(element_locator) do
             element_ticks.shift
           end.times(4)
@@ -506,7 +506,7 @@ module Polonium
 
       describe &quot;when passed a Regexp&quot; do
         it &quot;passes when element is present and the element does not contain text that matches the Regexp&quot; do
-          element_ticks = [false, false, false, true]
+          element_ticks = [true, true, true, true]
           mock(driver).is_element_present(element_locator) do
             element_ticks.shift
           end.times(4)
@@ -541,7 +541,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and value is expected value&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(@element_locator) do
           element_ticks.shift
         end.times(4)
@@ -575,7 +575,7 @@ module Polonium
       end
 
       it &quot;passes when element is present and passed in text and Regexp matches are in order&quot; do
-        element_ticks = [false, false, false, true]
+        element_ticks = [true, true, true, true]
         mock(driver).is_element_present(@element_locator) do
           element_ticks.shift
         end.times(4)</diff>
      <filename>vendor/plugins/polonium/spec/polonium/element_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -49,16 +49,26 @@ module Polonium
     end
 
     describe &quot;#wait_for&quot; do
-      it &quot;should pass when the block returns true within time limit&quot; do
-        test_case.wait_for(:timeout =&gt; 2) do
-          true
+      describe &quot;when the block returns true within time limit&quot; do
+        it &quot;does not raise an error&quot; do
+          test_case.wait_for(:timeout =&gt; 2) do
+            true
+          end
+        end
+
+        it &quot;returns the value of the evaluated block&quot; do
+          test_case.wait_for(:timeout =&gt; 2) do
+            99
+          end.should == 99
         end
       end
 
-      it &quot;should raise a AssertionFailedError when block times out&quot; do
-        proc do
-          test_case.wait_for(:timeout =&gt; 2) {false}
-        end.should raise_error(Test::Unit::AssertionFailedError, &quot;Timeout exceeded (after 2 sec)&quot;)
+      describe &quot;when block times out&quot; do
+        it &quot;raises a AssertionFailedError&quot; do
+          proc do
+            test_case.wait_for(:timeout =&gt; 2) {false}
+          end.should raise_error(Test::Unit::AssertionFailedError, &quot;Timeout exceeded (after 2 sec)&quot;)
+        end
       end
     end
 
@@ -510,7 +520,7 @@ module Polonium
       end
 
       it &quot;fails when element is not visible&quot; do
-        mock(driver).is_element_present(sample_locator) {true}
+        stub(driver).is_element_present(sample_locator) {true}
         stub(driver).is_visible.returns {false}
 
         proc {
@@ -535,7 +545,7 @@ module Polonium
       end
 
       it &quot;fails when element is visible&quot; do
-        mock(driver).is_element_present(sample_locator) {true}
+        stub(driver).is_element_present(sample_locator) {true}
         stub(driver).is_visible(sample_locator) {true}
 
         proc {</diff>
      <filename>vendor/plugins/polonium/spec/polonium/test_case_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,24 +15,6 @@ require File.dirname(__FILE__) + &quot;/polonium/test_case_spec_helper&quot;
 
 Test::Unit.run = true
 
-ProcessStub = Struct.new :host, :port, :name, :cmd, :logdir, :is_running unless Object.const_defined?(:ProcessStub)
-ProcessStub.class_eval do
-  def is_running?
-    self.is_running
-  end
-  def say(msg, options = {})
-  end
-  def run
-    false
-  end
-  def start
-    self.is_running = true
-  end
-  def stop
-    self.is_running = false
-  end
-end
-
 Spec::Runner.configure do |config|
   config.mock_with :rr
 end</diff>
      <filename>vendor/plugins/polonium/spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 --- 
 format: 1
 handler: 
-  commit: d5180adac27ffd4abe58aca9d448a9cd9ca711d5
+  commit: c5b1a092a9d19e54461e51cf1ea2e73e278d3eda
 repository_url: git://github.com/dchelimsky/rspec-rails.git
 lock: false
 repository_class: Piston::Git::Repository</diff>
      <filename>vendor/plugins/rspec-rails/.piston.yml</filename>
    </modified>
    <modified>
      <diff>@@ -212,43 +212,29 @@ module Spec
             end
           end
           
-          private
-            def matching_message_expectation_exists(options)
-              expect_render_mock_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)
-            end
-          
-          public
-          if self.respond_to?(:should_receive) &amp;&amp; self.respond_to?(:stub!)
-            self.send :alias_method, :orig_should_receive, :should_receive
-            self.send :alias_method, :orig_stub!, :stub!
-            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):
+          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)
+      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
-                orig_should_receive(*args)
-              end
+      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
-            def stub!(*args)
-              if args[0] == :render
-                raise_with_disable_message(&quot;stub!&quot;, &quot;stub_render&quot;)
-              else
-                orig_stub!(*args)
-              end
+          end
+          def stub!(*args)
+            if args[0] == :render
+              raise_with_disable_message(&quot;stub!&quot;, &quot;stub_render&quot;)
+            else
+              super
             end
           end
 
@@ -267,6 +253,15 @@ module Spec
           def integrate_views?
             @integrate_views
           end
+
+          def matching_message_expectation_exists(options)
+            expect_render_mock_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)
+          end
+        
         end
 
         Spec::Example::ExampleGroupFactory.register(:controller, self)</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/controller_example_group.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-require 'spec/mocks'
+require 'spec/mocks/framework'
 
 module Spec
   module Rails</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/example/render_observer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module Spec
   module Rails
     module VERSION #:nodoc:
-      BUILD_TIME_UTC = 20080522075859
+      BUILD_TIME_UTC = 20080525080528
     end
   end
 end</diff>
      <filename>vendor/plugins/rspec-rails/lib/spec/rails/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -120,6 +120,7 @@ require 'controller_spec_controller'
     end
 
     it &quot;should complain when calling stub!(:render) on the controller&quot; do
+      controller.extend Spec::Mocks::Methods
       lambda {
         controller.stub!(:render)
       }.should raise_error(RuntimeError, /stub!\(:render\) has been disabled/)</diff>
      <filename>vendor/plugins/rspec-rails/spec/rails/example/controller_spec_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 --- 
 format: 1
 handler: 
-  commit: e1bce2b4517a206dd08313652cf2f0b0cf740d4f
+  commit: 83f94bbc2431cf164c5cc2151b6e745cc004fd3d
 repository_url: git://github.com/dchelimsky/rspec.git
 lock: false
 repository_class: Piston::Git::Repository</diff>
      <filename>vendor/plugins/rspec/.piston.yml</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,8 @@ metaclass call with (class &lt;&lt; self; self; end) and all will be well.
 * Applied patch from Bob Cotton: Nested ExampleGroups do not have a spec_path. Closes #224.
 * Add before_suite and after_suite callbacks to ExampleGroupMethods and Options. Closes #210.
 * The after(:suite) callback lambda is passed a boolean representing whether the suite passed or failed
-* Added IndentedTextFormatter. Closes #366.
+* Added NestedTextFormatter. Closes #366.
+* decoupled mock framework from global extensions used by rspec - supports use of flexmock or mocha w/ rails
 
 == Version 1.1.3
 </diff>
      <filename>vendor/plugins/rspec/CHANGES</filename>
    </modified>
    <modified>
      <diff>@@ -25,4 +25,5 @@ describe &quot;A partial mock&quot; do
     MockableClass.msg_2
     MockableClass.msg_3
   end
+
 end</diff>
      <filename>vendor/plugins/rspec/examples/pure/partial_mock_example.rb</filename>
    </modified>
    <modified>
      <diff>@@ -114,7 +114,7 @@ EOF
     #
     #   string = &quot;string&quot;
     #   lambda {
-    #     string.reverse
+    #     string.reverse!
     #   }.should change { string }.from(&quot;string&quot;).to(&quot;gnirts&quot;)
     #
     #   lambda {</diff>
      <filename>vendor/plugins/rspec/lib/spec/matchers/change.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,4 @@
-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'
-
+require 'spec/mocks/framework'
 
 module Spec
   # == Mocks and Stubs</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks.rb</filename>
    </modified>
    <modified>
      <diff>@@ -92,6 +92,7 @@ module Spec
       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
@@ -104,6 +105,7 @@ module Spec
           def #{sym}(*args, &amp;block)
             __mock_proxy.message_received :#{sym}, *args, &amp;block
           end
+          #{visibility_string}
         EOF
       end
 
@@ -113,6 +115,18 @@ module Spec
         return @target.respond_to?(sym)
       end
 
+      def visibility(sym)
+        if Mock === @target
+          'public'
+        elsif target_metaclass.private_method_defined?(sym)
+          'private'
+        elsif target_metaclass.protected_method_defined?(sym)
+          'protected'
+        else
+          'public'
+        end
+      end
+
       def munge(sym)
         &quot;proxied_by_rspec__#{sym.to_s}&quot;.to_sym
       end</diff>
      <filename>vendor/plugins/rspec/lib/spec/mocks/proxy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,13 +5,15 @@ module Spec
     module Formatter
       class FailingExampleGroupsFormatter &lt; BaseTextFormatter
         def example_failed(example, counter, failure)
-          description_parts = @example_group.description_parts.collect do |description|
-            description =~ /(.*) \(druby.*\)$/ ? $1 : description
-          end
-          @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
+          if @example_group
+            description_parts = @example_group.description_parts.collect do |description|
+              description =~ /(.*) \(druby.*\)$/ ? $1 : description
+            end
+            @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
 
-          @output.flush
-          @example_group = nil
+            @output.flush
+            @example_group = nil
+          end
         end
 
         def dump_failure(counter, failure)</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,8 +8,8 @@ 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'],
-              'indented' =&gt; ['spec/runner/formatter/indented_text_formatter',          'Formatter::IndentedTextFormatter'],
-                     'i' =&gt; ['spec/runner/formatter/indented_text_formatter',          'Formatter::IndentedTextFormatter'],
+                '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'],
               'progress' =&gt; ['spec/runner/formatter/progress_bar_formatter',           'Formatter::ProgressBarFormatter'],</diff>
      <filename>vendor/plugins/rspec/lib/spec/runner/options.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,6 +11,12 @@ module Spec
           run_story_ignoring_scenarios(scenario.story, world)
           
           world.start_collecting_errors
+
+          unless scenario.body
+            @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, '') }
+            return true
+          end
+          
           world.instance_eval(&amp;scenario.body)
           if world.errors.empty?
             @listeners.each { |l| l.scenario_succeeded(scenario.story.title, scenario.name) }</diff>
      <filename>vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ module Spec
       TINY   = 3
       RELEASE_CANDIDATE = nil
 
-      BUILD_TIME_UTC = 20080522075859
+      BUILD_TIME_UTC = 20080525080528
 
       STRING = [MAJOR, MINOR, TINY].join('.')
       TAG = &quot;REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}&quot;.upcase.gsub(/\.|-/, '_')</diff>
      <filename>vendor/plugins/rspec/lib/spec/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,6 @@
 require File.expand_path(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;..&quot;, &quot;lib&quot;, &quot;spec&quot;, &quot;mocks&quot;))
+require 'spec/mocks/framework'
+require 'spec/mocks/extensions'
 
 module Spec
   module Plugins</diff>
      <filename>vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -102,5 +102,41 @@ module Spec
         lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError)
       end
     end
+
+    describe &quot;Method visibility when using partial mocks&quot; do
+      class MockableClass
+        def public_method
+          private_method
+          protected_method
+        end
+        protected
+        def protected_method; end
+        private
+        def private_method; end
+      end
+
+      before(:each) do
+        @object = MockableClass.new
+      end
+
+      it 'should keep public methods public' do
+        @object.should_receive(:public_method)
+        @object.public_methods.should include('public_method')
+        @object.public_method
+      end
+
+      it 'should keep private methods private' do
+        @object.should_receive(:private_method)
+        @object.private_methods.should include('private_method')
+        @object.public_method
+      end
+
+      it 'should keep protected methods protected' do
+        @object.should_receive(:protected_method)
+        @object.protected_methods.should include('protected_method')
+        @object.public_method
+      end
+
+    end
   end
 end</diff>
      <filename>vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -186,6 +186,16 @@ describe &quot;OptionParser&quot; do
     options = parse([&quot;--format&quot;, &quot;specdoc&quot;])
     options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
   end
+
+  it &quot;should use nested text formatter when format is s&quot; do
+    options = parse([&quot;--format&quot;, &quot;n&quot;])
+    options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
+  end
+
+  it &quot;should use nested text formatter when format is nested&quot; do
+    options = parse([&quot;--format&quot;, &quot;nested&quot;])
+    options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
+  end
   
   it &quot;should support diff option when format is not specified&quot; do
     options = parse([&quot;--diff&quot;])</diff>
      <filename>vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -182,8 +182,31 @@ module Spec
             # then
             success.should == true
           end
-          
-          
+        end
+
+        describe &quot;when a scenario has an empty body&quot; do
+          before(:each) do
+            @story = Story.new 'title', 'narrative' do end
+            @scenario = Scenario.new @story, 'scenario'
+            @scenario_runner = ScenarioRunner.new
+            @world = stub_everything
+          end
+
+          it &quot;should mark the scenario as pending&quot; do
+            mock_listener = stub('listener', :scenario_started =&gt; true)
+            @scenario_runner.add_listener mock_listener
+
+            mock_listener.should_receive(:scenario_pending).with('title', 'scenario', '')
+            @scenario_runner.run @scenario, @world
+          end
+
+          it &quot;should return true&quot; do
+            # when
+            success = @scenario_runner.run @scenario, @world
+
+            # then
+            success.should == true
+          end
         end
       end
     end</diff>
      <filename>vendor/plugins/rspec/spec/spec/story/runner/scenario_runner_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 require File.join(File.dirname(__FILE__), *%w[helper])
 
-[&quot;example_groups&quot;,&quot;interop&quot;].each do |dir|
+%w[example_groups interop mock_framework_integration].each do |dir|
   require File.join(File.dirname(__FILE__), &quot;#{dir}/stories&quot;)
 end</diff>
      <filename>vendor/plugins/rspec/stories/all.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7ac763592449ef25d8ac2e1dfe6dafa45bf8f86d</id>
    </parent>
  </parents>
  <author>
    <name>Brian Takita</name>
    <email>brian.takita@gmail.com</email>
  </author>
  <url>http://github.com/btakita/pain-point/commit/ca9a65e7110ccaa37175c741e1cea1aaa9776180</url>
  <id>ca9a65e7110ccaa37175c741e1cea1aaa9776180</id>
  <committed-date>2008-05-25T01:18:22-07:00</committed-date>
  <authored-date>2008-05-25T01:18:22-07:00</authored-date>
  <message>Updated rspec, rspec-rails, and polonium. Update to rspec fixes nested formatter.</message>
  <tree>bae7de1b619c3d0296c3953e1890da9262c1c6bd</tree>
  <committer>
    <name>Brian Takita</name>
    <email>brian.takita@gmail.com</email>
  </committer>
</commit>
