Class: Wesm::Transition

Inherits:
Object
  • Object
show all
Defined in:
lib/wesm/transition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Transition

Returns a new instance of Transition.



5
6
7
8
9
10
11
12
# File 'lib/wesm/transition.rb', line 5

def initialize(options)
  @from_state = options.keys.first.to_s
  @to_state = options.values.first.to_s
  @valid_actors = Array(options[:actor])
  @scope = options[:scope]
  @required = Array(options[:required])
  @performer = options[:performer]
end

Instance Attribute Details

#from_stateObject

Returns the value of attribute from_state.



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

def from_state
  @from_state
end

#performerObject

Returns the value of attribute performer.



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

def performer
  @performer
end

#requiredObject

Returns the value of attribute required.



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

def required
  @required
end

#to_stateObject

Returns the value of attribute to_state.



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

def to_state
  @to_state
end

Instance Method Details

#actor_is_valid?(object, actor) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
# File 'lib/wesm/transition.rb', line 14

def actor_is_valid?(object, actor)
  @valid_actors.empty? || \
    @valid_actors.map { |valid_actor| compare_actor(valid_actor, object, actor) }.any?
end

#required_fields(object) ⇒ Object



19
20
21
# File 'lib/wesm/transition.rb', line 19

def required_fields(object)
  @required.select { |required_field| object.public_send(required_field).nil? }
end

#required_fields_present?(object) ⇒ Boolean

Returns:

  • (Boolean)


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

def required_fields_present?(object)
  @required.each do |required_field|
    return false if object.public_send(required_field).nil?
  end
  true
end

#run_performer_method(method, *args) ⇒ Object



44
45
46
47
# File 'lib/wesm/transition.rb', line 44

def run_performer_method(method, *args)
  return unless @performer && @performer.respond_to?(method)
  @performer.public_send(method, *args)
end

#valid_scope?(object) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/wesm/transition.rb', line 30

def valid_scope?(object)
  @scope.to_h.each do |field, value|
    return false unless \
      begin
        if value.is_a? Proc
          value.call(*[object.public_send(field), object][0...value.arity])
        else
          object.public_send(field) == value
        end
      end
  end
  true
end