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

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.