# frozen_string_literal: true module Paperwork ## # task generators for building with middleman module Tasks require "rake" ## # main task generator for building the document # class Document < Paperwork::Tasks::Base attr_reader :dir include Rake::DSL def initialize(name, sources, *dependencies) @dir = Paperwork::Tasks::Template.new(name).dir sources.each do |src| dst = get_destination(File.join(self.dir, "source"), src) BuildFile.new(dst, src) dependencies << dst end dependencies << RootHelpers.new(@dir, sources.first).name super(name, *dependencies) end def tasks tasks_build tasks_nested end private def get_destination(dst_base, src) # rubocop:disable Metrics/AbcSize nested_base = File.dirname(src) if nested_base == "." nested_base = dst_base else nested_base = File.join(dst_base, nested_base) end ext = File.extname(src) case ext when ".md" File.join(nested_base, File.basename(src)).gsub(".md", ".html.md") when ".scss" Paperwork::Config[:custom_css] << File.basename(src, ext) File.join(dst_base, "stylesheets", File.basename(src)).gsub(".scss", ".css.scss") when ".css" Paperwork::Config[:custom_css] << File.basename(src, ext) File.join(dst_base, "stylesheets", File.basename(src)) when ".js" Paperwork::Config[:custom_js] << File.basename(src, ext) File.join(dst_base, "javascripts", File.basename(src)) when ".yml" File.join(dst_base, "..", "data", File.basename(src)) else File.join(dst_base, "images", File.basename(src)) end end def tasks_build # rubocop:disable Metrics/AbcSize namespace :paperwork do desc "build documentation for '#{self.name}'" task self.name => self.dependencies do verbose_flag = Paperwork::Config[:verbose] ? " --verbose" : "" Dir.chdir(self.dir) do Bundler.with_unbundled_env do Process.spawn( "bundle exec middleman build#{verbose_flag}", out: :out, in: :in, err: :err ) end Process.waitall end puts puts "...Done!" puts "build artifacts are located in #{File.join(self.dir, "build")}" end end end def tasks_nested # rubocop:disable Metrics/AbcSize namespace :paperwork do namespace self.name do task build: ["paperwork:#{self.name}"] desc "rebuild documentation from scratch for '#{self.name}'" task rebuild: [:clean, :build] desc "build documentation for '#{self.name}' with verbose output" task build_verbose: [:set_verbose, :build] task :set_verbose do Paperwork::Config[:verbose] = true end desc "clean documentation build directory for '#{self.name}'" task :clean do rm_rf self.dir end end end end end end end