rspec-rails 2.0.0.beta.22 → 2.0.0.rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.md +9 -0
- data/Thorfile +41 -0
- data/lib/generators/rspec/controller/controller_generator.rb +2 -2
- data/lib/generators/rspec/helper/helper_generator.rb +2 -2
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +9 -0
- data/lib/generators/rspec/scaffold/templates/edit_spec.rb +9 -0
- data/lib/generators/rspec/scaffold/templates/index_spec.rb +5 -0
- data/lib/generators/rspec/scaffold/templates/new_spec.rb +9 -0
- data/lib/generators/rspec/scaffold/templates/show_spec.rb +5 -0
- data/lib/rspec-rails.rb +4 -2
- data/lib/rspec/rails/example/controller_example_group.rb +1 -0
- data/lib/rspec/rails/example/helper_example_group.rb +1 -1
- data/lib/rspec/rails/matchers.rb +1 -0
- data/lib/rspec/rails/matchers/be_new_record.rb +5 -0
- data/lib/rspec/rails/mocks.rb +91 -65
- data/lib/rspec/rails/version.rb +1 -1
- data/lib/rspec/rails/view_assigns.rb +13 -4
- data/rspec-rails.gemspec +1 -1
- data/spec/rspec/rails/example/controller_example_group_spec.rb +22 -5
- data/spec/rspec/rails/example/helper_example_group_spec.rb +1 -1
- data/spec/rspec/rails/example/view_example_group_spec.rb +1 -1
- data/spec/rspec/rails/matchers/be_new_record_spec.rb +17 -0
- data/spec/rspec/rails/mocks/ar_classes.rb +1 -0
- data/spec/rspec/rails/mocks/mock_model_spec.rb +11 -9
- data/spec/rspec/rails/mocks/stub_model_spec.rb +117 -68
- metadata +20 -15
    
        data/History.md
    CHANGED
    
    | @@ -1,5 +1,14 @@ | |
| 1 1 | 
             
            ## rspec-rails release history (incomplete)
         | 
