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
- .build_average_part(metrics) ⇒ Object
- .build_duration_part(duration) ⇒ Object
- .build_major_summary(major_categories) ⇒ Object
- .calculate_value_and_bar_length(duration, total) ⇒ Object
- .generate_horizontal_bar(bar_length, color_index) ⇒ Object
- .generate_stats(tag, time_stats) ⇒ Object
- .high_sd_message(sd_min) ⇒ Object
- .introduction(total) ⇒ Object
- .low_sd_message(sd_min) ⇒ Object
- .moderate_sd_message(sd_min) ⇒ Object
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 (duration, total) value = duration.to_f / total percentage_value = (value * 100).round(1) = (value * TagDistribution::MAX_BAR_LENGTH).round [percentage_value, ] end |
.generate_horizontal_bar(bar_length, color_index) ⇒ Object
19 20 21 |
# File 'lib/timet/tag_distribution.rb', line 19 def (, color_index) (TagDistribution::BLOCK_CHAR * ).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 (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 (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 (sd_min) " A moderate standard deviation of #{"#{sd_min}min".bold} " \ 'indicates some variation in task durations.'.blue end |