Class: Dratools::CommandLineInterface
- Inherits:
-
Object
- Object
- Dratools::CommandLineInterface
- Defined in:
- lib/dratools/command_line_interface.rb
Overview
サブコマンドを振り分ける CLI の入口。
Constant Summary collapse
- COMMAND_NAME =
Dratools::NAME
- SUCCESS_EXIT_STATUS =
0- FAILURE_EXIT_STATUS =
1- SUBCOMMANDS =
{ 'url' => Commands::UrlCommand, 'get' => Commands::GetCommand, 'probe' => Commands::ProbeCommand, 'tree' => Commands::TreeCommand, 'meta' => Commands::MetaCommand, 'runs' => Commands::RunsCommand, 'size' => Commands::SizeCommand }.freeze
- SUBCOMMAND_ALIASES =
単複の打ち間違いを救う別名。左を打っても右の正規コマンドが動く。ヘルプやエラー・バナーには常に正規名(右)を表示する。
{ 'run' => 'runs', 'urls' => 'url', 'sizes' => 'size', 'trees' => 'tree' }.freeze
- HELP_FLAGS =
['-h', '--help', 'help'].freeze
- VERSION_FLAGS =
['-v', '--version', 'version'].freeze
- SUBCOMMAND_SUMMARIES =
{ 'url' => 'ダウンロード URL を表示する (--json で JSON)', 'get' => 'ファイルをダウンロードする', 'probe' => '短時間の接続確認だけ行う', 'tree' => '探索ツリーを表示する', 'meta' => 'レコードのメタ情報を表示する (--json で生 JSON)', 'runs' => 'run accession の一覧を出力する', 'size' => 'ダウンロード合計サイズを集計する' }.freeze
- USAGE_EXAMPLES =
[ "#{COMMAND_NAME} url DRR000001", "#{COMMAND_NAME} meta DRR000001", "#{COMMAND_NAME} runs PRJNA341783", "#{COMMAND_NAME} size PRJNA341783", "#{COMMAND_NAME} get -O ~/Downloads DRR000001", "#{COMMAND_NAME} tree PRJNA341783", "#{COMMAND_NAME} url --input accessions.txt", "printf 'DRR000001\\nDRR000002\\n' | #{COMMAND_NAME} url" ].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(argv, resolver: AccessionResolver.new, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin) ⇒ CommandLineInterface
constructor
A new instance of CommandLineInterface.
- #run ⇒ Object
Constructor Details
#initialize(argv, resolver: AccessionResolver.new, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin) ⇒ CommandLineInterface
Returns a new instance of CommandLineInterface.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/dratools/command_line_interface.rb', line 68 def initialize( argv, resolver: AccessionResolver.new, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin ) @argv = argv @resolver = resolver @downloader = downloader @stdout = stdout @stderr = stderr @stdin = stdin end |
Class Method Details
.start(argv) ⇒ Object
64 65 66 |
# File 'lib/dratools/command_line_interface.rb', line 64 def self.start(argv) new(argv).run end |
Instance Method Details
#run ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/dratools/command_line_interface.rb', line 84 def run name = @argv.first if name.nil? print_help(@stderr) return FAILURE_EXIT_STATUS end if HELP_FLAGS.include?(name) print_help(@stdout) return SUCCESS_EXIT_STATUS end if VERSION_FLAGS.include?(name) @stdout.puts VERSION return SUCCESS_EXIT_STATUS end command_class = SUBCOMMANDS[name] || SUBCOMMANDS[SUBCOMMAND_ALIASES[name]] unless command_class expected = SUBCOMMANDS.keys.join(', ') @stderr.puts "#{COMMAND_NAME}: unknown command '#{name}' (expected: #{expected})" return FAILURE_EXIT_STATUS end command_class.new( @argv.drop(1), resolver: @resolver, downloader: @downloader, stdout: @stdout, stderr: @stderr, stdin: @stdin ).run end |