Sha256: fe3a4599bdba2faa9f77f1a16205b544ffe728fdc7a772a03a2eacfa5bc1fb35

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

# Hooks on state entrance / exit. Needs more attention.

require 'lib/maintain'

describe Maintain, "hooks" do
  before :each do
    class ::MaintainTest
      extend Maintain
    end
  end

  it "should allow me to hook into entry and exit" do
    lambda {
      MaintainTest.maintain :state do
        state :new, :enter => :new_entered
        state :old, :enter => :old_entered
        on :enter, :new, :new_entered
        on :exit, :old do
          self.old_entered
        end
      end
    }.should_not raise_error
  end

  it "should execute hooks when states are entered and exited" do
    MaintainTest.maintain :state do
      state :new
      state :old
      on :enter, :new, :new_entered
      on :exit, :old do
        self.old_entered
      end
    end

    maintain = MaintainTest.new
    maintain.should_receive(:new_entered)
    maintain.state = :new
    maintain.should_receive(:old_entered)
    maintain.state = :old
    maintain.should_not_receive(:old_entered)
    maintain.state = :old
  end

  describe "guarding" do
    it "should prevent hooks from running when they return false" do
      MaintainTest.maintain :state do
        state :new
        state :old
        on :enter, :new, :new_entered, :if => :run_hook?
      end

      maintain = MaintainTest.new
      def maintain.run_hook?
        false
      end
      maintain.should_not_receive(:new_entered)
      maintain.state = :new
      maintain.state = :old
      maintain.state = :old
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
maintain-0.1.9 spec/hooks_spec.rb
maintain-0.1.8 spec/hooks_spec.rb
maintain-0.1.7 spec/hooks_spec.rb