Module: Wesm

Defined in:
lib/wesm/wesm.rb,
lib/wesm/errors.rb,
lib/wesm/version.rb,
lib/wesm/transition.rb,
lib/wesm/helpers/transitions_helper.rb

Defined Under Namespace

Modules: Helpers Classes: AccessViolationError, BaseError, Transition, TransitionRequirementError, UnexpectedTransitionError

Constant Summary collapse

VERSION =
'0.1.8.8'

Instance Method Summary collapse

Instance Method Details

#perform_transition(object, to_state, actor, *extras) ⇒ Object



30
31
32
33
34
# File 'lib/wesm/wesm.rb', line 30

def perform_transition(object, to_state, actor, *extras)
  transition = get_transition!(object, to_state, actor)

  process_transition(object, transition, actor, *extras)
end

#process_transition(object, transition, actor, *extras) ⇒ Object



36
37
38
# File 'lib/wesm/wesm.rb', line 36

def process_transition(object, transition, actor, *extras)
  object.public_send("#{state_field}=", transition.to_state)
end

#required_fields(object, to_state) ⇒ Object



25
26
27
28
# File 'lib/wesm/wesm.rb', line 25

def required_fields(object, to_state)
  transition = get_transition(object, to_state)
  transition && transition.required_fields(object)
end

#show_transitions(object, actor) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/wesm/wesm.rb', line 12

def show_transitions(object, actor)
  transitions_for(object).map do |transition|
    is_authorized = transition.actor_is_valid?(object, actor)

    {
      to_state: transition.to_state,
      is_authorized: is_authorized,
      can_perform: is_authorized && transition.required_fields_present?(object),
      required_fields: transition.required_fields(object)
    }
  end
end

#successors(object) ⇒ Object



8
9
10
# File 'lib/wesm/wesm.rb', line 8

def successors(object)
  transitions_for(object).map(&:to_state).uniq
end

#transition(options) ⇒ Object



2
3
4
5
6
# File 'lib/wesm/wesm.rb', line 2

def transition(options)
  @transitions ||= {}
  transition = Transition.new(options)
  (@transitions[transition.from_state] ||= []) << transition.freeze
end