Module: Transitions
- Includes:
- Presenter
- Defined in:
- lib/transitions.rb,
lib/transitions/event.rb,
lib/transitions/state.rb,
lib/transitions/machine.rb,
lib/transitions/version.rb,
lib/transitions/presenter.rb,
lib/transitions/state_transition.rb
Defined Under Namespace
Modules: ClassMethods, Presenter
Classes: Event, InvalidMethodOverride, InvalidTransition, Machine, State, StateTransition
Constant Summary
collapse
- VERSION =
'1.3.0'.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Presenter
#available_events, #available_states
Class Method Details
.active_model_descendant?(klazz) ⇒ Boolean
85
86
87
88
|
# File 'lib/transitions.rb', line 85
def self.active_model_descendant?(klazz)
defined?(ActiveModel) && klazz.included_modules.include?(ActiveModel::Validations)
end
|
.included(base) ⇒ Object
37
38
39
|
# File 'lib/transitions.rb', line 37
def self.included(base)
base.extend(ClassMethods)
end
|
Instance Method Details
#available_transitions ⇒ Object
57
58
59
|
# File 'lib/transitions.rb', line 57
def available_transitions
get_state_machine.events_for(current_state)
end
|
#can_transition?(*events) ⇒ Boolean
61
62
63
64
65
|
# File 'lib/transitions.rb', line 61
def can_transition?(*events)
events.all? do |event|
self.class.get_state_machine.events_for(current_state).include?(event.to_sym)
end
end
|
#cant_transition?(*events) ⇒ Boolean
67
68
69
|
# File 'lib/transitions.rb', line 67
def cant_transition?(*events)
!can_transition?(*events)
end
|
#current_state ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/transitions.rb', line 71
def current_state
sm = get_state_machine
ivar = sm.current_state_variable
value = instance_variable_get(ivar)
return value if value
if Transitions.active_model_descendant?(self.class)
value = instance_variable_set(ivar, read_state)
end
!(value.nil? || value.to_s.empty?) ? value : sm.initial_state
end
|
#get_state_machine ⇒ Object
41
42
43
|
# File 'lib/transitions.rb', line 41
def get_state_machine
self.class.get_state_machine
end
|
#update_current_state(new_state, persist = false) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/transitions.rb', line 45
def update_current_state(new_state, persist = false)
ivar = get_state_machine.current_state_variable
if Transitions.active_model_descendant?(self.class)
write_state(new_state) if persist
write_state_without_persistence(new_state)
end
instance_variable_set(ivar, new_state)
end
|