Class: Sidekiq::Tasks::Strategies::Base

Inherits:
Object
  • Object
show all
Includes:
Validations
Defined in:
lib/sidekiq/tasks/strategies/base.rb

Direct Known Subclasses

RakeTask

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validations

validate_array_classes!, validate_class!, validate_expected_values!, validate_hash_option!

Constructor Details

#initialize(rules: []) ⇒ Base

Initializes a strategy with the given rules.

Parameters:

Raises:



17
18
19
20
21
# File 'lib/sidekiq/tasks/strategies/base.rb', line 17

def initialize(rules: [])
  @rules = rules

  validate_array_classes!(rules, [Sidekiq::Tasks::Strategies::Rules::Base], "rules")
end

Instance Attribute Details

#rulesArray<Sidekiq::Tasks::Strategies::Rules::Base> (readonly)

A set of rules to fetch tasks.

Returns:

See Also:

  • #filtered_tasks


11
12
13
# File 'lib/sidekiq/tasks/strategies/base.rb', line 11

def rules
  @rules
end

Instance Method Details

#build_task_metadata(_task) ⇒ Sidekiq::Tasks::TaskMetadata

This method is abstract.

Subclasses must implement this method.

Factory method to build the metadata for a task.

Parameters:

  • task (Object)

    The task to build the metadata for.

Returns:

Raises:



73
74
75
# File 'lib/sidekiq/tasks/strategies/base.rb', line 73

def (_task)
  raise NotImplementedError, "Strategy must implement #build_task_metadata"
end

#enqueue_task(name, params = {}) ⇒ String

Enqueues a task with the given parameters and returns the JID.

Parameters:

  • name (String)

    The name of the task to enqueue.

  • params (Hash) (defaults to: {})

    Parameters to pass to the task.

Returns:

  • (String)

    The JID of the sidekiq job that will execute the task.



55
56
57
# File 'lib/sidekiq/tasks/strategies/base.rb', line 55

def enqueue_task(name, params = {})
  Sidekiq::Tasks::Job.perform_async(name, params.to_json)
end

#execute_task(_name, _args = nil) ⇒ Object

Note:

Consider accepting a ‘Sidekiq::Tasks::Task` instead of a task name.

Executes a task with the given parameters.

Parameters:

  • name (String)

    The name of the task to execute.

  • args (Hash, NilClass)

    Arguments to pass to the task.

Raises:



46
47
48
# File 'lib/sidekiq/tasks/strategies/base.rb', line 46

def execute_task(_name, _args = nil)
  raise NotImplementedError, "Strategy must implement #execute_task"
end

#load_tasksArray

This method is abstract.

Subclasses must implement this method.

Returns all the raw tasks that should be filtered.

Returns:

  • (Array)

    A list of tasks to be filtered.

Raises:



35
36
37
# File 'lib/sidekiq/tasks/strategies/base.rb', line 35

def load_tasks
  raise NotImplementedError, "Strategy must implement #load_tasks"
end

#nameString

Returns the name of the strategy.

Returns:

  • (String)

    The name of the class without module namespaces.



26
27
28
# File 'lib/sidekiq/tasks/strategies/base.rb', line 26

def name
  self.class.name.split("::").last
end

#tasksArray<Sidekiq::Tasks::Task>

Returns all the tasks that should be executed.

Returns:



62
63
64
65
66
# File 'lib/sidekiq/tasks/strategies/base.rb', line 62

def tasks
  filtered_tasks = load_tasks.select { |task| respects_rules?(task) }

  filtered_tasks.map { |task| Sidekiq::Tasks::Task.new(metadata: (task), strategy: self) }
end