Module: StrictStates::Checker::ClassMethods
- Defined in:
- lib/strict_states/checker.rb
Instance Method Summary collapse
-
#state_lookup(machine_name: :state) ⇒ Object
Given a state return the same state if they are valid for the given state machine,.
-
#strict_all_state_names(machine_name: :state) ⇒ Object
Given the name of a state machine, returns all states defined by the state machine, as an array of strings.
-
#strict_state(state, machine_name: :state) ⇒ Object
Given a state return the same state if they are valid for the given state machine, otherwise raise an error.
-
#strict_state_array(*names, machine_name: :state) ⇒ Object
Given an array of states return the same array of states if they are valid for the given state machine, otherwise raise an error.
Instance Method Details
#state_lookup(machine_name: :state) ⇒ Object
Given a state return the same state if they are valid for the given state machine,
MyModel.state_lookup(machine_name: machine_name)
=> { :new => "new", :pending => "pending", :goofy => "goofy" }
31 32 33 |
# File 'lib/strict_states/checker.rb', line 31 def state_lookup(machine_name: :state) strict_state_lookup[machine_name.to_sym] end |
#strict_all_state_names(machine_name: :state) ⇒ Object
Given the name of a state machine, returns all states defined by the state machine, as an array of strings.
74 75 76 |
# File 'lib/strict_states/checker.rb', line 74 def strict_all_state_names(machine_name: :state) state_lookup(machine_name: machine_name).values # keys would be symbols! end |
#strict_state(state, machine_name: :state) ⇒ Object
Given a state return the same state if they are valid for the given state machine,
otherwise raise an error
Example:
MyModel.strict_state(:good, machine_name: :state)
=> "good"
MyModel.strict_state(:not_actually_a_thing, machine_name: :drive_status) # Can support multiple state machines per model
=> KeyError: key not found: :not_actually_a_thing
This is better than creating discrete constants for each potential state string in a state machine,
because this checks, at app boot, to ensure the states are correct.
(e.g. "gift card", vs "gift_card").
49 50 51 |
# File 'lib/strict_states/checker.rb', line 49 def strict_state(state, machine_name: :state) state_lookup(machine_name: machine_name)[state.to_sym] # This will raise an error if the state key is not a valid state end |
#strict_state_array(*names, machine_name: :state) ⇒ Object
Given an array of states return the same array of states if they are valid for the given state machine,
otherwise raise an error
Example:
MyModel.strict_state_array(:good, :bad, :on_hold, machine_name: :state)
=> ["good", "bad", "on_hold"]
MyModel.strict_state_array(:good, :bad, :steve_martin, machine_name: :drive_status) # Can support multiple state machines per model
=> KeyError: key not found: :steve_martin
This is better than creating discrete constants for each potential set of states in a state machine,
because this checks, at app boot, to ensure the states are correct.
Raw strings in scopes and queries, not created via this method,
will not be bound to the state machine's implementation, so they will fail silently.
e.g. typos like "gift card" vs "gift_card" and no error raised
69 70 71 |
# File 'lib/strict_states/checker.rb', line 69 def strict_state_array(*names, machine_name: :state) names.map {|state| strict_state(state, machine_name: machine_name) } end |