Module: Timet::TagDistributionFormatting

Included in:
TagDistribution, Timet::TagDistribution::Context
Defined in:
lib/timet/tag_distribution.rb

Overview

Helper module for formatting tag distribution displays

Class Method Summary collapse

Class Method Details

.build_average_part(metrics) ⇒ Object



47
48
49
50
# File 'lib/timet/tag_distribution.rb', line 47

def build_average_part(metrics)
  " On average, each task took #{"#{metrics[:avg_minutes]}min".bold}, " \
    'which helps in understanding the typical time commitment per task.'
end

.build_duration_part(duration) ⇒ Object



41
42
43
44
45
# File 'lib/timet/tag_distribution.rb', line 41

def build_duration_part(duration)
  total_hours = (duration / 3600.0).round(1)
  " The cumulative time spent was #{"#{total_hours}h".bold}, " \
    'indicating the overall effort dedicated to this area.'
end

.build_major_summary(major_categories) ⇒ Object



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

def build_major_summary(major_categories)
  total_percentage = major_categories.sum(&:last)
  category_names = major_categories.map { |c, _| "'#{c.capitalize}'" }.join(' and ')
  ["\nTogether, #{category_names} dominate the time spent, " \
   "accounting for nearly #{"#{total_percentage.round}%".bold} of the total.".white]
end

.calculate_value_and_bar_length(duration, total) ⇒ Object



12
13
14
15
16
17
# File 'lib/timet/tag_distribution.rb', line 12

def calculate_value_and_bar_length(duration, total)
  value = duration.to_f / total
  percentage_value = (value * 100).round(1)
  bar_length = (value * TagDistribution::MAX_BAR_LENGTH).round
  [percentage_value, bar_length]
end

.generate_horizontal_bar(bar_length, color_index) ⇒ Object



19
20
21
# File 'lib/timet/tag_distribution.rb', line 19

def generate_horizontal_bar(bar_length, color_index)
  (TagDistribution::BLOCK_CHAR * bar_length).to_s.color(color_index + 1)
end

.generate_stats(tag, time_stats) ⇒ Object



23
24
25
26
27
28
# File 'lib/timet/tag_distribution.rb', line 23

def generate_stats(tag, time_stats)
  total_hours = (time_stats.total_duration_by_tag[tag] / 3600.0).round(1)
  avg_minutes = (time_stats.average_by_tag[tag] / 60.0).round(1)
  sd_minutes = (time_stats.standard_deviation_by_tag[tag] / 60).round(1)
  "T: #{total_hours}h, AVG: #{avg_minutes}min SD: #{sd_minutes}min".gray
end

.high_sd_message(sd_min) ⇒ Object



52
53
54
55
56
57
# File 'lib/timet/tag_distribution.rb', line 52

def high_sd_message(sd_min)
  " A high standard deviation of #{"#{sd_min}min".bold} " \
  'relative to the average suggests significant variability in task durations. ' \
  'This could imply inconsistent task definitions, varying complexity, ' \
  'or frequent interruptions.'.red
end

.introduction(total) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/timet/tag_distribution.rb', line 30

def introduction(total)
  total_hours = (total / 3600.0).round(1)
  [
    "\n---",
    'Time Report Summary'.bold,
    'This report provides a detailed breakdown of time spent ' \
    "across various categories, totaling #{"#{total_hours}h".bold} of tracked work.".white,
    "\n"
  ]
end

.low_sd_message(sd_min) ⇒ Object



64
65
66
67
# File 'lib/timet/tag_distribution.rb', line 64

def low_sd_message(sd_min)
  " A low standard deviation of #{"#{sd_min}min".bold} " \
  'suggests that task durations were quite consistent and predictable.'.green
end

.moderate_sd_message(sd_min) ⇒ Object



59
60
61
62
# File 'lib/timet/tag_distribution.rb', line 59

def moderate_sd_message(sd_min)
  " A moderate standard deviation of #{"#{sd_min}min".bold} " \
  'indicates some variation in task durations.'.blue
end