Module: Inversion::CLI::Subcommand

Included in:
ApiCommand, TagTokensCommand, TreeCommand
Defined in:
lib/inversion/cli.rb

Overview

Convenience module for subcommand registration syntax sugar.

Class Method Summary collapse

Class Method Details

.display_list(items) ⇒ Object

Display the given list of items.



327
328
329
330
331
332
# File 'lib/inversion/cli.rb', line 327

def display_list( items )
	items.flatten.each do |item|
		self.prompt.say( "- %s" % [ self.highlight_string(item) ] )
	end

end

.display_table(header, rows) ⇒ Object

Output a table with the given header (an array) and rows (an array of arrays).



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/inversion/cli.rb', line 302

def display_table( header, rows )
	table = TTY::Table.new( header, rows )
	renderer = nil

	if hl.enabled?
		renderer = TTY::Table::Renderer::Unicode.new(
			table,
			multiline: true,
			padding: [0,1,0,1]
		)
		renderer.border.style = :dim

	else
		renderer = TTY::Table::Renderer::ASCII.new(
			table,
			multiline: true,
			padding: [0,1,0,1]
		)
	end

	puts renderer.render
end

.error_string(string) ⇒ Object

Return the specified string in the ‘error’ ANSI color.



295
296
297
# File 'lib/inversion/cli.rb', line 295

def error_string( string )
	return hl.error( string )
end

.exit_now!(message, exit_code = 1) ⇒ Object

Exit with the specified exit_code after printing the given message.

Raises:

  • (GLI::CustomExit)


250
251
252
# File 'lib/inversion/cli.rb', line 250

def exit_now!( message, exit_code=1 )
	raise GLI::CustomExit.new( message, exit_code )
end

.extended(mod) ⇒ Object

Extension callback – register the extending object as a subcommand.



239
240
241
242
# File 'lib/inversion/cli.rb', line 239

def self::extended( mod )
	Inversion::CLI.log.debug "Registering subcommands from %p" % [ mod ]
	Inversion::CLI.register_subcommands( mod )
end

.headline_string(string) ⇒ Object

Return the specified string in the ‘headline’ ANSI color.



277
278
279
# File 'lib/inversion/cli.rb', line 277

def headline_string( string )
	return hl.headline( string )
end

.help_now!(message = nil) ⇒ Object

Exit with a helpful message and display the usage.



256
257
258
259
260
261
# File 'lib/inversion/cli.rb', line 256

def help_now!( message=nil )
	exception = OptionParser::ParseError.new( message )
	def exception.exit_code; 64; end

	raise exception
end

.highlight_string(string) ⇒ Object

Return the specified string in the ‘highlight’ ANSI color.



283
284
285
# File 'lib/inversion/cli.rb', line 283

def highlight_string( string )
	return hl.highlight( string )
end

.hlObject

Return the global Pastel object for convenient formatting, color, etc.



271
272
273
# File 'lib/inversion/cli.rb', line 271

def hl
	return Inversion::CLI.pastel
end

.load_template(tmplpath) ⇒ Object

Load the Inversion::Template from the specified tmplpath and return it. If there is an error loading the template, output the error and return nil.



358
359
360
361
362
363
364
365
366
367
368
369
# File 'lib/inversion/cli.rb', line 358

def load_template( tmplpath )
	template = Inversion::Template.load( tmplpath )
	return template
rescue Errno => err
	self.prompt.say "Failed to load %s: %s" % [ tmplpath, err.message ]
	return nil
rescue Inversion::ParseError => err
	self.prompt.say "%s: Invalid template: %p: %s" %
		[ tmplpath, err.class, err.message ]
	self.prompt.say( err.backtrace.join("\n  ") ) if $DEBUG
	return nil
end

.output_blank_lineObject

Output a blank line



373
374
375
# File 'lib/inversion/cli.rb', line 373

def output_blank_line
	self.prompt.say( "\n" )
end

.output_subheader(caption) ⇒ Object

Output a subheader with the given caption.



388
389
390
# File 'lib/inversion/cli.rb', line 388

def output_subheader( caption )
	self.prompt.say( highlight_string caption )
end

.output_template_header(template) ⇒ Object

Output a header between each template.



379
380
381
382
383
384
# File 'lib/inversion/cli.rb', line 379

def output_template_header( template )
	header_info = "%s (%0.2fK, %s)" %
		[ template.source_file, template.source.bytesize/1024.0, template.source.encoding ]
	header_line = "-- %s" % [ header_info ]
	self.prompt.say( headline_string header_line )
end

.promptObject

Get the prompt (a TTY::Prompt object)



265
266
267
# File 'lib/inversion/cli.rb', line 265

def prompt
	return Inversion::CLI.prompt
end

.success_string(string) ⇒ Object

Return the specified string in the ‘success’ ANSI color.



289
290
291
# File 'lib/inversion/cli.rb', line 289

def success_string( string )
	return hl.success( string )
end

.unless_dryrun(description, return_value = true) ⇒ Object Also known as: unless_dry_run

In dry-run mode, output the description instead of running the provided block and return the return_value. If dry-run mode is not enabled, yield to the block.



344
345
346
347
348
349
350
351
# File 'lib/inversion/cli.rb', line 344

def unless_dryrun( description, return_value=true )
	if $DRYRUN
		self.log.warn( "DRYRUN> #{description}" )
		return return_value
	else
		return yield
	end
end

.visible_chars(string) ⇒ Object

Return the count of visible (i.e., non-control) characters in the given string.



336
337
338
# File 'lib/inversion/cli.rb', line 336

def visible_chars( string )
	return string.to_s.gsub(/\e\[.*?m/, '').scan( /\P{Cntrl}/ ).size
end