diff --git a/spec/models/initial_state_proc.rb b/spec/models/initial_state_proc.rb new file mode 100644 index 0000000..0fe72eb --- /dev/null +++ b/spec/models/initial_state_proc.rb @@ -0,0 +1,15 @@ +class InitialStateProc + RICH = 1_000_000 + + attr_accessor :balance + + include AASM + aasm do + state :retired + state :selling_bad_mortgages + initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages } + end + + def initialize(balance = 0); self.balance = balance; end + def rich?; self.balance >= RICH; end +end diff --git a/spec/models/no_initial_state.rb b/spec/models/no_initial_state.rb new file mode 100644 index 0000000..07e72ef --- /dev/null +++ b/spec/models/no_initial_state.rb @@ -0,0 +1,12 @@ +class NoInitialState + include AASM + + aasm do + state :read + state :ended + + event :foo do + transitions :to => :ended, :from => [:read] + end + end +end diff --git a/spec/unit/initial_state_spec.rb b/spec/unit/initial_state_spec.rb index 60f7f8c..7b19d4e 100644 --- a/spec/unit/initial_state_spec.rb +++ b/spec/unit/initial_state_spec.rb @@ -1,27 +1,12 @@ require 'spec_helper' -class Banker - include AASM - aasm do - state :retired - state :selling_bad_mortgages - initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages } - end - RICH = 1_000_000 - attr_accessor :balance - def initialize(balance = 0); self.balance = balance; end - def rich?; self.balance >= RICH; end -end - describe 'initial states' do - let(:bar) {Bar.new} - it 'should use the first state defined if no initial state is given' do - expect(bar.aasm.current_state).to eq(:read) + expect(NoInitialState.new.aasm.current_state).to eq(:read) end it 'should determine initial state from the Proc results' do - expect(Banker.new(Banker::RICH - 1).aasm.current_state).to eq(:selling_bad_mortgages) - expect(Banker.new(Banker::RICH + 1).aasm.current_state).to eq(:retired) + expect(InitialStateProc.new(InitialStateProc::RICH - 1).aasm.current_state).to eq(:selling_bad_mortgages) + expect(InitialStateProc.new(InitialStateProc::RICH + 1).aasm.current_state).to eq(:retired) end end