module SDoc::GitHub

Public Instance Methods

github_url(path) click to toggle source
# File lib/sdoc/github.rb, line 2
def github_url(path)
  return false unless have_git?

  unless @github_url_cache.has_key? path
    @github_url_cache[path] = false
    file = @store.find_file_named(path)
    if file
      base_url = repository_url(path)
      if base_url
        relative_url = path_relative_to_repository(path)
        @github_url_cache[path] = "#{base_url}#{last_commit_sha1}#{relative_url}"
      end
    end
  end
  @github_url_cache[path]
end

Protected Instance Methods

have_git?() click to toggle source
# File lib/sdoc/github.rb, line 21
def have_git?
  @have_git = system('git --version > /dev/null 2>&1') if @have_git.nil?
  @have_git
end
last_commit_sha1() click to toggle source
# File lib/sdoc/github.rb, line 26
def last_commit_sha1
  return @sha1 if defined?(@sha1)

  @sha1 = Dir.chdir(base_dir) do
    `git rev-parse HEAD`.chomp
  end
end
path_relative_to_repository(path) click to toggle source
# File lib/sdoc/github.rb, line 45
def path_relative_to_repository(path)
  absolute_path = File.join(base_dir, path)
  root = path_to_git_dir(File.dirname(absolute_path))
  absolute_path[root.size..absolute_path.size]
end
path_to_git_dir(path) click to toggle source
# File lib/sdoc/github.rb, line 51
def path_to_git_dir(path)
  while !path.empty? && path != '.'
    if (File.exist? File.join(path, '.git'))
      return path
    end
    path = File.dirname(path)
  end
  ''
end
repository_url(path) click to toggle source
# File lib/sdoc/github.rb, line 34
def repository_url(path)
  return @repository_url if defined?(@repository_url)

  s = Dir.chdir(File.join(base_dir, File.dirname(path))) do
    `git config --get remote.origin.url`
  end

  m = s.match(%r{github.com[/:](.*)\.git$})
  @repository_url = m ? "https://github.com/#{m[1]}/blob/" : false
end