| 2 2 |  | 
| 3 | 
            +
            ### 2.0.0.rc / 2010-10-05
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [full changelog](http://github.com/rspec/rspec-rails/compare/v2.0.0.beta.22...v2.0.0.rc)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Enhancements
         | 
| 8 | 
            +
              * add --webrat-matchers flag to scaffold generator (for view specs)
         | 
| 9 | 
            +
              * separate ActiveModel and ActiveRecord APIs in mock_model and stub_model
         | 
| 10 | 
            +
              * ControllerExampleGroup uses controller as the implicit subject by default (Paul Rosania)
         | 
| 11 | 
            +
             | 
| 3 12 | 
             
            ### 2.0.0.beta.22 / 2010-09-12
         | 
| 4 13 |  | 
| 5 14 | 
             
            [full changelog](http://github.com/rspec/rspec-rails/compare/v2.0.0.beta.20...v2.0.0.beta.22)
         | 
    
        data/Thorfile
    ADDED
    
    | @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            class Rails < Thor
         | 
| 2 | 
            +
              VERSIONS = {
         | 
| 3 | 
            +
                :rails => {
         | 
| 4 | 
            +
                  "3.0.0" => "v3.0.0",
         | 
| 5 | 
            +
                  "master" => "master",
         | 
| 6 | 
            +
                  "3-0-stable" => "origin/3-0-stable"
         | 
| 7 | 
            +
                },
         | 
| 8 | 
            +
                :arel => {
         | 
| 9 | 
            +
                  "3.0.0" => "v1.0.0",
         | 
| 10 | 
            +
                  "master" => "master",
         | 
| 11 | 
            +
                  "3-0-stable" => "master"
         | 
| 12 | 
            +
                }
         | 
| 13 | 
            +
              }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              desc "checkout VERSION", "checks it out (and arel)"
         | 
| 16 | 
            +
              def checkout(version)
         | 
| 17 | 
            +
                unless VERSIONS[:rails].has_key?(version)
         | 
| 18 | 
            +
                  raise "\n#{"*"*50}\nvalid versions are: #{VERSIONS[:rails].keys.join(", ")}\n#{"*"*50}\n"
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                puts "***** checking out rails at #{VERSIONS[:rails][version]} ..."
         | 
| 22 | 
            +
                Dir.chdir("vendor/rails") do
         | 
| 23 | 
            +
                  `git checkout #{VERSIONS[:rails][version]}`
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                puts "***** checking out arel at #{VERSIONS[:arel][version]} ..."
         | 
| 27 | 
            +
                Dir.chdir("vendor/arel") do
         | 
| 28 | 
            +
                  `git checkout #{VERSIONS[:arel][version]}`
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              desc "fetch", "update vendor/rails and vendor/arel"
         | 
| 33 | 
            +
              def fetch
         | 
| 34 | 
            +
                Dir.chdir("vendor/rails") do
         | 
| 35 | 
            +
                  `git fetch`
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
                Dir.chdir("vendor/arel") do
         | 
| 38 | 
            +
                  `git fetch`
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| @@ -10,7 +10,7 @@ module Rspec | |
| 10 10 | 
             
                  class_option :view_specs,       :type => :boolean, :default => true
         | 
| 11 11 |  | 
| 12 12 | 
             
                  def create_controller_files
         | 
| 13 | 
            -
                    return unless options[: | 
| 13 | 
            +
                    return unless options[:controller_specs]
         | 
| 14 14 |  | 
| 15 15 | 
             
                    template 'controller_spec.rb',
         | 
| 16 16 | 
             
                             File.join('spec/controllers', class_path, "#{file_name}_controller_spec.rb")
         | 
| @@ -18,7 +18,7 @@ module Rspec | |
| 18 18 |  | 
| 19 19 | 
             
                  def create_view_files
         | 
| 20 20 | 
             
                    return if actions.empty?
         | 
| 21 | 
            -
                    return unless options[: | 
| 21 | 
            +
                    return unless options[:view_specs]
         | 
| 22 22 |  | 
| 23 23 | 
             
                    empty_directory File.join("spec", "views", file_path)
         | 
| 24 24 |  | 
| @@ -3,10 +3,10 @@ require 'generators/rspec' | |
| 3 3 | 
             
            module Rspec
         | 
| 4 4 | 
             
              module Generators
         | 
| 5 5 | 
             
                class HelperGenerator < Base
         | 
| 6 | 
            -
                  class_option : | 
| 6 | 
            +
                  class_option :helper_specs, :type => :boolean, :default => true
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def create_helper_files
         | 
| 9 | 
            -
                    return unless options[: | 
| 9 | 
            +
                    return unless options[:helper_specs]
         | 
| 10 10 |  | 
| 11 11 | 
             
                    template 'helper_spec.rb', File.join('spec/helpers', class_path, "#{file_name}_helper_spec.rb")
         | 
| 12 12 | 
             
                  end
         | 
| @@ -14,6 +14,7 @@ module Rspec | |
| 14 14 |  | 
| 15 15 | 
             
                  class_option :controller_specs, :type => :boolean, :default => true,  :desc => "Generate controller specs"
         | 
| 16 16 | 
             
                  class_option :view_specs,       :type => :boolean, :default => true,  :desc => "Generate view specs"
         | 
| 17 | 
            +
                  class_option :webrat_matchers,  :type => :boolean, :default => false, :desc => "Use webrat matchers in view specs"
         | 
| 17 18 | 
             
                  class_option :helper_specs,     :type => :boolean, :default => true,  :desc => "Generate helper specs"
         | 
| 18 19 | 
             
                  class_option :routing_specs,    :type => :boolean, :default => true,  :desc => "Generate routing specs"
         | 
| 19 20 |  | 
| @@ -49,6 +50,10 @@ module Rspec | |
| 49 50 |  | 
| 50 51 | 
             
                  protected
         | 
| 51 52 |  | 
| 53 | 
            +
                    def webrat?
         | 
| 54 | 
            +
                      options[:webrat_matchers] || @webrat_matchers_requested
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
             | 
| 52 57 | 
             
                    def copy_view(view)
         | 
| 53 58 | 
             
                      template "#{view}_spec.rb",
         | 
| 54 59 | 
             
                               File.join("spec/views", controller_file_path, "#{view}.html.#{options[:template_engine]}_spec.rb")
         | 
| @@ -126,6 +131,10 @@ module Rspec | |
| 126 131 | 
             
                      end
         | 
| 127 132 | 
             
                    end
         | 
| 128 133 |  | 
| 134 | 
            +
                    def banner
         | 
| 135 | 
            +
                      self.class.banner
         | 
| 136 | 
            +
                    end
         | 
| 137 | 
            +
             | 
| 129 138 | 
             
                end
         | 
| 130 139 | 
             
              end
         | 
| 131 140 | 
             
            end
         | 
| @@ -14,10 +14,19 @@ describe "<%= table_name %>/edit.html.<%= options[:template_engine] %>" do | |
| 14 14 | 
             
              it "renders the edit <%= file_name %> form" do
         | 
| 15 15 | 
             
                render
         | 
| 16 16 |  | 
| 17 | 
            +
            <% if webrat? -%>
         | 
| 17 18 | 
             
                rendered.should have_selector("form", :action => <%= file_name %>_path(@<%= file_name %>), :method => "post") do |form|
         | 
| 18 19 | 
             
            <% for attribute in output_attributes -%>
         | 
| 19 20 | 
             
                  form.should have_selector("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>", :name => "<%= file_name %>[<%= attribute.name %>]")
         | 
| 20 21 | 
             
            <% end -%>
         | 
| 21 22 | 
             
                end
         | 
| 23 | 
            +
            <% else -%>
         | 
| 24 | 
            +
                # Run the generator again with the --webrat-matchers flag if you want to use webrat matchers
         | 
| 25 | 
            +
                assert_select "form", :action => <%= file_name %>_path(@<%= file_name %>), :method => "post" do
         | 
| 26 | 
            +
            <% for attribute in output_attributes -%>
         | 
| 27 | 
            +
                  assert_select "<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>", :name => "<%= file_name %>[<%= attribute.name %>]"
         | 
| 28 | 
            +
            <% end -%>
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
            <% end -%>
         | 
| 22 31 | 
             
              end
         | 
| 23 32 | 
             
            end
         | 
| @@ -19,7 +19,12 @@ describe "<%= table_name %>/index.html.<%= options[:template_engine] %>" do | |
| 19 19 | 
             
              it "renders a list of <%= table_name %>" do
         | 
| 20 20 | 
             
                render
         | 
| 21 21 | 
             
            <% for attribute in output_attributes -%>
         | 
| 22 | 
            +
            <% if webrat? -%>
         | 
| 22 23 | 
             
                rendered.should have_selector("tr>td", :content => <%= value_for(attribute) %>.to_s, :count => 2)
         | 
| 24 | 
            +
            <% else -%>
         | 
| 25 | 
            +
                # Run the generator again with the --webrat-matchers flag if you want to use webrat matchers
         | 
| 26 | 
            +
                assert_select "tr>td", :text => <%= value_for(attribute) %>.to_s, :count => 2
         | 
| 27 | 
            +
            <% end -%>
         | 
| 23 28 | 
             
            <% end -%>
         | 
| 24 29 | 
             
              end
         | 
| 25 30 | 
             
            end
         | 
| @@ -14,10 +14,19 @@ describe "<%= table_name %>/new.html.<%= options[:template_engine] %>" do | |
| 14 14 | 
             
              it "renders new <%= file_name %> form" do
         | 
| 15 15 | 
             
                render
         | 
| 16 16 |  | 
| 17 | 
            +
            <% if webrat? -%>
         | 
| 17 18 | 
             
                rendered.should have_selector("form", :action => <%= table_name %>_path, :method => "post") do |form|
         | 
| 18 19 | 
             
            <% for attribute in output_attributes -%>
         | 
| 19 20 | 
             
                  form.should have_selector("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>", :name => "<%= file_name %>[<%= attribute.name %>]")
         | 
| 20 21 | 
             
            <% end -%>
         | 
| 21 22 | 
             
                end
         | 
| 23 | 
            +
            <% else -%>
         | 
| 24 | 
            +
                # Run the generator again with the --webrat-matchers flag if you want to use webrat matchers
         | 
| 25 | 
            +
                assert_select "form", :action => <%= table_name %>_path, :method => "post" do
         | 
| 26 | 
            +
            <% for attribute in output_attributes -%>
         | 
| 27 | 
            +
                  assert_select "<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>", :name => "<%= file_name %>[<%= attribute.name %>]"
         | 
| 28 | 
            +
            <% end -%>
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
            <% end -%>
         | 
| 22 31 | 
             
              end
         | 
| 23 32 | 
             
            end
         | 
| @@ -15,7 +15,12 @@ describe "<%= table_name %>/show.html.<%= options[:template_engine] %>" do | |
| 15 15 | 
             
              it "renders attributes in <p>" do
         | 
| 16 16 | 
             
                render
         | 
| 17 17 | 
             
            <% for attribute in output_attributes -%>
         | 
| 18 | 
            +
            <% if webrat? -%>
         | 
| 18 19 | 
             
                rendered.should contain(<%= value_for(attribute) %>.to_s)
         | 
| 20 | 
            +
            <% else -%>
         | 
| 21 | 
            +
                # Run the generator again with the --webrat-matchers flag if you want to use webrat matchers
         | 
| 22 | 
            +
                rendered.should match(/<%= eval(value_for(attribute)) %>/)
         | 
| 23 | 
            +
            <% end -%>
         | 
| 19 24 | 
             
            <% end -%>
         | 
| 20 25 | 
             
              end
         | 
| 21 26 | 
             
            end
         | 
    
        data/lib/rspec-rails.rb
    CHANGED
    
    | @@ -1,8 +1,10 @@ | |
| 1 1 | 
             
            module RSpec
         | 
| 2 2 | 
             
              module Rails
         | 
| 3 3 | 
             
                class Railtie < ::Rails::Railtie
         | 
| 4 | 
            -
                  config. | 
| 5 | 
            -
                  config. | 
| 4 | 
            +
                  # Rails-3.0.1 requires config.app_generators instead of 3.0.0's config.generators
         | 
| 5 | 
            +
                  generators = config.respond_to?(:app_generators) ? config.app_generators : config.generators
         | 
| 6 | 
            +
                  generators.integration_tool :rspec
         | 
| 7 | 
            +
                  generators.test_framework   :rspec
         | 
| 6 8 |  | 
| 7 9 | 
             
                  rake_tasks do
         | 
| 8 10 | 
             
                    load "rspec/rails/tasks/rspec.rake"
         | 
| @@ -49,7 +49,7 @@ module RSpec::Rails | |
| 49 49 | 
             
                  # Returns an instance of ActionView::Base with the helper being specified
         | 
| 50 50 | 
             
                  # mixed in, along with any of the built-in rails helpers.
         | 
| 51 51 | 
             
                  def helper
         | 
| 52 | 
            -
                    _view.tap {|v| v.assign( | 
| 52 | 
            +
                    _view.tap {|v| v.assign(view_assigns)}
         | 
| 53 53 | 
             
                  end
         | 
| 54 54 |  | 
| 55 55 | 
             
                private
         | 
    
        data/lib/rspec/rails/matchers.rb
    CHANGED
    
    | @@ -21,5 +21,6 @@ end | |
| 21 21 | 
             
            require 'rspec/rails/matchers/render_template'
         | 
| 22 22 | 
             
            require 'rspec/rails/matchers/redirect_to'
         | 
| 23 23 | 
             
            require 'rspec/rails/matchers/routing_matchers'
         | 
| 24 | 
            +
            require 'rspec/rails/matchers/be_new_record'
         | 
| 24 25 | 
             
            require 'rspec/rails/matchers/be_a_new'
         | 
| 25 26 | 
             
            require 'rspec/rails/matchers/have_extension'
         | 
    
        data/lib/rspec/rails/mocks.rb
    CHANGED
    
    | @@ -5,27 +5,27 @@ module RSpec | |
| 5 5 |  | 
| 6 6 | 
             
                module Mocks
         | 
| 7 7 |  | 
| 8 | 
            -
                  module  | 
| 9 | 
            -
                    def valid?
         | 
| 10 | 
            -
                      true
         | 
| 11 | 
            -
                    end
         | 
| 12 | 
            -
             | 
| 8 | 
            +
                  module ActiveModelInstanceMethods
         | 
| 13 9 | 
             
                    def as_new_record
         | 
| 10 | 
            +
                      self.stub(:persisted?) { false }
         | 
| 14 11 | 
             
                      self.stub(:id) { nil }
         | 
| 15 12 | 
             
                      self
         | 
| 16 13 | 
             
                    end
         | 
| 17 14 |  | 
| 18 | 
            -
                    def new_record?
         | 
| 19 | 
            -
                      !persisted?
         | 
| 20 | 
            -
                    end
         | 
| 21 | 
            -
             | 
| 22 15 | 
             
                    def persisted?
         | 
| 23 | 
            -
                       | 
| 16 | 
            +
                      true
         | 
| 24 17 | 
             
                    end
         | 
| 18 | 
            +
                  end
         | 
| 25 19 |  | 
| 20 | 
            +
                  module ActiveRecordInstanceMethods
         | 
| 26 21 | 
             
                    def destroy
         | 
| 22 | 
            +
                      self.stub(:persisted?) { false }
         | 
| 27 23 | 
             
                      self.stub(:id) { nil }
         | 
| 28 24 | 
             
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    def new_record?
         | 
| 27 | 
            +
                      !persisted?
         | 
| 28 | 
            +
                    end
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 |  | 
| 31 31 | 
             
                  # Creates a mock object instance for a +string_or_model_class+ with
         | 
| @@ -37,7 +37,7 @@ module RSpec | |
| 37 37 | 
             
                  #   * A String representing a Class that does not exist
         | 
| 38 38 | 
             
                  #   * A String representing a Class that extends ActiveModel::Naming
         | 
| 39 39 | 
             
                  #   * A Class that extends ActiveModel::Naming
         | 
| 40 | 
            -
                  def mock_model(string_or_model_class,  | 
| 40 | 
            +
                  def mock_model(string_or_model_class, stubs = {})
         | 
| 41 41 | 
             
                    if String === string_or_model_class
         | 
| 42 42 | 
             
                      if Object.const_defined?(string_or_model_class)
         | 
| 43 43 | 
             
                        model_class = Object.const_get(string_or_model_class)
         | 
| @@ -61,57 +61,71 @@ It received #{model_class.inspect} | |
| 61 61 | 
             
            EOM
         | 
| 62 62 | 
             
                    end
         | 
| 63 63 |  | 
| 64 | 
            -
                     | 
| 65 | 
            -
                     | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
                    })
         | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 64 | 
            +
                    stubs = stubs.reverse_merge(:id => next_id)
         | 
| 65 | 
            +
                    stubs = stubs.reverse_merge(:persisted? => !!stubs[:id])
         | 
| 66 | 
            +
                    stubs = stubs.reverse_merge(:destroyed? => false)
         | 
| 67 | 
            +
                    stubs = stubs.reverse_merge(:marked_for_destruction? => false)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    mock("#{model_class.name}_#{stubs[:id]}", stubs).tap do |m|
         | 
| 70 | 
            +
                      m.extend ActiveModelInstanceMethods
         | 
| 71 | 
            +
                      m.singleton_class.__send__ :include, ActiveModel::Conversion
         | 
| 72 | 
            +
                      m.singleton_class.__send__ :include, ActiveModel::Validations
         | 
| 73 | 
            +
                      if RSpec::Rails::using_active_record?
         | 
| 74 | 
            +
                        m.extend ActiveRecordInstanceMethods
         | 
| 75 | 
            +
                        [:save, :update_attributes].each do |key|
         | 
| 76 | 
            +
                          if stubs[key] == false
         | 
| 77 | 
            +
                            m.errors.stub(:empty?) { false }
         | 
| 78 | 
            +
                          end
         | 
| 79 | 
            +
                        end
         | 
| 78 80 | 
             
                      end
         | 
| 81 | 
            +
                      m.__send__(:__mock_proxy).instance_eval(<<-CODE, __FILE__, __LINE__)
         | 
| 82 | 
            +
                        def @object.is_a?(other)
         | 
| 83 | 
            +
                          #{model_class}.ancestors.include?(other)
         | 
| 84 | 
            +
                        end
         | 
| 85 | 
            +
                        def @object.kind_of?(other)
         | 
| 86 | 
            +
                          #{model_class}.ancestors.include?(other)
         | 
| 87 | 
            +
                        end
         | 
| 88 | 
            +
                        def @object.instance_of?(other)
         | 
| 89 | 
            +
                          other == #{model_class}
         | 
| 90 | 
            +
                        end
         | 
| 91 | 
            +
                        def @object.respond_to?(method_name)
         | 
| 92 | 
            +
                          #{model_class}.respond_to?(:column_names) && #{model_class}.column_names.include?(method_name.to_s) || super
         | 
| 93 | 
            +
                        end
         | 
| 94 | 
            +
                        def @object.class
         | 
| 95 | 
            +
                          #{model_class}
         | 
| 96 | 
            +
                        end
         | 
| 97 | 
            +
                        def @object.to_s
         | 
| 98 | 
            +
                          "#{model_class.name}_#{to_param}"
         | 
| 99 | 
            +
                        end
         | 
| 100 | 
            +
                      CODE
         | 
| 101 | 
            +
                      yield m if block_given?
         | 
| 79 102 | 
             
                    end
         | 
| 80 | 
            -
                    m.stub(:errors) { errors }
         | 
| 81 | 
            -
                    m.__send__(:__mock_proxy).instance_eval(<<-CODE, __FILE__, __LINE__)
         | 
| 82 | 
            -
                      def @object.is_a?(other)
         | 
| 83 | 
            -
                        #{model_class}.ancestors.include?(other)
         | 
| 84 | 
            -
                      end
         | 
| 85 | 
            -
                      def @object.kind_of?(other)
         | 
| 86 | 
            -
                        #{model_class}.ancestors.include?(other)
         | 
| 87 | 
            -
                      end
         | 
| 88 | 
            -
                      def @object.instance_of?(other)
         | 
| 89 | 
            -
                        other == #{model_class}
         | 
| 90 | 
            -
                      end
         | 
| 91 | 
            -
                      def @object.respond_to?(method_name)
         | 
| 92 | 
            -
                        #{model_class}.respond_to?(:column_names) && #{model_class}.column_names.include?(method_name.to_s) || super
         | 
| 93 | 
            -
                      end
         | 
| 94 | 
            -
                      def @object.class
         | 
| 95 | 
            -
                        #{model_class}
         | 
| 96 | 
            -
                      end
         | 
| 97 | 
            -
                      def @object.to_s
         | 
| 98 | 
            -
                        "#{model_class.name}_#{id}"
         | 
| 99 | 
            -
                      end
         | 
| 100 | 
            -
                    CODE
         | 
| 101 | 
            -
                    yield m if block_given?
         | 
| 102 | 
            -
                    m
         | 
| 103 103 | 
             
                  end
         | 
| 104 104 |  | 
| 105 | 
            -
                  module  | 
| 106 | 
            -
                    def  | 
| 107 | 
            -
                       | 
| 105 | 
            +
                  module ActiveModelStubExtensions
         | 
| 106 | 
            +
                    def as_new_record
         | 
| 107 | 
            +
                      self.stub(:persisted?)  { false }
         | 
| 108 | 
            +
                      self.stub(:id)          { nil }
         | 
| 109 | 
            +
                      self
         | 
| 108 110 | 
             
                    end
         | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            +
             | 
| 112 | 
            +
                    def persisted?
         | 
| 113 | 
            +
                      true
         | 
| 111 114 | 
             
                    end
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  module ActiveRecordStubExtensions
         | 
| 112 118 | 
             
                    def as_new_record
         | 
| 113 119 | 
             
                      self.__send__("#{self.class.primary_key}=", nil)
         | 
| 114 | 
            -
                       | 
| 120 | 
            +
                      super
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    def new_record?
         | 
| 124 | 
            +
                      !persisted?
         | 
| 125 | 
            +
                    end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                    def connection
         | 
| 128 | 
            +
                      raise RSpec::Rails::IllegalDataAccessException.new("stubbed models are not allowed to access the database")
         | 
| 115 129 | 
             
                    end
         | 
| 116 130 | 
             
                  end
         | 
| 117 131 |  | 
| @@ -121,12 +135,15 @@ EOM | |
| 121 135 | 
             
                  #   stub_model(Model, hash_of_stubs)
         | 
| 122 136 | 
             
                  #   stub_model(Model, instance_variable_name, hash_of_stubs)
         | 
| 123 137 | 
             
                  #
         | 
| 124 | 
            -
                  # Creates an instance of +Model+  | 
| 125 | 
            -
                  #  | 
| 126 | 
            -
                  #  | 
| 127 | 
            -
                  # | 
| 128 | 
            -
                  # key | 
| 129 | 
            -
                  #  | 
| 138 | 
            +
                  # Creates an instance of +Model+ with +to_param+ stubbed using a
         | 
| 139 | 
            +
                  # generated value that is unique to each object.. If +Model+ is an
         | 
| 140 | 
            +
                  # +ActiveRecord+ model, it is prohibited from accessing the database*.
         | 
| 141 | 
            +
                  #
         | 
| 142 | 
            +
                  # For each key in +hash_of_stubs+, if the model has a matching attribute
         | 
| 143 | 
            +
                  # (determined by asking it) are simply assigned the submitted values. If
         | 
| 144 | 
            +
                  # the model does not have a matching attribute, the key/value pair is
         | 
| 145 | 
            +
                  # assigned as a stub return value using RSpec's mocking/stubbing
         | 
| 146 | 
            +
                  # framework.
         | 
| 130 147 | 
             
                  #
         | 
| 131 148 | 
             
                  # <tt>new_record?</tt> is overridden to return the result of id.nil?
         | 
| 132 149 | 
             
                  # This means that by default new_record? will return false. If  you want
         | 
| @@ -151,16 +168,25 @@ EOM | |
| 151 168 | 
             
                  #
         | 
| 152 169 | 
             
                  #   stub_model(Person)
         | 
| 153 170 | 
             
                  #   stub_model(Person).as_new_record
         | 
| 154 | 
            -
                  #   stub_model(Person, : | 
| 171 | 
            +
                  #   stub_model(Person, :to_param => 37)
         | 
| 155 172 | 
             
                  #   stub_model(Person) do |person|
         | 
| 156 173 | 
             
                  #     person.first_name = "David"
         | 
| 157 174 | 
             
                  #   end
         | 
| 158 175 | 
             
                  def stub_model(model_class, stubs={})
         | 
| 159 | 
            -
                    primary_key = model_class.primary_key.to_sym
         | 
| 160 | 
            -
                    stubs = {primary_key => next_id}.merge(stubs)
         | 
| 161 176 | 
             
                    model_class.new.tap do |m|
         | 
| 162 | 
            -
                      m. | 
| 163 | 
            -
                       | 
| 177 | 
            +
                      m.extend ActiveModelStubExtensions
         | 
| 178 | 
            +
                      if RSpec::Rails::using_active_record? && model_class < ActiveRecord::Base
         | 
| 179 | 
            +
                        m.extend ActiveRecordStubExtensions
         | 
| 180 | 
            +
                        primary_key = model_class.primary_key.to_sym
         | 
| 181 | 
            +
                        stubs = stubs.reverse_merge(primary_key => next_id)
         | 
| 182 | 
            +
                        stubs = stubs.reverse_merge(:persisted? => !!stubs[primary_key])
         | 
| 183 | 
            +
                      else
         | 
| 184 | 
            +
                        stubs = stubs.reverse_merge(:id => next_id)
         | 
| 185 | 
            +
                        stubs = stubs.reverse_merge(:persisted? => !!stubs[:id])
         | 
| 186 | 
            +
                      end
         | 
| 187 | 
            +
                      stubs.each do |k,v|
         | 
| 188 | 
            +
                        m.__send__("#{k}=", stubs.delete(k)) if m.respond_to?("#{k}=")
         | 
| 189 | 
            +
                      end
         | 
| 164 190 | 
             
                      m.stub(stubs)
         | 
| 165 191 | 
             
                      yield m if block_given?
         | 
| 166 192 | 
             
                    end
         | 
    
        data/lib/rspec/rails/version.rb
    CHANGED
    
    
| @@ -13,15 +13,24 @@ module RSpec | |
| 13 13 | 
             
                      _encapsulated_assigns[key] = value
         | 
| 14 14 | 
             
                    end
         | 
| 15 15 |  | 
| 16 | 
            +
                    if ::Rails::VERSION::STRING == "3.0.0"
         | 
| 17 | 
            +
                      def _assigns
         | 
| 18 | 
            +
                        super.merge(_encapsulated_assigns)
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                      def view_assigns
         | 
| 21 | 
            +
                        _assigns
         | 
| 22 | 
            +
                      end
         | 
| 23 | 
            +
                    else # >= 3.0.1
         | 
| 24 | 
            +
                      def view_assigns
         | 
| 25 | 
            +
                        super.merge(_encapsulated_assigns)
         | 
| 26 | 
            +
                      end
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 16 29 | 
             
                  private
         | 
| 17 30 |  | 
| 18 31 | 
             
                    def _encapsulated_assigns
         | 
| 19 32 | 
             
                      @_encapsulated_assigns ||= {}
         | 
| 20 33 | 
             
                    end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                    def _assigns
         | 
| 23 | 
            -
                      super.merge(_encapsulated_assigns)
         | 
| 24 | 
            -
                    end
         | 
| 25 34 | 
             
                  end
         | 
| 26 35 | 
             
                end
         | 
| 27 36 | 
             
              end
         | 
    
        data/rspec-rails.gemspec
    CHANGED
    
    | @@ -26,7 +26,7 @@ Gem::Specification.new do |s| | |
| 26 26 |  | 
| 27 27 | 
             
              Thank you for installing #{s.summary}!
         | 
| 28 28 |  | 
| 29 | 
            -
              This version of rspec-rails only works with versions of rails >= 3.0.0 | 
| 29 | 
            +
              This version of rspec-rails only works with versions of rails >= 3.0.0
         | 
| 30 30 |  | 
| 31 31 | 
             
              To configure your app to use rspec-rails, add a declaration to your Gemfile.
         | 
| 32 32 | 
             
              If you are using Bundler's grouping feature in your Gemfile, be sure to include
         | 
| @@ -5,18 +5,35 @@ module RSpec::Rails | |
| 5 5 | 
             
                it { should be_included_in_files_in('./spec/controllers/') }
         | 
| 6 6 | 
             
                it { should be_included_in_files_in('.\\spec\\controllers\\') }
         | 
| 7 7 |  | 
| 8 | 
            -
                 | 
| 9 | 
            -
                   | 
| 8 | 
            +
                let(:group) do
         | 
| 9 | 
            +
                  RSpec::Core::ExampleGroup.describe do
         | 
| 10 10 | 
             
                    include ControllerExampleGroup
         | 
| 11 11 | 
             
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                it "includes routing matchers" do
         | 
| 12 15 | 
             
                  group.included_modules.should include(RSpec::Rails::Matchers::RoutingMatchers)
         | 
| 13 16 | 
             
                end
         | 
| 14 17 |  | 
| 15 18 | 
             
                it "adds :type => :controller to the metadata" do
         | 
| 16 | 
            -
                  group = RSpec::Core::ExampleGroup.describe do
         | 
| 17 | 
            -
                    include ControllerExampleGroup
         | 
| 18 | 
            -
                  end
         | 
| 19 19 | 
             
                  group.metadata[:type].should eq(:controller)
         | 
| 20 20 | 
             
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                context "with implicit subject" do
         | 
| 23 | 
            +
                  it "uses the controller as the subject" do
         | 
| 24 | 
            +
                    controller = double('controller')
         | 
| 25 | 
            +
                    example = group.new
         | 
| 26 | 
            +
                    example.stub(:controller => controller)
         | 
| 27 | 
            +
                    example.subject.should == controller
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                describe "with explicit subject" do
         | 
| 32 | 
            +
                  it "should use the specified subject instead of the controller" do
         | 
| 33 | 
            +
                    group.subject { 'explicit' }
         | 
| 34 | 
            +
                    example = group.new
         | 
| 35 | 
            +
                    example.subject.should == 'explicit'
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 21 38 | 
             
              end
         | 
| 22 39 | 
             
            end
         | 
| @@ -24,7 +24,7 @@ module RSpec::Rails | |
| 24 24 | 
             
                describe "#helper" do
         | 
| 25 25 | 
             
                  it "returns the instance of AV::Base provided by AV::TC::Behavior" do
         | 
| 26 26 | 
             
                    helper_spec = Object.new.extend HelperExampleGroup::InstanceMethods
         | 
| 27 | 
            -
                    helper_spec.should_receive(: | 
| 27 | 
            +
                    helper_spec.should_receive(:view_assigns)
         | 
| 28 28 | 
             
                    av_tc_b_view = double('_view')
         | 
| 29 29 | 
             
                    av_tc_b_view.should_receive(:assign)
         | 
| 30 30 | 
             
                    helper_spec.stub(:_view) { av_tc_b_view }
         | 
| @@ -15,7 +15,7 @@ module RSpec::Rails | |
| 15 15 | 
             
                describe 'automatic inclusion of helpers' do
         | 
| 16 16 | 
             
                  module ::ThingsHelper; end
         | 
| 17 17 |  | 
| 18 | 
            -
                   | 
| 18 | 
            +
                  pending 'includes the helper with the same name' do
         | 
| 19 19 | 
             
                    group = RSpec::Core::ExampleGroup.describe 'things/show.html.erb'
         | 
| 20 20 | 
             
                    group.should_receive(:helper).with(ThingsHelper)
         | 
| 21 21 | 
             
                    group.class_eval do
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "be_new_record" do
         | 
| 4 | 
            +
              context "un-persisted record" do
         | 
| 5 | 
            +
                it "passes" do
         | 
| 6 | 
            +
                  record = double('record', :persisted? => false)
         | 
| 7 | 
            +
                  record.should be_new_record
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              context "persisted record" do
         | 
| 12 | 
            +
                it "fails" do
         | 
| 13 | 
            +
                  record = double('record', :persisted? => true)
         | 
| 14 | 
            +
                  record.should_not be_new_record
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -41,19 +41,17 @@ describe "mock_model(RealModel)" do | |
| 41 41 | 
             
                before(:each) do
         | 
| 42 42 | 
             
                  @model = mock_model(MockableModel, :id => 1)
         | 
| 43 43 | 
             
                end
         | 
| 44 | 
            +
             | 
| 44 45 | 
             
                it "is named using the stubbed id value" do
         | 
| 45 46 | 
             
                  @model.instance_variable_get(:@name).should == "MockableModel_1"
         | 
| 46 47 | 
             
                end
         | 
| 47 | 
            -
                it "returns string of id value for to_param" do
         | 
| 48 | 
            -
                  @model.to_param.should == "1"
         | 
| 49 | 
            -
                end
         | 
| 50 48 | 
             
              end
         | 
| 51 49 |  | 
| 52 50 | 
             
              describe "destroy" do
         | 
| 53 | 
            -
                it "sets  | 
| 51 | 
            +
                it "sets persisted to false" do
         | 
| 54 52 | 
             
                  model = mock_model(MockableModel)
         | 
| 55 53 | 
             
                  model.destroy
         | 
| 56 | 
            -
                  model. | 
| 54 | 
            +
                  model.should_not be_persisted
         | 
| 57 55 | 
             
                end
         | 
| 58 56 | 
             
              end
         | 
| 59 57 |  | 
| @@ -181,26 +179,25 @@ describe "mock_model(RealModel)" do | |
| 181 179 | 
             
              end
         | 
| 182 180 |  | 
| 183 181 | 
             
              describe "#persisted?" do
         | 
| 184 | 
            -
                context "with default  | 
| 182 | 
            +
                context "with default identifier" do
         | 
| 185 183 | 
             
                  it "returns true" do
         | 
| 186 184 | 
             
                    mock_model(MockableModel).should be_persisted
         | 
| 187 185 | 
             
                  end
         | 
| 188 186 | 
             
                end
         | 
| 189 187 |  | 
| 190 | 
            -
                context "with explicit id" do
         | 
| 188 | 
            +
                context "with explicit identifier via :id" do
         | 
| 191 189 | 
             
                  it "returns true" do
         | 
| 192 190 | 
             
                    mock_model(MockableModel, :id => 37).should be_persisted
         | 
| 193 191 | 
             
                  end
         | 
| 194 192 | 
             
                end
         | 
| 195 193 |  | 
| 196 | 
            -
                context "with id nil" do
         | 
| 194 | 
            +
                context "with id => nil" do
         | 
| 197 195 | 
             
                  it "returns false" do
         | 
| 198 196 | 
             
                    mock_model(MockableModel, :id => nil).should_not be_persisted
         | 
| 199 197 | 
             
                  end
         | 
| 200 198 | 
             
                end
         | 
| 201 199 | 
             
              end
         | 
| 202 200 |  | 
| 203 | 
            -
             | 
| 204 201 | 
             
              describe "#valid?" do
         | 
| 205 202 | 
             
                context "default" do
         | 
| 206 203 | 
             
                  it "returns true" do
         | 
| @@ -220,6 +217,11 @@ describe "mock_model(RealModel)" do | |
| 220 217 | 
             
                  m.as_new_record.should be_new_record
         | 
| 221 218 | 
             
                end
         | 
| 222 219 |  | 
| 220 | 
            +
                it "says it is not persisted" do
         | 
| 221 | 
            +
                  m = mock_model(MockableModel)
         | 
| 222 | 
            +
                  m.as_new_record.should_not be_persisted
         | 
| 223 | 
            +
                end
         | 
| 224 | 
            +
             | 
| 223 225 | 
             
                it "has a nil id" do
         | 
| 224 226 | 
             
                  mock_model(MockableModel).as_new_record.id.should be(nil)
         | 
| 225 227 | 
             
                end
         | 
| @@ -2,100 +2,149 @@ require 'spec_helper' | |
| 2 2 | 
             
            require File.dirname(__FILE__) + '/ar_classes'
         | 
| 3 3 |  | 
| 4 4 | 
             
            describe "stub_model" do
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 5 | 
            +
             | 
| 6 | 
            +
              shared_examples_for "stub model" do
         | 
| 7 | 
            +
                describe "with a block" do
         | 
| 8 | 
            +
                  it "yields the model" do
         | 
| 9 | 
            +
                    model = stub_model(model_class) do |block_arg|
         | 
| 10 | 
            +
                      @block_arg = block_arg
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                    model.should be(@block_arg)
         | 
| 13 | 
            +
                  end
         | 
| 8 14 | 
             
                end
         | 
| 9 15 |  | 
| 10 | 
            -
                 | 
| 11 | 
            -
                   | 
| 16 | 
            +
                describe "#persisted?" do
         | 
| 17 | 
            +
                  context "default" do
         | 
| 18 | 
            +
                    it "returns true" do
         | 
| 19 | 
            +
                      model = stub_model(model_class)
         | 
| 20 | 
            +
                      model.should be_persisted
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  context "with as_new_record" do
         | 
| 25 | 
            +
                    it "returns false" do
         | 
| 26 | 
            +
                      model = stub_model(model_class).as_new_record
         | 
| 27 | 
            +
                      model.should_not be_persisted
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 12 30 | 
             
                end
         | 
| 13 | 
            -
              end
         | 
| 14 31 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 32 | 
            +
                it "increments the value returned by to_param" do
         | 
| 33 | 
            +
                  first = stub_model(model_class)
         | 
| 34 | 
            +
                  second = stub_model(model_class)
         | 
| 35 | 
            +
                  second.to_param.to_i.should == (first.to_param.to_i + 1)
         | 
| 36 | 
            +
                end
         | 
| 18 37 |  | 
| 19 | 
            -
              it "says it is a new record when id is set to nil" do
         | 
| 20 | 
            -
                stub_model(MockableModel, :id => nil).should be_new_record
         | 
| 21 38 | 
             
              end
         | 
| 22 39 |  | 
| 23 | 
            -
               | 
| 24 | 
            -
                 | 
| 40 | 
            +
              context "with ActiveModel (not ActiveRecord)" do
         | 
| 41 | 
            +
                it_behaves_like "stub model" do
         | 
| 42 | 
            +
                  def model_class
         | 
| 43 | 
            +
                    NonActiveRecordModel
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 25 46 | 
             
              end
         | 
| 26 47 |  | 
| 27 | 
            -
               | 
| 28 | 
            -
                 | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
                 | 
| 33 | 
            -
                   | 
| 48 | 
            +
              context "with an ActiveRecord model" do
         | 
| 49 | 
            +
                let(:model_class) { MockableModel }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                it_behaves_like "stub model"
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                describe "#new_record?" do
         | 
| 54 | 
            +
                  context "default" do
         | 
| 55 | 
            +
                    it "returns false" do
         | 
| 56 | 
            +
                      model = stub_model(model_class)
         | 
| 57 | 
            +
                      model.new_record?.should be_false
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  context "with as_new_record" do
         | 
| 62 | 
            +
                    it "returns true" do
         | 
| 63 | 
            +
                      model = stub_model(model_class).as_new_record
         | 
| 64 | 
            +
                      model.new_record?.should be_true
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                  end
         | 
| 34 67 | 
             
                end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                 | 
| 37 | 
            -
                   | 
| 68 | 
            +
             | 
| 69 | 
            +
                describe "defaults" do
         | 
| 70 | 
            +
                  it "has an id" do
         | 
| 71 | 
            +
                    stub_model(MockableModel).id.should be > 0
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  it "says it is not a new record" do
         | 
| 75 | 
            +
                    stub_model(MockableModel).should_not be_new_record
         | 
| 76 | 
            +
                  end
         | 
| 38 77 | 
             
                end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                 | 
| 41 | 
            -
                   | 
| 78 | 
            +
             | 
| 79 | 
            +
                describe "#as_new_record" do
         | 
| 80 | 
            +
                  it "has a nil id" do
         | 
| 81 | 
            +
                    stub_model(MockableModel).as_new_record.id.should be(nil)
         | 
| 82 | 
            +
                  end
         | 
| 42 83 | 
             
                end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                it " | 
| 45 | 
            -
                   | 
| 84 | 
            +
             | 
| 85 | 
            +
                it "raises when hitting the db" do
         | 
| 86 | 
            +
                  lambda do
         | 
| 87 | 
            +
                    stub_model(ConnectableModel).connection
         | 
| 88 | 
            +
                  end.should raise_error(RSpec::Rails::IllegalDataAccessException, /stubbed models are not allowed to access the database/)
         | 
| 46 89 | 
             
                end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                it " | 
| 49 | 
            -
                  stub_model( | 
| 90 | 
            +
             | 
| 91 | 
            +
                it "increments the id" do
         | 
| 92 | 
            +
                  first = stub_model(model_class)
         | 
| 93 | 
            +
                  second = stub_model(model_class)
         | 
| 94 | 
            +
                  second.id.should == (first.id + 1)
         | 
| 50 95 | 
             
                end
         | 
| 51 | 
            -
              end
         | 
| 52 96 |  | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
                  stub_model(MockableModel).as_new_record.should be_new_record
         | 
| 97 | 
            +
                it "accepts a stub id" do
         | 
| 98 | 
            +
                  stub_model(MockableModel, :id => 37).id.should == 37
         | 
| 56 99 | 
             
                end
         | 
| 57 100 |  | 
| 58 | 
            -
                it " | 
| 59 | 
            -
                  stub_model(MockableModel). | 
| 101 | 
            +
                it "says it is a new record when id is set to nil" do
         | 
| 102 | 
            +
                  stub_model(MockableModel, :id => nil).should be_new_record
         | 
| 60 103 | 
             
                end
         | 
| 61 | 
            -
              end
         | 
| 62 104 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
                end.should raise_error(RSpec::Rails::IllegalDataAccessException, /stubbed models are not allowed to access the database/)
         | 
| 67 | 
            -
              end
         | 
| 105 | 
            +
                it "accepts a stub for save" do
         | 
| 106 | 
            +
                  stub_model(MockableModel, :save => false).save.should be(false)
         | 
| 107 | 
            +
                end
         | 
| 68 108 |  | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
              end
         | 
| 109 | 
            +
                describe "alternate primary key" do
         | 
| 110 | 
            +
                  it "has the correct primary_key name" do
         | 
| 111 | 
            +
                    stub_model(AlternatePrimaryKeyModel).class.primary_key.should eql('my_id')
         | 
| 112 | 
            +
                  end
         | 
| 74 113 |  | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
                   | 
| 78 | 
            -
                  @stub_model = stub_model(MockableModel)
         | 
| 79 | 
            -
                  @real.mockable_model = @stub_model
         | 
| 80 | 
            -
                end
         | 
| 114 | 
            +
                  it "has a primary_key" do
         | 
| 115 | 
            +
                    stub_model(AlternatePrimaryKeyModel).my_id.should be > 0
         | 
| 116 | 
            +
                  end
         | 
| 81 117 |  | 
| 82 | 
            -
             | 
| 83 | 
            -
                     | 
| 84 | 
            -
             | 
| 118 | 
            +
                  it "says it is not a new record" do
         | 
| 119 | 
            +
                    stub_model(AlternatePrimaryKeyModel) do |m|
         | 
| 120 | 
            +
                      m.should_not be_new_record
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
                  end
         | 
| 85 123 |  | 
| 86 | 
            -
             | 
| 87 | 
            -
                     | 
| 124 | 
            +
                  it "says it is a new record if primary_key is nil" do
         | 
| 125 | 
            +
                    stub_model(AlternatePrimaryKeyModel, :my_id => nil).should be_new_record
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  it "accepts a stub for the primary_key" do
         | 
| 129 | 
            +
                    stub_model(AlternatePrimaryKeyModel, :my_id => 5).my_id.should == 5
         | 
| 130 | 
            +
                  end
         | 
| 88 131 | 
             
                end
         | 
| 89 | 
            -
              end
         | 
| 90 132 |  | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
                    @ | 
| 133 | 
            +
                describe "as association" do
         | 
| 134 | 
            +
                  before(:each) do
         | 
| 135 | 
            +
                    @real = AssociatedModel.create!
         | 
| 136 | 
            +
                    @stub_model = stub_model(MockableModel)
         | 
| 137 | 
            +
                    @real.mockable_model = @stub_model
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                  it "passes associated_model == mock" do
         | 
| 141 | 
            +
                      @stub_model.should == @real.mockable_model
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                  it "passes mock == associated_model" do
         | 
| 145 | 
            +
                      @real.mockable_model.should == @stub_model
         | 
| 95 146 | 
             
                  end
         | 
| 96 | 
            -
                  model.should be(@block_arg)
         | 
| 97 147 | 
             
                end
         | 
| 148 | 
            +
             | 
| 98 149 | 
             
              end
         | 
| 99 150 | 
             
            end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: rspec-rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              hash: 7712058
         | 
| 4 5 | 
             
              prerelease: true
         | 
| 5 6 | 
             
              segments: 
         | 
| 6 7 | 
             
              - 2
         | 
| 7 8 | 
             
              - 0
         | 
| 8 9 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
               | 
| 11 | 
            -
              version: 2.0.0.beta.22
         | 
| 10 | 
            +
              - rc
         | 
| 11 | 
            +
              version: 2.0.0.rc
         | 
| 12 12 | 
             
            platform: ruby
         | 
| 13 13 | 
             
            authors: 
         | 
| 14 14 | 
             
            - David Chelimsky
         | 
| @@ -17,26 +17,26 @@ autorequire: | |
| 17 17 | 
             
            bindir: bin
         | 
| 18 18 | 
             
            cert_chain: []
         | 
| 19 19 |  | 
| 20 | 
            -
            date: 2010- | 
| 20 | 
            +
            date: 2010-10-04 00:00:00 -05:00
         | 
| 21 21 | 
             
            default_executable: 
         | 
| 22 22 | 
             
            dependencies: 
         | 
| 23 23 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 24 | 
            -
               | 
| 25 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 | 
            +
              version_requirements: &id001 !ruby/object:Gem::Requirement 
         | 
| 26 25 | 
             
                none: false
         | 
| 27 26 | 
             
                requirements: 
         | 
| 28 27 | 
             
                - - "="
         | 
| 29 28 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 29 | 
            +
                    hash: 7712058
         | 
| 30 30 | 
             
                    segments: 
         | 
| 31 31 | 
             
                    - 2
         | 
| 32 32 | 
             
                    - 0
         | 
| 33 33 | 
             
                    - 0
         | 
| 34 | 
            -
                    -  | 
| 35 | 
            -
                     | 
| 36 | 
            -
             | 
| 34 | 
            +
                    - rc
         | 
| 35 | 
            +
                    version: 2.0.0.rc
         | 
| 36 | 
            +
              requirement: *id001
         | 
| 37 37 | 
             
              type: :runtime
         | 
| 38 | 
            +
              name: rspec
         | 
| 38 39 | 
             
              prerelease: false
         | 
| 39 | 
            -
              version_requirements: *id001
         | 
| 40 40 | 
             
            description: RSpec-2 for Rails-3
         | 
| 41 41 | 
             
            email: dchelimsky@gmail.com;chad.humphries@gmail.com
         | 
| 42 42 | 
             
            executables: []
         | 
| @@ -53,6 +53,7 @@ files: | |
| 53 53 | 
             
            - History.md
         | 
| 54 54 | 
             
            - README.markdown
         | 
| 55 55 | 
             
            - Rakefile
         | 
| 56 | 
            +
            - Thorfile
         | 
| 56 57 | 
             
            - Upgrade.markdown
         | 
| 57 58 | 
             
            - autotest/discover.rb
         | 
| 58 59 | 
             
            - cucumber.yml
         | 
| @@ -124,6 +125,7 @@ files: | |
| 124 125 | 
             
            - lib/rspec/rails/fixture_support.rb
         | 
| 125 126 | 
             
            - lib/rspec/rails/matchers.rb
         | 
| 126 127 | 
             
            - lib/rspec/rails/matchers/be_a_new.rb
         | 
| 128 | 
            +
            - lib/rspec/rails/matchers/be_new_record.rb
         | 
| 127 129 | 
             
            - lib/rspec/rails/matchers/have_extension.rb
         | 
| 128 130 | 
             
            - lib/rspec/rails/matchers/redirect_to.rb
         | 
| 129 131 | 
             
            - lib/rspec/rails/matchers/render_template.rb
         | 
| @@ -147,6 +149,7 @@ files: | |
| 147 149 | 
             
            - spec/rspec/rails/example/view_rendering_spec.rb
         | 
| 148 150 | 
             
            - spec/rspec/rails/fixture_support_spec.rb
         | 
| 149 151 | 
             
            - spec/rspec/rails/matchers/be_a_new_spec.rb
         | 
| 152 | 
            +
            - spec/rspec/rails/matchers/be_new_record_spec.rb
         | 
| 150 153 | 
             
            - spec/rspec/rails/matchers/errors_on_spec.rb
         | 
| 151 154 | 
             
            - spec/rspec/rails/matchers/redirect_to_spec.rb
         | 
| 152 155 | 
             
            - spec/rspec/rails/matchers/render_template_spec.rb
         | 
| @@ -167,9 +170,9 @@ licenses: [] | |
| 167 170 | 
             
            post_install_message: |
         | 
| 168 171 | 
             
              **************************************************
         | 
| 169 172 |  | 
| 170 | 
            -
                Thank you for installing rspec-rails-2.0.0. | 
| 173 | 
            +
                Thank you for installing rspec-rails-2.0.0.rc!
         | 
| 171 174 |  | 
| 172 | 
            -
                This version of rspec-rails only works with versions of rails >= 3.0.0 | 
| 175 | 
            +
                This version of rspec-rails only works with versions of rails >= 3.0.0
         | 
| 173 176 |  | 
| 174 177 | 
             
                To configure your app to use rspec-rails, add a declaration to your Gemfile.
         | 
| 175 178 | 
             
                If you are using Bundler's grouping feature in your Gemfile, be sure to include
         | 
| @@ -177,7 +180,7 @@ post_install_message: | | |
| 177 180 | 
             
                can access its generators and rake tasks.
         | 
| 178 181 |  | 
| 179 182 | 
             
                  group :development, :test do
         | 
| 180 | 
            -
                    gem "rspec-rails", ">= 2.0.0. | 
| 183 | 
            +
                    gem "rspec-rails", ">= 2.0.0.rc"
         | 
| 181 184 | 
             
                  end
         | 
| 182 185 |  | 
| 183 186 | 
             
                Be sure to run the following command in each of your Rails apps if you're
         | 
| @@ -208,7 +211,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 208 211 | 
             
              requirements: 
         | 
| 209 212 | 
             
              - - ">="
         | 
| 210 213 | 
             
                - !ruby/object:Gem::Version 
         | 
| 211 | 
            -
                  hash:  | 
| 214 | 
            +
                  hash: 3
         | 
| 212 215 | 
             
                  segments: 
         | 
| 213 216 | 
             
                  - 0
         | 
| 214 217 | 
             
                  version: "0"
         | 
| @@ -217,6 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 217 220 | 
             
              requirements: 
         | 
| 218 221 | 
             
              - - ">"
         | 
| 219 222 | 
             
                - !ruby/object:Gem::Version 
         | 
| 223 | 
            +
                  hash: 25
         | 
| 220 224 | 
             
                  segments: 
         | 
| 221 225 | 
             
                  - 1
         | 
| 222 226 | 
             
                  - 3
         | 
| @@ -228,7 +232,7 @@ rubyforge_project: rspec | |
| 228 232 | 
             
            rubygems_version: 1.3.7
         | 
| 229 233 | 
             
            signing_key: 
         | 
| 230 234 | 
             
            specification_version: 3
         | 
| 231 | 
            -
            summary: rspec-rails-2.0.0. | 
| 235 | 
            +
            summary: rspec-rails-2.0.0.rc
         | 
| 232 236 | 
             
            test_files: 
         | 
| 233 237 | 
             
            - features/README.markdown
         | 
| 234 238 | 
             
            - features/controller_specs/anonymous_controller.feature
         | 
| @@ -262,6 +266,7 @@ test_files: | |
| 262 266 | 
             
            - spec/rspec/rails/example/view_rendering_spec.rb
         | 
| 263 267 | 
             
            - spec/rspec/rails/fixture_support_spec.rb
         | 
| 264 268 | 
             
            - spec/rspec/rails/matchers/be_a_new_spec.rb
         | 
| 269 | 
            +
            - spec/rspec/rails/matchers/be_new_record_spec.rb
         | 
| 265 270 | 
             
            - spec/rspec/rails/matchers/errors_on_spec.rb
         | 
| 266 271 | 
             
            - spec/rspec/rails/matchers/redirect_to_spec.rb
         | 
| 267 272 | 
             
            - spec/rspec/rails/matchers/render_template_spec.rb
         |