diff --git a/lib/aasm/aasm.rb b/lib/aasm/aasm.rb index 42a28e4..85e1d1d 100644 --- a/lib/aasm/aasm.rb +++ b/lib/aasm/aasm.rb @@ -26,12 +26,13 @@ module AASM @aasm end - # TODO: maybe better: aasm.initial_state + # TODO remove this method in v4.0.0 def aasm_initial_state(set_state=nil) if set_state - # deprecated way to set the value + warn ".aasm_initial_state(:name) is deprecated and will be removed in version 4.0.0; please use .aasm.initial_state = :name instead!" AASM::StateMachine[self].initial_state = set_state else + warn ".aasm_initial_state is deprecated and will be removed in version 4.0.0; please use .aasm.initial_state instead!" AASM::StateMachine[self].initial_state end end diff --git a/lib/aasm/base.rb b/lib/aasm/base.rb index 8b80966..618f3a3 100644 --- a/lib/aasm/base.rb +++ b/lib/aasm/base.rb @@ -25,13 +25,16 @@ module AASM end end - def initial_state - @state_machine.initial_state + def initial_state(new_initial_state=nil) + if new_initial_state + @state_machine.initial_state = new_initial_state + else + @state_machine.initial_state + end end # define a state def state(name, options={}) - # @clazz.aasm_state(name, options) @state_machine.add_state(name, @clazz, options) @state_machine.initial_state = name if options[:initial] || !@state_machine.initial_state diff --git a/lib/aasm/instance_base.rb b/lib/aasm/instance_base.rb index 6cad4f1..52de15e 100644 --- a/lib/aasm/instance_base.rb +++ b/lib/aasm/instance_base.rb @@ -15,7 +15,7 @@ module AASM end def enter_initial_state - state_name = determine_state_name(@instance.class.aasm_initial_state) + state_name = determine_state_name(@instance.class.aasm.initial_state) state_object = state_object_for_name(state_name) state_object.fire_callbacks(:before_enter, @instance) diff --git a/lib/aasm/persistence/base.rb b/lib/aasm/persistence/base.rb index 81aaebd..fdd886f 100644 --- a/lib/aasm/persistence/base.rb +++ b/lib/aasm/persistence/base.rb @@ -35,7 +35,7 @@ module AASM def aasm_read_state state = send(self.class.aasm_column) if new_record? - state.blank? ? aasm.determine_state_name(self.class.aasm_initial_state) : state.to_sym + state.blank? ? aasm.determine_state_name(self.class.aasm.initial_state) : state.to_sym else state.nil? ? nil : state.to_sym end diff --git a/spec/models/persistence.rb b/spec/models/persistence.rb index 2704eec..e585e21 100644 --- a/spec/models/persistence.rb +++ b/spec/models/persistence.rb @@ -62,10 +62,10 @@ class Thief < ActiveRecord::Base set_table_name "thieves" end include AASM - aasm_initial_state Proc.new { |thief| thief.skilled ? :rich : :jailed } aasm do state :rich state :jailed + initial_state Proc.new {|thief| thief.skilled ? :rich : :jailed } end attr_accessor :skilled, :aasm_state end diff --git a/spec/unit/initial_state_spec.rb b/spec/unit/initial_state_spec.rb index 85c5da0..dcf7fb8 100644 --- a/spec/unit/initial_state_spec.rb +++ b/spec/unit/initial_state_spec.rb @@ -5,8 +5,8 @@ class Banker aasm do state :retired state :selling_bad_mortgages + initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages } end - aasm_initial_state Proc.new { |banker| banker.rich? ? :retired : :selling_bad_mortgages } RICH = 1_000_000 attr_accessor :balance def initialize(balance = 0); self.balance = balance; end