# 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_users(markdown) markdown.gsub(%r!(@\w+)!) do |username| "[#{username}](https://github.com/#{username.delete("@")})" end end def linkify(markdown) linkify_users(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{: ##{sluffigy(section)}-v#{major}-#{minor}-#{patch}}" } end.join("\n## ") end def sluffigy(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 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 -rubygems -r ./lib/#{name}.rb" end