Class: TimeTree::ActivityTree

Inherits:
Object
  • Object
show all
Defined in:
lib/time_tree/activity_tree.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeActivityTree

Returns a new instance of ActivityTree.



5
6
7
8
# File 'lib/time_tree/activity_tree.rb', line 5

def initialize
  @activities = {}
  @output = []
end

Instance Attribute Details

#activitiesObject (readonly)

Returns the value of attribute activities.



3
4
5
# File 'lib/time_tree/activity_tree.rb', line 3

def activities
  @activities
end

#outputObject (readonly)

Returns the value of attribute output.



3
4
5
# File 'lib/time_tree/activity_tree.rb', line 3

def output
  @output
end

Instance Method Details

#load(activities, minutes, description, level = 0, target = @activities) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/time_tree/activity_tree.rb', line 10

def load(activities, minutes, description, level = 0, target = @activities)
  activities.unshift 'All' if level == 0
  activity = activities.shift
  target[activity] = {:minutes => 0, :children => {}, :descriptions => []} unless target[activity]
  target[activity][:minutes] += minutes
  target[activity][:descriptions] << description if activities.size == 0 && description
  load(activities, minutes, description, level+1, target[activity][:children]) if activities.any?
end


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

def print
  puts output.join("\n")
end

#process(level = 0, target = activities) ⇒ Object



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

def process(level = 0, target = activities)
  target.sort.each do |activity, values|
    output << "%-25s %4d min (%s)  %s" % ["#{(1..level*2).to_a.map{' '}.join}#{activity}",
                                            values[:minutes],
                                            to_hrs_mins(values[:minutes]),
                                            values[:descriptions].uniq.join(' - ')]
    process(level+1, values[:children]) if values[:children].any?
  end
end

#to_hrs_mins(mins) ⇒ Object



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

def to_hrs_mins(mins)
  hours = (mins/60.0).floor
  "%d:%02d" % [hours, mins - (hours*60)]
end