Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Disables observers during testing, allowing you to write model tests that are completely decoupled from the observer. Also lets you enable observers for a certain block of code, so that you can write observer tests
Ruby
tree: c2582540b6

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.gitignore
History.rdoc
README
Rakefile
VERSION
init.rb
install.rb
no_peeping_toms.gemspec
uninstall.rb

README

no_peeping_toms
=============

Originally a plugin, now gemified.  'gem install no_peeping_toms'

This plugin disables observers in your specs, so that model specs can run in complete isolation.

To disable observers, place the following code in your test.rb, or spec_helper.rb, or wherever:

  ActiveRecord::Observer.disable_observers

You can easily reenable observers:

  ActiveRecord::Observer.enable_observers

You can choose to run some code with specific observers turned on.  This is useful when spec'ing an observer.  For example, if you write the following observer:

    class PersonObserver < ActiveRecord::Observer
      def before_update(person)
        old_person = Person.find person.id
        if old_person.name != person.name
          NameChange.create! :person => person, :old_name => old_person.name, :new_name => person.name
        end
      end
    end
    
You can spec the Person class in complete isolation.

    describe Person, " when changing a name" do
      before(:each) do
        @person = Person.create! :name => "Pat Maddox"
      end
  
      # By default, don't run any observers
      it "should not register a name change" do
        lambda { @person.update_attribute :name, "Don Juan Demarco" }.should_not change(NameChange, :count)
      end
  
      # Run only a portion of code with certain observers turned on
      it "should register a name change with the person observer turned on" do
        ActiveRecord::Observer.with_observers(:person_observer) do
          lambda { @person.update_attribute :name, "Don Juan Demarco" }.should change(NameChange, :count).by(1)
        end
    
        lambda { @person.update_attribute :name, "Man Without a Name" }.should_not change(NameChange, :count)
      end
    end

Cool people who have contributed to NoPeepingToms:
  * Brandon Keepers
  * Corey Haines
  * Jeff Siegel
  * Drew Olson
  * Zach Dennis

If you think your name should be here, shoot me an email and I'll add it ASAP.

Copyright (c) 2007-2010 Pat Maddox, released under the MIT license
Something went wrong with that request. Please try again.