Class: Stepped::Registry

Inherits:
Object
  • Object
show all
Defined in:
app/models/stepped/registry.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.definitionsObject (readonly)

Returns the value of attribute definitions.



6
7
8
# File 'app/models/stepped/registry.rb', line 6

def definitions
  @definitions
end

.job_classesObject (readonly)

Returns the value of attribute job_classes.



6
7
8
# File 'app/models/stepped/registry.rb', line 6

def job_classes
  @job_classes
end

Class Method Details

.add(actor_class, action_name, outbound: false, timeout: nil, job: nil, &block) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/models/stepped/registry.rb', line 12

def add(actor_class, action_name, outbound: false, timeout: nil, job: nil, &block)
  if job && @job_classes.exclude?(job)
    @job_classes.push job
  end

  add_definition actor_class, action_name, Stepped::Definition.new(
    actor_class:,
    action_name:,
    outbound:,
    timeout:,
    job:,
    block:
  )
end

.add_definition(actor_class, action_name, definition) ⇒ Object



27
28
29
30
31
# File 'app/models/stepped/registry.rb', line 27

def add_definition(actor_class, action_name, definition)
  class_key = key actor_class
  @definitions[class_key] ||= Concurrent::Hash.new
  @definitions[class_key][action_name.to_s] = definition
end

.append_after_callback(actor_class, action_name, *statuses, &block) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'app/models/stepped/registry.rb', line 43

def append_after_callback(actor_class, action_name, *statuses, &block)
  definition = find_or_add actor_class, action_name

  unless definition.actor_class == actor_class
    definition = add_definition actor_class, action_name, definition.duplicate_as(actor_class)
  end

  definition.after(*statuses, &block)
end

.find(actor_class, action_name) ⇒ Object



53
54
55
56
57
58
59
60
# File 'app/models/stepped/registry.rb', line 53

def find(actor_class, action_name)
  actor_class.ancestors.each do |ancestor|
    definition = @definitions.dig key(ancestor), action_name.to_s
    return definition if definition
  end

  nil
end

.find_or_add(actor_class, action_name) ⇒ Object



62
63
64
# File 'app/models/stepped/registry.rb', line 62

def find_or_add(actor_class, action_name)
  find(actor_class, action_name) || add(actor_class, action_name)
end

.key(klass) ⇒ Object



8
9
10
# File 'app/models/stepped/registry.rb', line 8

def key(klass)
  "#{klass.name}/#{klass.object_id}"
end

.prepend_step(actor_class, action_name, &step_block) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'app/models/stepped/registry.rb', line 33

def prepend_step(actor_class, action_name, &step_block)
  definition = find_or_add actor_class, action_name

  unless definition.actor_class == actor_class
    definition = add_definition actor_class, action_name, definition.duplicate_as(actor_class)
  end

  definition.prepend_step(&step_block)
end