1. Ruby OptionParser
-
Ruby OptionParser를 참고하여 작성하였습니다.
-
OptionParser
는 터미널 등의 커맨드 창에서 입력받은 옵션을 분석하기 위한 클래스입니다. -
OptionParser
를 사용하여, 실행할 때 필요한 옵션들을 지정할 수 있으며, 요약도 표현할 수 있습니다!
2. Ruby OptionParser 사용법
1
require 'optparse'
-
상단에
require
를 입력하여OptionParser
모듈을 호출합니다. -
Ruby
에서 스크립트에 주어진 인수를 ARGV를 통해 배열로 받을 수 있습니다.
1
2
$ test.rb test
// ["test"]
- 먼저 예시의 소스 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require 'optparse'
# Default values
options = {
str: '',
int: 0,
boolean: false,
enum: '',
array: {}
}
OptionParser.new do |opts|
opts.banner = 'Usage: test.rb [options]'
opts.on_head(' Options Description')
opts.on('-s', '--string str_value', 'String type (Default : \'\')') { |v| options[:str] = v}
opts.on('-i', '--i int_value', Integer, 'Integer type (Default : 0)'){ |v| options[:int] = v}
opts.on('-b', '--[no-]boolean', 'Boolean type(Default : false)'){ |v| options[:boolean] = v}
opts.on('-a', '--a array first, second', Array, 'Array type (Default : {})') { |v| options[:array] = v}
opts.on('-e', '--e enum', [:a, :b, :c], 'Enum values') { |v| options[:enum] = v}
end.parse!
p options
p ARGV
1) –help
-
-h
또는--help
를 입력하면, 옵션에 대한 설명이 자동 생성되어console
에 나타납니다. -
banner
를 설정하여 옵션 출력 전 최상단에 간단한 배너를 출력할 수 있습니다. -
on_head
를 설정하여 옵션 설명을 추가할 수 있습니다.
1
$ test.rb --help
- 위의 커맨드를 입력하여, 예시 코드에 설정된 옵션들을 출력해보겠습니다.
1
2
3
4
5
6
7
Usage: test.rb [options]
Options Description
-s, --string str_value String type (Default : '')
-i, --i int_value Integer type (Default : 0)
-b, --[no-]boolean Boolean type(Default : false)
-a, --a array first, second Array type (Default : {})
-e, --e enum Enum values
2) 옵션 추가
on
을 사용하여 옵션을 추가할 수 있습니다.
① 문자열
1
opts.on('-s', '--string str_value', 'String type (Default : \'\')') { |v| options[:str] = v}
-
기본적으로 옵션의 인수를 문자열로 받기 때문에, 따로 타입을 설정할 필요는 없습니다.
-
str_value
는 옵션 뒤의 변수를 받기 위한 것이므로, 다른 이름을 사용하셔도 괜찮습니다.- 만약, 변경하시면
--help
입력 후 해당 변수의 이름이 변경됩니다.
- 만약, 변경하시면
② 숫자
1
opts.on('-i', '--i int_value', Integer, 'Integer type (Default : 0)'){ |v| options[:int] = v}
-
Integer
를 입력하여,Type
을 강제할 수 있습니다. -
Date
,DateTime
,Time
,URI
등 다른 지원하는 타입들은 Docs를 참고해주세요
③ Boolean
1
opts.on('-b', '--[no-]boolean', 'Boolean type(Default : false)'){ |v| options[:boolean] = v}
-
인수를 사용하지 않고 값만 필요한 경우에는
boolean
을 이용할 수 있습니다. -
default
값에false
를 지정해놓았지만, 옵션에-b
를 입력한다면true
로 표시됩니다. -
옵션에
--no-boolean
을 입력하시면,false
로 표시됩니다.
④ 배열
1
opts.on('-a', '--a array first, second', Array, 'Array type (Default : {})') { |v| options[:array] = v}
Type
을Array
로 지정하면,(컴마)
를 이용하여 구분할 수 있습니다.
1
$ test -a bell,stone,blog # {:array=>["bell", "stone", "blog"]}
- 위와 같이 옵션에
-a
를 입력하고test -a bell,stone,blog
를 입력하면 배열의 형태로 입력됩니다.
⑤ Enum
1
opts.on('-e', '--e enum', [:first, :second, :third], 'Enum values') { |v| options[:enum] = v}
-
Enum
을 사용하여, 입력받는 인수를 제한할 수 있습니다. -
지정되어있는
first, second, third
이외의 것을 입력하면,InvalidArgument
에러가 발생합니다.
테스트 결과
1
$ test -s optionparser -i 20191028 -b -a bellstone,blog -e first Hello OptionParser
- 잘 작동하는지 확인하기 위해 Console에 입력해봅니다.
1
2
{:str=>"optionparser", :int=>20191028, :boolean=>true, :enum=>:first, :array=>["bellstone", "blog"]}
["Hello", "OptionParser"]
- 그럼 끝!