Module: UberTask

Defined in:
lib/uber_task.rb,
lib/uber_task/error.rb,
lib/uber_task/event.rb,
lib/uber_task/version.rb,
lib/uber_task/internal.rb,
lib/uber_task/location.rb,
lib/uber_task/skip_task.rb,
lib/uber_task/retry_info.rb,
lib/uber_task/retry_task.rb,
lib/uber_task/task_context.rb,
lib/uber_task/event_handled.rb,
lib/uber_task/internal/path.rb

Defined Under Namespace

Modules: Internal Classes: Error, Event, EventHandled, Location, RetryInfo, RetryTask, SkipTask, TaskContext

Constant Summary collapse

VERSION =
'0.1.0'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject



19
20
21
22
23
24
25
26
# File 'lib/uber_task.rb', line 19

def logger
  @logger ||=
    if defined?(Rails.logger)
      Rails.logger
    else
      Logger.new($stdout, progname: name)
    end
end

Class Method Details

.currentObject



29
30
31
32
# File 'lib/uber_task.rb', line 29

def self.current
  Thread.current[:__uber_task_stack__] ||= []
  Thread.current[:__uber_task_stack__].last
end

.disable_tracingObject



34
35
36
# File 'lib/uber_task.rb', line 34

def self.disable_tracing
  Thread.current[:__uber_task_trace__] = false
end

.enable_tracingObject



38
39
40
# File 'lib/uber_task.rb', line 38

def self.enable_tracing
  Thread.current[:__uber_task_trace__] = true
end

.on_report(&block) ⇒ Object



42
43
44
# File 'lib/uber_task.rb', line 42

def self.on_report(&block)
  UberTask.current.handlers[:report] = block
end

.on_retry(report: true, wait: 0, &block) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/uber_task.rb', line 46

def self.on_retry(
  report: true,
  wait: 0,
  &block
)
  context = UberTask.current
  context.handlers[:retry] = block
  context.retry_info.report = report
  context.retry_info.wait = wait
end

.on_skip(&block) ⇒ Object



57
58
59
# File 'lib/uber_task.rb', line 57

def self.on_skip(&block)
  UberTask.current.handlers[:skip] = block
end

.on_subtask_error(&block) ⇒ Object



61
62
63
# File 'lib/uber_task.rb', line 61

def self.on_subtask_error(&block)
  UberTask.current.handlers[:subtask_error] = block
end

.on_success(&block) ⇒ Object



65
66
67
# File 'lib/uber_task.rb', line 65

def self.on_success(&block)
  UberTask.current.handlers[:success] = block
end

.report(level = Logger::INFO, &block) ⇒ Object



69
70
71
72
73
74
# File 'lib/uber_task.rb', line 69

def self.report(
  level = Logger::INFO,
  &block
)
  UberTask.current.report(level, &block)
end

.retry(reason: nil, wait: 0) ⇒ Object

Raises:



76
77
78
79
80
81
82
83
84
# File 'lib/uber_task.rb', line 76

def self.retry(reason: nil, wait: 0)
  if block_given?
    reason ||= yield
  end
  raise RetryTask.new(
    reason: reason,
    wait: wait,
  )
end

.run(name = nil, default_retry_count: nil, default_retry_wait: nil, retry_count: 0, vital: true, &block) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/uber_task.rb', line 86

def self.run(
  name = nil,
  default_retry_count: nil,
  default_retry_wait: nil,
  retry_count: 0,
  vital: true,
  &block
)
  parent = UberTask.current

  if parent
    if default_retry_count.nil?
      default_retry_count = parent.retry_info.default_retries
    end

    if default_retry_wait.nil?
      default_retry_wait = parent.retry_info.default_retry_wait
    end

    if retry_count < 1
      retry_count = default_retry_count || 0
    end
  end

  retry_info = RetryInfo.new(
    default_retries: default_retry_count,
    default_retry_wait: default_retry_wait,
    retries: retry_count,
  )

  context = TaskContext.new(
    name: name,
    retry_info: retry_info,
    vital: vital,
    &block
  )

  context.execute
end

.skip(reason = nil) ⇒ Object

Raises:



126
127
128
129
130
131
# File 'lib/uber_task.rb', line 126

def self.skip(reason = nil)
  if block_given?
    reason ||= yield
  end
  raise SkipTask.new(reason: reason)
end