class ProgressMonitor::Task

Constants

PERCENTAGE_CALCULATORS

Attributes

io[RW]
name[RW]

Public Class Methods

new(name, parent=nil) click to toggle source
# File lib/progress_monitor/task.rb, line 18
def initialize(name, parent=nil)
  @name = name
  @parent = parent
  @subtasks = []
  @status = :new
end

Public Instance Methods

add_and_run_subtasks(items, name_fn, &run_fn) click to toggle source
# File lib/progress_monitor/task.rb, line 57
def add_and_run_subtasks(items, name_fn, &run_fn)
  items.map do |item|
    [item, add_subtask(name_fn.call(item))]
  end.each do |args|
    run_fn.call(*args)
  end
end
add_subtask(name) click to toggle source
# File lib/progress_monitor/task.rb, line 47
def add_subtask(name)
  Task.new(name, self).tap do |task|
    @subtasks << task
  end
end
add_subtasks(*names) click to toggle source
# File lib/progress_monitor/task.rb, line 53
def add_subtasks(*names)
  names.map &method(:add_subtask)
end
completion_percent() click to toggle source
# File lib/progress_monitor/task.rb, line 65
def completion_percent
  PERCENTAGE_CALCULATORS.each do |calculator|
    result = calculator.new(self).perform
    return result if result
  end
  :unknown
rescue => e
  puts e.inspect
  :unknown
end
duration() click to toggle source
# File lib/progress_monitor/task.rb, line 43
def duration
  finished_at - started_at
end
finish() click to toggle source
# File lib/progress_monitor/task.rb, line 34
def finish
  return unless status == :started

  parent.finish_if_subtasks_finished
  @status = :finished
  @finished_at = Time.now
  notify_status
end
start() click to toggle source
# File lib/progress_monitor/task.rb, line 25
def start
  return unless status == :new

  parent.start if parent
  @status = :started
  @started_at = Time.now
  notify_status
end

Protected Instance Methods

finish_if_subtasks_finished() click to toggle source
# File lib/progress_monitor/task.rb, line 84
def finish_if_subtasks_finished
  finish if subtasks.all?{|st| st.status == :finished}
end
notify(task, event, details) click to toggle source
# File lib/progress_monitor/task.rb, line 78
def notify(task, event, details)
  parent.notify task, event, details if parent
  changed
  notify_observers task, event, details
end

Private Instance Methods

notify_status() click to toggle source
# File lib/progress_monitor/task.rb, line 90
def notify_status
  notify self, :status, {status: status}
end