class Paperwork::Tasks::Document

main task generator for building the document

Attributes

dir[R]
sources_map[R]

Public Class Methods

new(name, sources, *dependencies) click to toggle source
Calls superclass method Paperwork::Tasks::Base::new
# File lib/paperwork/tasks/document.rb, line 18
def initialize(name, sources, *dependencies)
    @dir = Paperwork::Tasks::Template.new(name).dir

    @sources_map = {}
    sources.each do |src|
        dst = get_destination(File.join(self.dir, "source"), src)
        BuildFile.new(dst, src)
        sources_map[src] = dst
        dependencies << dst
    end

    dependencies << RootHelpers.new(@dir, sources.first).name
    super(name, *dependencies)
end

Public Instance Methods

tasks() click to toggle source
# File lib/paperwork/tasks/document.rb, line 33
def tasks
    tasks_build
    tasks_nested
end

Private Instance Methods

get_destination(dst_base, src) click to toggle source
# File lib/paperwork/tasks/document.rb, line 40
def get_destination(dst_base, src) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
    nested_base = File.dirname(src)
    nested_base = if nested_base == "."
                      dst_base
                  else
                      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
listen_to_sources() click to toggle source
# File lib/paperwork/tasks/document.rb, line 132
def listen_to_sources
    sources = {}
    self.sources_map.each do |src, dst|
        sources[File.absolute_path(src)] = dst
    end

    ignore_list = [/#{Paperwork::Config[:build_root]}/]
    Listen.to(Dir.pwd, ignore: ignore_list) do |modified, added, removed|
        (modified + added + removed).each do |src|
            dst = sources[src]
            unless dst.nil?
                puts "## updating #{src}"
                FileUtils.cp src, dst
            end
        end
    end.start
end
tasks_build() click to toggle source
# File lib/paperwork/tasks/document.rb, line 68
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
                cmd = "bundle exec middleman build#{verbose_flag}"
                if defined? Bundler
                    Bundler.with_unbundled_env do
                        Process.spawn(cmd, out: :out, in: :in, err: :err)
                    end
                else
                    Process.spawn(cmd, 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
tasks_nested() click to toggle source
# File lib/paperwork/tasks/document.rb, line 91
def tasks_nested # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
    namespace :paperwork do # rubocop:disable Metrics/BlockLength
        namespace self.name do # rubocop:disable Metrics/BlockLength
            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

            desc "start middleman server for editing documents and get visual feedback with live reload"
            task server: :build do
                Dir.chdir(self.dir) do
                    cmd = "bundle exec middleman server"
                    if defined? Bundler
                        Bundler.with_unbundled_env do
                            Process.spawn(cmd, out: :out, in: :in, err: :err)
                        end
                    else
                        Process.spawn(cmd, out: :out, in: :in, err: :err)
                    end
                end

                listen_to_sources

                Process.waitall
            end
        end
    end
end