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