class Deeds::Journal
Attributes
file[R]
hours_per_work_day[R]
work_days_per_week[R]
Public Class Methods
new(file:, hours_per_work_day: 8, work_days_per_week: 5)
click to toggle source
# File lib/deeds/journal.rb, line 8 def initialize(file:, hours_per_work_day: 8, work_days_per_week: 5) @file = Pathname.new(file) @hours_per_work_day = hours_per_work_day @work_days_per_week = work_days_per_week end
Public Instance Methods
average_hours_per_day()
click to toggle source
# File lib/deeds/journal.rb, line 59 def average_hours_per_day return 0 if average_minutes_per_day.zero? average_minutes_per_day / 60 end
average_minutes_per_day()
click to toggle source
# File lib/deeds/journal.rb, line 54 def average_minutes_per_day return 0 if minutes.zero? minutes / days_count end
days_count()
click to toggle source
# File lib/deeds/journal.rb, line 50 def days_count entries_per_day.keys.count end
days_with_more_than_one_entry()
click to toggle source
# File lib/deeds/journal.rb, line 72 def days_with_more_than_one_entry entries_per_day.values.select { |entries| entries.count > 1 }.count end
dump()
click to toggle source
# File lib/deeds/journal.rb, line 14 def dump entries.map(&:dump).join "\n" end
entries()
click to toggle source
# File lib/deeds/journal.rb, line 18 def entries all_entries.reject(&:error) end
first_monday()
click to toggle source
# File lib/deeds/journal.rb, line 64 def first_monday @first_monday ||= entries.sort_by(&:mjd).detect(&:monday?).try!(:date) end
full_time_days()
click to toggle source
# File lib/deeds/journal.rb, line 38 def full_time_days hours / hours_per_work_day end
full_time_months()
click to toggle source
# File lib/deeds/journal.rb, line 46 def full_time_months full_time_weeks / (52 / 12) end
full_time_weeks()
click to toggle source
# File lib/deeds/journal.rb, line 42 def full_time_weeks full_time_days / work_days_per_week end
hours()
click to toggle source
# File lib/deeds/journal.rb, line 34 def hours minutes / 60 end
invalid_entries()
click to toggle source
# File lib/deeds/journal.rb, line 22 def invalid_entries all_entries.select(&:error) end
last_sunday()
click to toggle source
# File lib/deeds/journal.rb, line 68 def last_sunday @last_sunday ||= entries.sort_by(&:mjd).reverse.detect(&:sunday?).try!(:date) end
minutes()
click to toggle source
# File lib/deeds/journal.rb, line 30 def minutes BigDecimal.new entries.sum(&:minutes) end
void_entries()
click to toggle source
# File lib/deeds/journal.rb, line 26 def void_entries all_entries.reject(&:minutes?) end
Private Instance Methods
all_entries()
click to toggle source
# File lib/deeds/journal.rb, line 80 def all_entries @all_entries ||= all_entries! end
all_entries!()
click to toggle source
# File lib/deeds/journal.rb, line 84 def all_entries! result = [] file.each_line.with_index do |line, index| next if line.blank? next if line.strip.start_with?('#') result << Journals::Entry.new(input: line.chomp, line: index + 1) end result end
entries_per_day()
click to toggle source
# File lib/deeds/journal.rb, line 94 def entries_per_day @entries_per_day ||= entries_per_day! end
entries_per_day!()
click to toggle source
# File lib/deeds/journal.rb, line 98 def entries_per_day! result = {} entries.each do |entry| next if entry.date.nil? result[entry.date.mjd] ||= [] result[entry.date.mjd] << entry end result end