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: nil, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin) ⇒ CommandLineInterface
constructor
A new instance of CommandLineInterface.
- #run ⇒ Object
Constructor Details
#initialize(argv, resolver: nil, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin) ⇒ CommandLineInterface
Returns a new instance of CommandLineInterface.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/dratools/command_line_interface.rb', line 70 def initialize( argv, resolver: nil, downloader: DownloadService.new, stdout: $stdout, stderr: $stderr, stdin: $stdin ) @argv = argv @stdout = stdout @stderr = stderr @stdin = stdin @progress = ProgressReporter.new( io: stderr, enabled: interactive?(stderr) ) @resolver = resolver || default_resolver @downloader = downloader end |
Class Method Details
.start(argv) ⇒ Object
66 67 68 |
# File 'lib/dratools/command_line_interface.rb', line 66 def self.start(argv) new(argv).run end |
Instance Method Details
#run ⇒ Object
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 116 117 118 119 120 121 122 123 |
# File 'lib/dratools/command_line_interface.rb', line 90 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: @progress.clearing_io(@stdout), stderr: @progress.clearing_io, stdin: @stdin ).run ensure @progress.finish end |