class Cli

Public Class Methods

new(name: 'sampleapp', description: 'sample app created by jimuguri', version: '0.0') click to toggle source
# File lib/jimuguri/cli.rb, line 5
def initialize(name: 'sampleapp', 
    description: 'sample app created by jimuguri',
    version: '0.0')
  @name = name
  @description = description
  @version = version
  @cmds = {}
  @cmd_helps = {}
  init_help
  init_version
  @opt = OptionParser.new
  @options = {}
  @opt_helps = []
end

Public Instance Methods

actions() click to toggle source
# File lib/jimuguri/cli.rb, line 72
def actions
  @cmds
end
add_action(cmd, help, &blk) click to toggle source

add action by given block

# File lib/jimuguri/cli.rb, line 39
def add_action(cmd, help, &blk)
  if !block_given?
    raise 'block must be given'
  end
  @cmds[cmd.to_sym] = blk
  @cmd_helps[cmd.to_sym] = help
end
add_option(short, long, message) click to toggle source
# File lib/jimuguri/cli.rb, line 47
def add_option(short, long, message)
  @opt.on("-#{short}", "--#{long}", message) {|v| @options[long.split(' ')[0].to_sym] = v}
  @opt_helps.push "-#{short} --#{long}\t#{message}"
end
description() click to toggle source
# File lib/jimuguri/cli.rb, line 80
def description
  @description
end
generate_help() click to toggle source
# File lib/jimuguri/cli.rb, line 106
def generate_help
  # concat commands
  commands = "COMMANDS:\n"
  @cmd_helps.map {|cmd, help| commands << "    #{cmd.to_s}\t#{help}\n"}

  options = "\nOPTIONS:\n"
  @opt_helps.map {|help| options << "    #{help}\n"}

  help_string + commands + options
end
help() click to toggle source
# File lib/jimuguri/cli.rb, line 102
def help
  generate_help
end
help_string() click to toggle source
# File lib/jimuguri/cli.rb, line 117
  def help_string
    <<~"HERE"
      NAME:
          #{@name} - #{@description}
      
      USAGE:
          #{@name} command [command options] [arguments...]
      
      VERSION:
          #{version}
      
    HERE
  end
init_help() click to toggle source

auto generate help

# File lib/jimuguri/cli.rb, line 21
def init_help
  help_proc = Proc.new do
    print_help
  end
  @cmds[:help] = help_proc
  @cmd_helps[:help] = 'Shows a list of commands or help for one command'
end
init_version() click to toggle source

auto generate version

# File lib/jimuguri/cli.rb, line 30
def init_version
  version_proc = Proc.new do
    print_version
  end
  @cmds[:version] = version_proc
  @cmd_helps[:version] = 'Shows version'
end
name() click to toggle source
# File lib/jimuguri/cli.rb, line 76
def name
  @name
end
options() click to toggle source
# File lib/jimuguri/cli.rb, line 88
def options
  @options
end
print_help() click to toggle source
print_version() click to toggle source
run(arg) click to toggle source
# File lib/jimuguri/cli.rb, line 52
def run(arg)
  print_help if arg.size == 0

  # disable optparse default help, version
  print_help if arg.include?('-h') || arg.include?('--help')
  print_version if arg.include?('-v') || arg.include?('--version')

  # parse
  begin
    @opt.parse!(arg)
  rescue
    print_help
  end

  action = @cmds[arg[0].to_sym]
  print_help if action.nil?

  action.call
end
version() click to toggle source
# File lib/jimuguri/cli.rb, line 84
def version
  @version
end