class RepoTimeline
Public Class Methods
find_in_or_above(directory)
click to toggle source
# File lib/repo_timetracker/repo_timeline_class.rb, line 11 def find_in_or_above(directory) return nil if directory.nil? if contains_repo? directory directory elsif directory.slice!(/\/\w+(\/?)$/) find_in_or_above(directory) else nil end end
load_or_initialize_for(directory_called_from)
click to toggle source
# File lib/repo_timetracker/repo_timeline_class.rb, line 4 def load_or_initialize_for(directory_called_from) directory = find_in_or_above(directory_called_from) return nil if directory.nil? RepoTimeline.new(directory) end
new(repo_directory)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 8 def initialize(repo_directory) @repo_directory = repo_directory.sub(/\/$/, '') #no trailing slash @project_name = @repo_directory.slice(/[^\/]*$/) @timeline_directory = initialize_timeline_directory_for(@repo_directory) @commit_records = load_commit_records end
Private Class Methods
contains_repo?(directory_path)
click to toggle source
# File lib/repo_timetracker/repo_timeline_class.rb, line 27 def contains_repo?(directory_path) Dir.glob("#{directory_path}/.git").any? end
Public Instance Methods
add_event(event_string)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 16 def add_event(event_string) case event_string when /git commit --amend/ amend(event_string) when /git commit/ commit(event_string) else staging.generate_new_event(event_string) end end
current_commit_time()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 29 def current_commit_time staging.total_time end
project_time()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 33 def project_time time = 0 @commit_records.inject(0) { |total_time, cr| total_time + cr.total_time } end
Private Instance Methods
amend(event_string)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 53 def amend(event_string) last_completed_commit.add_events(staging.get_tail) last_completed_commit.generate_new_event(event_string) staging.clear_events staging.generate_new_event(event_string) end
commit(event_string)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 44 def commit(event_string) staging.generate_new_event(event_string) @commit_records << CommitRecord.create( @repo_directory, event_string ) end
commit_file_paths()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 99 def commit_file_paths dir_filenames = Dir.entries(@timeline_directory) commit_filenames = dir_filenames.select { |f| f.include? '__commit__' } commit_filenames.map { |fn| "#{@timeline_directory}/#{fn}" } end
ensure_gitignored(gitignore_path)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 91 def ensure_gitignored(gitignore_path) FileUtils.touch(gitignore_path) unless File.readlines(gitignore_path).grep(/\.repo_timeline/).any? `echo '\n.repo_timeline' >> #{gitignore_path}` end end
initialize_timeline_directory_for(repo_directory)
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 81 def initialize_timeline_directory_for(repo_directory) timeline_directory = "#{repo_directory}/.repo_timeline" gitignore_path = "#{repo_directory}/.gitignore" ensure_gitignored(gitignore_path) FileUtils.mkdir_p(timeline_directory) unless File.directory?(timeline_directory) timeline_directory end
last_completed_commit()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 69 def last_completed_commit @commit_records[-2] end
load_commit_records()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 73 def load_commit_records if commit_file_paths.empty? CommitRecord.create(@repo_directory) end commit_file_paths.map { |p| CommitRecord.load(p) } end
staging()
click to toggle source
# File lib/repo_timetracker/repo_timeline.rb, line 61 def staging if @commit_records.empty? @commit_records << CommitRecord.create(@timeline_directory) else @commit_records.last end end