Sha256: 9cd83210e134a224654065e3755ea8f498563a856f08bd35435e5a249621ce0a

Contents?: true

Size: 1.59 KB

Versions: 4

Compression:

Stored size: 1.59 KB

Contents

require 'thor'
require 'pathname'
require_relative 'prerequisite'

module Revealing
  PREREQUISITES = [
    Prerequisite.new('curl'),
    Prerequisite.new('gm', 'graphicsmagick'),
    Prerequisite.new('gpp'),
    Prerequisite.new('pandoc'),
  ]

  class CLI < Thor
    def self.exit_on_failure?
      true
    end

    desc 'doctor', 'Checks whether your system is fit for revealing.'
    def doctor
      PREREQUISITES.each do |tool|
        if tool.available?
          puts "OK: #{tool} is available."
        else
          warn "Error: #{tool.command} is not available. Install it using `#{tool.install_hint}`."
        end
      end
    end

    desc 'init [DIRECTORY]', 'initialize a new revealing project in DIRECTORY. Defaults to the current working directory.'
    def init(directory = '.')
      project_directory = Pathname(directory)
      project_directory.mkdir unless project_directory.exist?

      templates_directory = Pathname(__dir__) / '../../templates/init'

      # FileUtils.cp_r overwrites the target if it exists, but we want to preserve it
      # and print information about what happened
      source_target_pairs(templates_directory, project_directory).each do |src, target|
        if target.exist?
          warn "#{target} exists; skipping"
        else
          target.dirname.mkpath
          FileUtils.cp(src, target)
          puts "#{target} created"
        end
      end
    end

    private

    def source_target_pairs(src_dir, target_dir)
      src_dir
        .glob('**/*')
        .select(&:file?)
        .map{|e| [e, target_dir / e.relative_path_from(src_dir)]}
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
revealing-1.2.0 lib/revealing/cli.rb
revealing-1.1.0 lib/revealing/cli.rb
revealing-1.0.8 lib/revealing/cli.rb
revealing-1.0.7 lib/revealing/cli.rb