class CommitRecord
Constants
- A_LONG_TIME
Attributes
events[RW]
file_path[RW]
Public Class Methods
create(project_directory, first_event_string = nil)
click to toggle source
# File lib/repo_timetracker/commit_record_class.rb, line 6 def create(project_directory, first_event_string = nil) commit = new(project_directory, first_event_string) commit.save end
load(commit_file_path)
click to toggle source
# File lib/repo_timetracker/commit_record_class.rb, line 11 def load(commit_file_path) YAML::load(IO.read(commit_file_path).to_s) end
new(project_directory, first_event_string = nil)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 10 def initialize(project_directory, first_event_string = nil) @project_name = project_directory.slice(/[^\/]*$/) @timeline_directory = "#{project_directory}/.repo_timeline" @file_path = generate_file_path(project_directory) @events = [] @events << Event.new(first_event_string) if first_event_string end
Public Instance Methods
==(other_commit)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 53 def ==(other_commit) all_events_equal(other_commit) and @file_path == other_commit.file_path end
add_events(events)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 34 def add_events(events) @events += events save end
clear_events()
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 43 def clear_events @events = [] save end
generate_new_event(event_string, following_time_spent = :working)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 19 def generate_new_event(event_string, following_time_spent = :working) @events << Event.new(event_string, following_time_spent) @events[-2].following_time_spent = :not_working if long_after_previous_event?(@events[-1]) save end
get_tail()
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 39 def get_tail @events[1..-1] end
save()
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 48 def save File.open(@file_path, "w") { |f| f.puts YAML::dump(self) } self end
total_time()
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 25 def total_time time = 0 @events.each_cons(2) do |pair| time += pair[1].time_recorded - pair[0].time_recorded if pair[0].following_time_spent_working? end time.round end
Private Instance Methods
all_events_equal(other_commit)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 86 def all_events_equal(other_commit) all_equal = true @events.each_with_index do |c, i| all_equal = false unless c == other_commit.events[i] end all_equal end
generate_file_name()
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 66 def generate_file_name time_string = Time.now.strftime('%y-%m-%d_%Hh%Mm%Ss') "#{@project_name}__commit__#{time_string}.yaml" end
generate_file_path(directory)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 62 def generate_file_path(directory) "#{@timeline_directory}/#{generate_file_name}" end
long_after_previous_event?(event)
click to toggle source
# File lib/repo_timetracker/commit_record.rb, line 71 def long_after_previous_event?(event) index_of_this_event = @events.index(event) previous_event = @events[index_of_this_event - 1] if previous_event time_difference = (event.time_recorded - previous_event.time_recorded).ceil time_difference >= A_LONG_TIME else false end end