Sha256: 873a606ce7ceacbac5dfa70b6aa985e4c4e79afcfcbfaebe288cbd8b32e31618

Contents?: true

Size: 1.44 KB

Versions: 6

Compression:

Stored size: 1.44 KB

Contents

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

require 'spec_helper'
require '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 :enter, :old do
        self.old_entered
      end
    end

    maintain = MaintainTest.new
    maintain.should_receive(:new_entered)
    maintain.state = :new
    maintain.should_receive(:old_entered).once
    maintain.state = :old
    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

6 entries across 6 versions & 1 rubygems

Version Path
maintain-0.2.23 spec/hooks_spec.rb
maintain-0.2.22 spec/hooks_spec.rb
maintain-0.2.21 spec/hooks_spec.rb
maintain-0.2.20 spec/hooks_spec.rb
maintain-0.2.19 spec/hooks_spec.rb
maintain-0.2.18 spec/hooks_spec.rb