class Grouik::Cli

Grouik command line interface

Provides a ready to use program, based on “Grouik“ library

Attributes

arguments[R]
argv[R]
options[R]

Public Class Methods

defaults() click to toggle source

default options

# File src/lib/grouik/cli.rb, line 43
def defaults
  {
    stats: true,
    paths: ['.'],
    basedir: '.',
    output: STDOUT,
    ignores: [],
    require: nil,
    template: nil,
  }
end
new(argv = ARGV) click to toggle source

Constructor

@param [Array] argv

# File src/lib/grouik/cli.rb, line 64
def initialize(argv = ARGV)
  @argv = argv.clone
  @options = self.class.defaults
  # @options = config unless config.empty?
  @arguments = []
end
program_name() click to toggle source

Program name

@return [String]

# File src/lib/grouik/cli.rb, line 31
def program_name
  Pathname.new($PROGRAM_NAME).basename('.rb').to_s
end
run(argv = ARGV) click to toggle source

Run

@param [Array] argv

# File src/lib/grouik/cli.rb, line 38
def run(argv = ARGV)
  self.new(argv).run
end

Public Instance Methods

parse!() click to toggle source

Parse command line options

Abort process (error code SHOULD BE “22“) on invalid option

@return [self]

# File src/lib/grouik/cli.rb, line 86
def parse!
  argv = self.argv.clone
  begin
    parser.parse!(argv)
  rescue OptionParser::InvalidOption
    STDERR.puts(parser)
    exit(Errno::EINVAL::Errno)
  end
  @arguments = argv
  # @options = prepare_options(@options)
  self
end
parser() click to toggle source

Provide an “OptionParser“

@return [OptionParser]

# File src/lib/grouik/cli.rb, line 74
def parser
  parser = helpers.get(:cli).make_parser(@options)
  parser.banner = 'Usage: %s [OPTION]... [FILE]...' % program_name

  parser
end
processables() click to toggle source

Get processable items (based on command arguments), used during execution

@return [Array<OpenStruct>]

# File src/lib/grouik/cli.rb, line 102
def processables
  processables = []
  if arguments.empty?
    processables[0] = OpenStruct.new(
      path: Pathname.new(Dir.pwd),
      options: options,
      'file?' => false
    )
  else
    arguments.each do |filepath|
      config = helpers.get(:cli).read_config(filepath)

      processables << OpenStruct.new(
        path: Pathname.new(filepath).dirname,
        file: Pathname.new(filepath),
        options: config,
        'file?' => true
      )
    end
  end

  processables.map(&:freeze)
end
program_name() click to toggle source

@return [String]

# File src/lib/grouik/cli.rb, line 57
def program_name
  self.class.program_name
end
run() click to toggle source

Execute CLI and return exit code

@return [Fixnum]

# File src/lib/grouik/cli.rb, line 129
def run
  parse!

  if options[:version]
    STDOUT.puts helpers.get(:cli).version_chapter
    return 0
  end

  processables.each do |processable|
    Dir.chdir(processable.path) do
      process(processable.options)
    end
  end
  0
end

Protected Instance Methods

process(options) click to toggle source

Initiate and run a new “Process“ from options

@param [Hash] options @return [Grouik::Process]

# File src/lib/grouik/cli.rb, line 151
def process(options)
  options = helpers.get(:cli).prepare_options(options)

  process = Grouik.process do |process|
    process.basedir   = options.fetch(:basedir)
    process.paths     = options.fetch(:paths)
    process.ignores   = options[:ignores]
    process.output    = options.fetch(:output)
    process.template  = options[:template]
    process.bootstrap = options[:require]
  end

  process.on_success do |process|
    process.display_status if options[:stats]
  end.on_failure do |process|
    process.display_status if options[:stats]
    exit Errno::ECANCELED::Errno
  end

  process
end