Module: Pallets::DSL::Workflow

Included in:
Workflow
Defined in:
lib/pallets/dsl/workflow.rb

Instance Method Summary collapse

Instance Method Details

#task(arg = nil, as: nil, depends_on: nil, max_failures: nil, **kwargs) ⇒ Object

Raises:

  • (ArgumentError)


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/pallets/dsl/workflow.rb', line 4

def task(arg=nil, as: nil, depends_on: nil, max_failures: nil, **kwargs)
  # Have to work more to keep Pallets' nice DSL valid in Ruby 2.7
  arg = !kwargs.empty? ? kwargs : arg
  raise ArgumentError, 'Task is incorrectly defined. It must receive '\
                       'either a name, or a name => dependencies pair as '\
                       'the first argument' unless arg

  klass, dependencies = case arg
  when Hash
    # The `task Foo => Bar` notation
    arg.first
  else
    # The `task Foo, depends_on: Bar` notation
    [arg, depends_on]
  end

  task_class = klass.to_s
  as ||= task_class

  dependencies = Array(dependencies).compact.uniq.map(&:to_s)
  graph.add(as, dependencies)

  task_config[as] = {
    'workflow_class' => self.name,
    'task_class' => task_class,
    'max_failures' => max_failures || Pallets.configuration.max_failures
  }

  nil
end