metanorma/metanorma-cli

View on GitHub
lib/metanorma/cli/commands/site.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "pathname"
require "metanorma/cli/site_generator"
require "metanorma/cli/thor_with_config"

module Metanorma
  module Cli
    module Commands
      class Site < ThorWithConfig
        SITE_OUTPUT_DIRNAME = "_site".freeze

        desc "generate [SOURCE_PATH]", "Generate site from collection"
        option :config, aliases: "-c", desc: "Metanorma configuration file"
        option(
          :output_dir,
          aliases: "-o",
          default: Pathname.new(Dir.pwd).join(SITE_OUTPUT_DIRNAME).to_s,
          desc: "Output directory for generated site",
        )
        option :agree_to_terms, type: :boolean, desc: "Agree / Disagree with all third-party licensing terms "\
                                                      "presented (WARNING: do know what you are agreeing with!)"
        option :no_install_fonts, type: :boolean, desc: "Skip the font installation process"
        option :continue_without_fonts, type: :boolean, desc: "Continue processing even when fonts are missing"
        option :stylesheet, alias: "-s", desc: "Stylesheet file path for rendering HTML page"
        option :template_dir, alias: "-t", desc: "Liquid template directory to render site design"
        option(
          :strict,
          aliases: "-S",
          type: :boolean,
          desc: "Strict compilation: abort if there are any errors",
        )

        def generate(source_path = Dir.pwd)
          Cli::SiteGenerator.generate(
            source_path,
            options,
            filter_compile_options(options),
          )
          UI.say("Site has been generated at #{options[:output_dir]}")
        rescue Cli::Errors::InvalidManifestFileError
          UI.error("Invalid data in: #{options[:config]}")
        end
      end
    end
  end
end