class DocumentGenerator::Repository

Attributes

url[RW]

Public Class Methods

default_dirname() click to toggle source
# File lib/document_generator/repository.rb, line 13
def self.default_dirname
  '_layouts'
end
default_relative_filename() click to toggle source
# File lib/document_generator/repository.rb, line 17
def self.default_relative_filename
  File.join(default_dirname, 'default.html')
end
menu_dirname() click to toggle source
menu_relative_filename() click to toggle source
new(url) click to toggle source
# File lib/document_generator/repository.rb, line 21
def initialize(url)
  @url = url
end

Public Instance Methods

base_url() click to toggle source
# File lib/document_generator/repository.rb, line 25
def base_url
  "https://#{uri.host}#{uri.path}/"
end
commits() { |commit| ... } click to toggle source
# File lib/document_generator/repository.rb, line 44
def commits
  Dir.mktmpdir do |path|
    repo = Git.clone(url, name, path: path)

    # TODO: Allow options to influence branch, number of commits, etc.
    repo.log(nil).reverse_each.map do |git_commit|
      yield Commit.new(base_url, git_commit)
    end
  end
end
generate() click to toggle source
# File lib/document_generator/repository.rb, line 33
def generate
  prepare

  File.open(Repository.menu_relative_filename, 'w') do |menu_writer|
    commits do |commit|
      menu_writer.write(commit.link)
      commit.create
    end
  end
end
name() click to toggle source
# File lib/document_generator/repository.rb, line 29
def name
  uri.path.split('/')[-1]
end

Private Instance Methods

copy_layout() click to toggle source
# File lib/document_generator/repository.rb, line 61
def copy_layout
  return if File.exists?(Repository.default_relative_filename)

  Dir.mkdir(Repository.default_dirname) unless Dir.exists?(Repository.default_dirname)

  src = File.expand_path('../../../assets/_layouts/default.html', __FILE__)
  dest = Repository.default_relative_filename

  FileUtils.copy_file(src, dest)
end
normalized_url() click to toggle source
# File lib/document_generator/repository.rb, line 72
def normalized_url
  replacements = [
    [%r(\Agit@github\.com:), 'git://github.com/'],
    [%r(\.git\Z), '']
  ]

  replacements.each do |pattern, replacement|
    url.gsub!(pattern, replacement)
  end

  url
end
prepare() click to toggle source
# File lib/document_generator/repository.rb, line 56
def prepare
  Dir.mkdir(Repository.menu_dirname) unless Dir.exists?(Repository.menu_dirname)
  copy_layout
end
uri() click to toggle source
# File lib/document_generator/repository.rb, line 85
def uri
  Addressable::URI.parse(normalized_url)
end