Module: StateMachines::Machine::ClassMethods
- Included in:
- StateMachines::Machine
- Defined in:
- lib/state_machines/machine/class_methods.rb
Instance Attribute Summary collapse
-
#ignore_method_conflicts ⇒ Object
Default messages to use for validation errors in ORM integrations.
- #renderer ⇒ Object
Instance Method Summary collapse
- #default_messages ⇒ Object
- #default_messages=(messages) ⇒ Object
- #draw ⇒ Object
-
#find_or_create(owner_class, *args, &block) ⇒ Object
Attempts to find or create a state machine for the given class.
- #replace_messages(message_hash) ⇒ Object
Instance Attribute Details
#ignore_method_conflicts ⇒ Object
Default messages to use for validation errors in ORM integrations
50 51 52 |
# File 'lib/state_machines/machine/class_methods.rb', line 50 def ignore_method_conflicts @ignore_method_conflicts end |
#renderer ⇒ Object
72 73 74 75 76 |
# File 'lib/state_machines/machine/class_methods.rb', line 72 def renderer return @renderer if @renderer STDIORenderer end |
Instance Method Details
#default_messages ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/state_machines/machine/class_methods.rb', line 52 def @default_messages ||= { invalid: 'is invalid', invalid_event: 'cannot transition when %s', invalid_transition: 'cannot transition via "%1$s"' } end |
#default_messages=(messages) ⇒ Object
60 61 62 |
# File 'lib/state_machines/machine/class_methods.rb', line 60 def () @default_messages = end |
#draw ⇒ Object
45 46 47 |
# File 'lib/state_machines/machine/class_methods.rb', line 45 def draw(*) raise NotImplementedError end |
#find_or_create(owner_class, *args, &block) ⇒ Object
Attempts to find or create a state machine for the given class. For example,
StateMachines::Machine.find_or_create(Vehicle)
StateMachines::Machine.find_or_create(Vehicle, :initial => :parked)
StateMachines::Machine.find_or_create(Vehicle, :status)
StateMachines::Machine.find_or_create(Vehicle, :status, :initial => :parked)
If a machine of the given name already exists in one of the class’s superclasses, then a copy of that machine will be created and stored in the new owner class (the original will remain unchanged).
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/state_machines/machine/class_methods.rb', line 17 def find_or_create(owner_class, *args, &block) = args.last.is_a?(Hash) ? args.pop : {} name = args.first || :state # Find an existing machine machine = owner_class.respond_to?(:state_machines) && (args.first && owner_class.state_machines[name] || !args.first && owner_class.state_machines.values.first) || nil if machine # Only create a new copy if changes are being made to the machine in # a subclass if machine.owner_class != owner_class && (.any? || block_given?) machine = machine.clone machine.initial_state = [:initial] if .include?(:initial) machine.owner_class = owner_class end # Evaluate DSL machine.instance_eval(&block) if block_given? else # No existing machine: create a new one machine = new(owner_class, name, , &block) end machine end |
#replace_messages(message_hash) ⇒ Object
64 65 66 67 68 |
# File 'lib/state_machines/machine/class_methods.rb', line 64 def () .each do |key, value| [key] = value end end |