Sha256: 693d9ce7abb404cb159229be2685c9c51b32a36644ce9071e35c21385fa1a444

Contents?: true

Size: 1.08 KB

Versions: 3

Compression:

Stored size: 1.08 KB

Contents

require 'thor'
require 'pathname'

module Revealing
  class CLI < Thor
    def self.exit_on_failure?
      true
    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

3 entries across 3 versions & 1 rubygems

Version Path
revealing-1.0.5 lib/revealing/cli.rb
revealing-1.0.4 lib/revealing/cli.rb
revealing-1.0.3 lib/revealing/cli.rb