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