pluginaweek / state_machine

Adds support for creating state machines for attributes on any Ruby class
http://www.pluginaweek.org
MIT License
3.74k stars 507 forks source link

Silence uneccessary warning with default state with value #293

Open wrozka opened 10 years ago

wrozka commented 10 years ago

State machine is producing a false positive warnings like this:

Both `model class` and its :status machine have defined a different default for "status"

It happens with correct machines when states have values and a there is a default value from the schema (or any other integration).

class Request < ActiveRecord::Base
  # schema defines status as an int with default value of 0

  state_machine :status, :initial => :open do
    state :open, :value => 0
    state :closed, :value => 1
  end
end

This happens because at the moment of processing the :initial argument of the state_machine, the value of :open state is unknown (the block hasn't been evaluated yet), state with a default value (the state name) is created and it is compared with default value from schema (0) which produces the warning. Block with the definition of states is processed too late.

This problem can be fixed by setting the initial value as the very last thing that state machine constructor does. This way we can evaluate the block first in order to capture the correct values of states.

I believe this pull request closes: #285 and #279.

changok commented 10 years ago

Yes, this one is so annoying.

jmatraszek commented 10 years ago

Any chance to get that merged?

danteoh commented 10 years ago

+1

jarinudom commented 10 years ago

+1

zdavis commented 10 years ago

+1

devdazed commented 10 years ago

:+1:

tradziej commented 10 years ago

:+1:

gnapse commented 10 years ago

:+1:

edraut commented 10 years ago

:+1:

chrisferry commented 10 years ago

:+1:

igkins commented 10 years ago

:thumbsup:

gilgen commented 10 years ago

:thumbsup:

mhuggins commented 9 years ago

+1

mgrachev commented 9 years ago

:+1:

shlensky commented 9 years ago

:+1:

ethernetdan commented 8 years ago

+1

vickodin commented 7 years ago

So nice queue of :+1: :)

P.S. subscribed

angelsystem commented 6 years ago

+1 please