Permalink
Cannot retrieve contributors at this time
163 lines (137 sloc)
3.8 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
jekyll/Rakefile
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
require "rubygems" | |
require "rake" | |
require "rdoc" | |
require "date" | |
require "yaml" | |
$LOAD_PATH.unshift File.expand_path("lib", __dir__) | |
require "jekyll/version" | |
Dir.glob("rake/**.rake").each { |f| import f } | |
############################################################################# | |
# | |
# Helper functions | |
# | |
############################################################################# | |
def name | |
"jekyll" | |
end | |
def version | |
Jekyll::VERSION | |
end | |
def docs_name | |
"#{name}-docs" | |
end | |
def docs_folder | |
"docs" | |
end | |
def gemspec_file | |
"#{name}.gemspec" | |
end | |
def gem_file | |
"#{name}-#{Gem::Version.new(version)}.gem" | |
end | |
def normalize_bullets(markdown) | |
markdown.gsub(%r!\n\s{2}\*{1}!, "\n-") | |
end | |
def linkify_prs(markdown) | |
markdown.gsub(%r!(?<\!&)#(\d+)!) do |word| | |
"[#{word}]({{ site.repository }}/issues/#{word.delete("#")})" | |
end | |
end | |
def linkify(markdown) | |
linkify_prs(markdown) | |
end | |
def liquid_escape(markdown) | |
markdown.gsub(%r!(`{[{%].+[}%]}`)!, "{% raw %}\\1{% endraw %}") | |
end | |
def custom_release_header_anchors(markdown) | |
header_regexp = %r!^(\d{1,2})\.(\d{1,2})\.(\d{1,2}) \/ \d{4}-\d{2}-\d{2}! | |
section_regexp = %r!^### \w+ \w+$! | |
markdown.split(%r!^##\s!).map do |release_notes| | |
_, major, minor, patch = *release_notes.match(header_regexp) | |
release_notes | |
.gsub(header_regexp, "\\0\n{: #v\\1-\\2-\\3}") | |
.gsub(section_regexp) { |section| "#{section}\n{: ##{slugify(section)}-v#{major}-#{minor}-#{patch}}" } | |
end.join("\n## ") | |
end | |
def slugify(header) | |
header.delete("#").strip.downcase.gsub(%r!\s+!, "-") | |
end | |
def remove_head_from_history(markdown) | |
index = markdown =~ %r!^##\s+\d+\.\d+\.\d+! | |
markdown[index..-1] | |
end | |
def converted_history(markdown) | |
remove_head_from_history( | |
custom_release_header_anchors( | |
liquid_escape( | |
linkify( | |
normalize_bullets(markdown) | |
) | |
) | |
) | |
) | |
end | |
def siteify_file(file, overrides_front_matter = {}) | |
abort "You seem to have misplaced your #{file} file. I can haz?" unless File.exist?(file) | |
title = begin | |
File.read(file).match(%r!\A# (.*)$!)[1] | |
rescue NoMethodError | |
File.basename(file, ".*").downcase.capitalize | |
end | |
slug = File.basename(file, ".markdown").downcase | |
front_matter = { | |
"title" => title, | |
"permalink" => "/docs/#{slug}/", | |
"note" => "This file is autogenerated. Edit /#{file} instead.", | |
}.merge(overrides_front_matter) | |
contents = "#{front_matter.to_yaml}---\n\n#{content_for(file)}" | |
File.write("#{docs_folder}/_docs/#{slug}.md", contents) | |
end | |
def content_for(file) | |
contents = File.read(file) | |
case file | |
when "History.markdown" | |
converted_history(contents) | |
else | |
contents.gsub(%r!\A# .*\n\n?!, "") | |
end | |
end | |
############################################################################# | |
# | |
# Standard tasks | |
# | |
############################################################################# | |
multitask :default => [:test, :features] | |
task :spec => :test | |
require "rake/testtask" | |
Rake::TestTask.new(:test) do |test| | |
test.libs << "lib" << "test" | |
test.pattern = "test/**/test_*.rb" | |
test.verbose = true | |
end | |
require "rdoc/task" | |
Rake::RDocTask.new do |rdoc| | |
rdoc.rdoc_dir = "rdoc" | |
rdoc.title = "#{name} #{version}" | |
rdoc.rdoc_files.include("README*") | |
rdoc.rdoc_files.include("lib/**/*.rb") | |
end | |
begin | |
require "cucumber/rake/task" | |
Cucumber::Rake::Task.new(:features) do |t| | |
t.profile = "travis" | |
end | |
Cucumber::Rake::Task.new(:"features:html", "Run Cucumber features and produce HTML output") do |t| | |
t.profile = "html_report" | |
end | |
rescue LoadError | |
desc "Cucumber rake task not available" | |
task :features do | |
abort "Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin" | |
end | |
end | |
desc "Open an irb session preloaded with this library" | |
task :console do | |
sh "irb -r ./lib/#{name}.rb" | |
end |