164 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # 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 -rubygems -r ./lib/#{name}.rb"
 | |
| end
 |