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