class AASM::StateMachineStore
Public Class Methods
fetch(klass, fallback = nil)
click to toggle source
# File lib/aasm/state_machine_store.rb, line 27 def fetch(klass, fallback = nil) stores[klass.to_s] || fallback && begin match = klass.ancestors.find do |ancestor| ancestor.include? AASM and stores[ancestor.to_s] end stores[match.to_s] end end
Also aliased as: []
new()
click to toggle source
# File lib/aasm/state_machine_store.rb, line 43 def initialize @machines = Concurrent::Map.new end
register(klass, overwrite = false, state_machine = nil)
click to toggle source
do not overwrite existing state machines, which could have been created by inheritance, see AASM::ClassMethods
method inherited
# File lib/aasm/state_machine_store.rb, line 13 def register(klass, overwrite = false, state_machine = nil) raise "Cannot register #{klass}" unless klass.is_a?(Class) case name = template = overwrite when FalseClass then stores[klass.to_s] ||= new when TrueClass then stores[klass.to_s] = new when Class then stores[klass.to_s] = stores[template.to_s].clone when Symbol then stores[klass.to_s].register(name, state_machine) when String then stores[klass.to_s].register(name, state_machine) else raise "Don't know what to do with #{overwrite}" end end
Also aliased as: []=
stores()
click to toggle source
# File lib/aasm/state_machine_store.rb, line 7 def stores @stores end
unregister(klass)
click to toggle source
# File lib/aasm/state_machine_store.rb, line 38 def unregister(klass) stores.delete(klass.to_s) end
Public Instance Methods
clone()
click to toggle source
# File lib/aasm/state_machine_store.rb, line 47 def clone StateMachineStore.new.tap do |store| @machines.each_pair do |name, machine| store.register(name, machine.clone) end end end
machine(name)
click to toggle source
# File lib/aasm/state_machine_store.rb, line 55 def machine(name) @machines[name.to_s] end
Also aliased as: []
machine_names()
click to toggle source
# File lib/aasm/state_machine_store.rb, line 60 def machine_names @machines.keys end
Also aliased as: keys
register(name, machine, force = false)
click to toggle source
# File lib/aasm/state_machine_store.rb, line 65 def register(name, machine, force = false) raise "Cannot use #{name.inspect} for machine name" unless name.is_a?(Symbol) or name.is_a?(String) raise "Cannot use #{machine.inspect} as a machine" unless machine.is_a?(AASM::StateMachine) if force @machines[name.to_s] = machine else @machines[name.to_s] ||= machine end end