optparse_plus 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c10b81ae4f69b69d772aa4485b9958f025f3bc1c
4
+ data.tar.gz: 57164625aa775c5c1c2cd151fd3be1b1aeacc48d
5
+ SHA512:
6
+ metadata.gz: 73c3e461022b46a4682711eb0938c2b0851968243091017adc3c29d41e3209df0ac950efd0343b50c414bd09849ea2984025ed68502ad9e6cdf0c0015a30a220
7
+ data.tar.gz: 17ac8719eb55a7d1e9303b98d025b5c3f31e81ce627bdecbc93bfe4163f46800bf469180404d8a7d93223cafe39988e0e2f46054527fd07908bfe18c84b2f432
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .ruby-version
19
+ *~
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in optparse_plus.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 HASHIMOTO, Naoki
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # OptparsePlus
2
+
3
+ OptParsePlus adds some helper methods to OptionParser, and let you define command line options more easily.
4
+
5
+ In your script, simply require 'optparse_plus' in stead of 'optparse', then the new methods of OptionParser are available for you.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'optparse_plus'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install optparse_plus
20
+
21
+ ## Usage
22
+
23
+ For example, save the following script as `test_program.rb`:
24
+
25
+ ```ruby
26
+ #!/usr/bin/env ruby
27
+
28
+ require 'optparse_plus'
29
+
30
+ first_value, second_value = nil, nil
31
+
32
+ OptionParser.new_with_yaml do |opt|
33
+ opt.on(:first_option) {|status| first_value = status }
34
+ opt.on(:second_option) {|arg| second_value = arg }
35
+ opt.parse!
36
+ end
37
+
38
+ puts "The value returned from the first option is '#{first_value}'"
39
+ puts "The value returned from the second option is '#{second_value}'"
40
+
41
+ __END__
42
+ banner: test_program.rb [OPTION]
43
+ first_option:
44
+ short: -f
45
+ long: --first
46
+ description: First option for a test script
47
+ second_option:
48
+ short: -s [arg]
49
+ long: --second [=arg]
50
+ description: Second option for a test script
51
+ ```
52
+
53
+ And if you execute:
54
+
55
+ $ ruby test_program.rb --help
56
+
57
+ You will see the following message:
58
+
59
+ ```
60
+ test_program [OPTION]
61
+ -E, --encoding=ex[:in] specify the default external and internal character encodings
62
+ -f, --first First option for a test script
63
+ -s, --second [=arg] Second option for a test script
64
+ ```
65
+
66
+ Or if you execute:
67
+
68
+ $ ruby test_program.rb --first --second=something
69
+
70
+ You will get the following result:
71
+
72
+ ```
73
+ The value returned from the first option is 'true'
74
+ The value returned from the second option is 'something'
75
+ ```
76
+
77
+ You can also pass YAML data as a string:
78
+
79
+ ```ruby
80
+ #!/usr/bin/env ruby
81
+
82
+ require 'optparse_plus'
83
+
84
+ first_value, second_value = nil, nil
85
+
86
+ config_yaml =<<YAML
87
+ banner: #{File.basename($0)} [OPTION]
88
+ first_option:
89
+ short: -f
90
+ long: --first
91
+ description: First option for a test script
92
+ second_option:
93
+ short: -s [arg]
94
+ long: --second [=arg]
95
+ description: Second option for a test script
96
+ YAML
97
+
98
+ OptionParser.new_with_yaml(config_yaml) do |opt|
99
+ opt.on(:first_option) {|status| first_value = status }
100
+ opt.on(:second_option) {|arg| second_value = arg }
101
+ opt.parse!
102
+ end
103
+
104
+ puts "The value returned from the first option is '#{first_value}'"
105
+ puts "The value returned from the second option is '#{second_value}'"
106
+ ```
107
+
108
+ ## Contributing
109
+
110
+ 1. Fork it
111
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
112
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
113
+ 4. Push to the branch (`git push origin my-new-feature`)
114
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module OptparsePlus
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,157 @@
1
+ require "optparse_plus/version"
2
+ require 'optparse'
3
+ require 'yaml'
4
+ require 'ripper'
5
+
6
+ module OptparsePlus
7
+ attr_reader :opt_plus
8
+
9
+ module ClassMethods
10
+ def read_after_program_end(cur_file)
11
+ own_source = File.read(cur_file)
12
+ last_token = Ripper.lex(own_source)[-1]
13
+ return nil unless last_token[1] == :on___end__
14
+ start = last_token[0][0]
15
+ own_source.lines[start..-1].join
16
+ end
17
+
18
+ def new_with_yaml(config_yaml_source=nil)
19
+ cur_file = caller[0].split(/:/)[0]
20
+ config_yaml_source ||= read_after_program_end(cur_file)
21
+ opt = OptPlus.create_opt(config_yaml_source)
22
+
23
+ if block_given?
24
+ yield opt
25
+ else
26
+ opt
27
+ end
28
+ end
29
+ end
30
+
31
+ class OptPlus
32
+ attr_reader :config, :config_source, :callbacks
33
+ attr_writer :opt
34
+
35
+ ruby_options_yaml_source = <<YAML
36
+ optplus_ruby_encoding:
37
+ short: -Eex[:in]
38
+ long: --encoding=ex[:in]
39
+ description: specify the default external and internal character encodings
40
+ optplus_ruby_debug:
41
+ short: -d
42
+ long: --debug
43
+ description: set debugging flags (set $DEBUG to true)
44
+ YAML
45
+
46
+ RUBY_OPTIONS = YAML.load(ruby_options_yaml_source)
47
+ RUBY_OPTION_TO_LABEL = {
48
+ "E" => :optplus_ruby_encoding,
49
+ "d" => :optplus_ruby_debug,
50
+ }
51
+
52
+ def self.create_opt(config_yaml_source)
53
+ opt_plus = OptPlus.new(config_yaml_source)
54
+
55
+ if banner = opt_plus.config["banner"]
56
+ opt = ::OptionParser.new(banner)
57
+ else
58
+ opt = ::OptionParser.new
59
+ end
60
+
61
+ opt.setup_opt_plus(opt_plus)
62
+ opt
63
+ end
64
+
65
+ def initialize(config_yaml_source)
66
+ @config_source = config_yaml_source
67
+ @config = YAML.load(config_yaml_source)
68
+ @ruby_option_callbacks = ruby_option_callbacks
69
+ @callbacks = {}
70
+ @opt = nil
71
+ end
72
+
73
+ def opt_on
74
+ @callbacks.keys.each {|label| reflect_callback(label) }
75
+ end
76
+
77
+ def reflect_callback(label)
78
+ callback = @callbacks[label]
79
+ args = config_to_args(label)
80
+ @opt.on(*args, callback)
81
+ end
82
+
83
+ def config_to_args(label, config=@config)
84
+ options = config[label.to_s]
85
+ %w(short long desc description).map {|type| options[type] }
86
+ .select {|option| not option.nil? }.flatten
87
+ end
88
+
89
+ def inherit_ruby_options(*short_option_names)
90
+ short_option_names.each do |opt_name|
91
+ label = RUBY_OPTION_TO_LABEL[opt_name]
92
+ args = config_to_args(label, RUBY_OPTIONS)
93
+ callback = @ruby_option_callbacks[label]
94
+ @opt.on(*args, callback)
95
+ end
96
+ end
97
+
98
+ private
99
+
100
+ def ruby_set_encoding(given_opt)
101
+ external, internal = given_opt.split(/:/o, 2)
102
+ Encoding.default_external = external if external and not external.empty?
103
+ Encoding.default_internal = internal if internal and not internal.empty?
104
+ end
105
+
106
+ def ruby_set_debug
107
+ $DEBUG = true
108
+ end
109
+
110
+ def ruby_option_callbacks
111
+ {}.tap do |callbacks|
112
+ callbacks[:optplus_ruby_encoding] = proc {|given_opt| ruby_set_encoding(given_opt) }
113
+ callbacks[:optplus_ruby_debug] = proc {|given_opt| ruby_set_debug }
114
+ end
115
+ end
116
+ end
117
+
118
+ def with(option_label, &callback)
119
+ @opt_plus.callbacks[option_label] = callback
120
+ end
121
+
122
+
123
+ def on_with(option_label, &callback)
124
+ args = @opt_plus.config_to_args(option_label)
125
+ _orig_on(*args, callback)
126
+ end
127
+
128
+ def on(*args, &callback)
129
+ if args.length == 1 and args[0].kind_of? Symbol
130
+ on_with(*args, &callback)
131
+ else
132
+ super(*args)
133
+ end
134
+ end
135
+
136
+ def parse!
137
+ @opt_plus.opt_on
138
+ super
139
+ end
140
+
141
+ def setup_opt_plus(opt_plus)
142
+ @opt_plus = opt_plus
143
+ opt_plus.opt = self
144
+ end
145
+
146
+ def inherit_ruby_options(*short_option_names)
147
+ @opt_plus.inherit_ruby_options(*short_option_names)
148
+ end
149
+ end
150
+
151
+ class OptionParser
152
+ alias :_orig_on :on
153
+ private :_orig_on
154
+ prepend OptparsePlus
155
+ extend OptparsePlus::ClassMethods
156
+ private_class_method :read_after_program_end
157
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'optparse_plus/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "optparse_plus"
8
+ spec.version = OptparsePlus::VERSION
9
+ spec.authors = ["HASHIMOTO, Naoki"]
10
+ spec.email = ["hashimoto.naoki@gmail.com"]
11
+ spec.description = %q{"optparse_plus" will let you define command line options more easily.}
12
+ spec.summary = %q{"optparse_plus" adds some helper methods to OptionParser. In your script, simply require 'optparse_plus' in stead of 'optparse', then the new methods of OptionParser are available for you.}
13
+ spec.homepage = "https://github.com/nico-hn/optparse_plus"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,249 @@
1
+ require 'spec_helper'
2
+ require File.join(__dir__, 'test_scripts/main')
3
+
4
+ describe OptparsePlus do
5
+ it 'should have a version number' do
6
+ expect(OptparsePlus::VERSION).to_not be_nil
7
+ end
8
+
9
+ context("when options are described under __END__") do
10
+ it 'accepts --second option with an argument' do
11
+ parser = OptparsePlusTest.new
12
+ set_argv("--first --second=something")
13
+ parser.parse_with_after_end
14
+ expect(parser.second_option_value).to eq("something")
15
+ end
16
+
17
+ it 'accepts --first option' do
18
+ parser = OptparsePlusTest.new
19
+ set_argv("--first --second=something")
20
+ parser.parse_with_after_end
21
+ expect(parser.first_option_given?).to be_truthy
22
+ end
23
+
24
+ it '--second option may not be given' do
25
+ parser = OptparsePlusTest.new
26
+ set_argv("--first")
27
+ parser.parse_with_after_end
28
+ expect(parser.second_option_value).to be_nil
29
+ end
30
+
31
+ it '--first option may not be given' do
32
+ parser = OptparsePlusTest.new
33
+ set_argv("--second=something")
34
+ parser.parse_with_after_end
35
+ expect(parser.first_option_given?).to be_falsy
36
+ end
37
+ end
38
+
39
+ context("when options are described in a multi-lines string") do
40
+ it 'accepts --second option with an argument' do
41
+ parser = OptparsePlusTest.new
42
+ set_argv("--first --second=something")
43
+ parser.parse_with_string_as_source
44
+ expect(parser.second_option_value).to eq("something")
45
+ end
46
+
47
+ it 'accepts --first option' do
48
+ parser = OptparsePlusTest.new
49
+ set_argv("--first --second=something")
50
+ parser.parse_with_string_as_source
51
+ expect(parser.first_option_given?).to be_truthy
52
+ end
53
+
54
+ it '--second option may not be given' do
55
+ parser = OptparsePlusTest.new
56
+ set_argv("--first")
57
+ parser.parse_with_string_as_source
58
+ expect(parser.second_option_value).to be_nil
59
+ end
60
+
61
+ it '--first option may not be given' do
62
+ parser = OptparsePlusTest.new
63
+ set_argv("--second=something")
64
+ parser.parse_with_string_as_source
65
+ expect(parser.first_option_given?).to be_falsy
66
+ end
67
+ end
68
+
69
+ context("when options are registered using OptionParser#on_with") do
70
+ it 'accepts --second option with an argument' do
71
+ parser = OptparsePlusTest.new
72
+ set_argv("--first --second=something")
73
+ parser.parse_using_on_with
74
+ expect(parser.second_option_value).to eq("something")
75
+ end
76
+
77
+ it 'accepts --first option' do
78
+ parser = OptparsePlusTest.new
79
+ set_argv("--first --second=something")
80
+ parser.parse_using_on_with
81
+ expect(parser.first_option_given?).to be_truthy
82
+ end
83
+
84
+ it '--second option may not be given' do
85
+ parser = OptparsePlusTest.new
86
+ set_argv("--first")
87
+ parser.parse_using_on_with
88
+ expect(parser.second_option_value).to be_nil
89
+ end
90
+
91
+ it '--first option may not be given' do
92
+ parser = OptparsePlusTest.new
93
+ set_argv("--second=something")
94
+ parser.parse_using_on_with
95
+ expect(parser.first_option_given?).to be_falsy
96
+ end
97
+ end
98
+
99
+ context("when options are registered using OptionParser#on") do
100
+ it 'accepts --second option with an argument' do
101
+ parser = OptparsePlusTest.new
102
+ set_argv("--first --second=something")
103
+ parser.parse_using_on
104
+ expect(parser.second_option_value).to eq("something")
105
+ end
106
+
107
+ it 'accepts --first option' do
108
+ parser = OptparsePlusTest.new
109
+ set_argv("--first --second=something")
110
+ parser.parse_using_on
111
+ expect(parser.first_option_given?).to be_truthy
112
+ end
113
+
114
+ it '--second option may not be given' do
115
+ parser = OptparsePlusTest.new
116
+ set_argv("--first")
117
+ parser.parse_using_on
118
+ expect(parser.second_option_value).to be_nil
119
+ end
120
+
121
+ it '--first option may not be given' do
122
+ parser = OptparsePlusTest.new
123
+ set_argv("--second=something")
124
+ parser.parse_using_on
125
+ expect(parser.first_option_given?).to be_falsy
126
+ end
127
+ end
128
+
129
+ describe 'creation of an instance of OptionParser' do
130
+ before do
131
+ @config_yaml_with_banner = <<YAML
132
+ banner: #{File.basename($0)} [OPTION]
133
+ first_option:
134
+ long: --first
135
+ short: -f
136
+ description: First option for a test script
137
+ second_option:
138
+ short: -s [arg]
139
+ description: Second option for a test script
140
+ YAML
141
+
142
+ @config_yaml_without_banner = <<YAML
143
+ first_option:
144
+ short: -f
145
+ long: --first
146
+ description: First option for a test script
147
+ second_option:
148
+ short: -s [arg]
149
+ long: --second [=arg]
150
+ description: Second option for a test script
151
+ YAML
152
+ end
153
+
154
+ it 'expects to assign OptionParser#banner if the value is in the configuration' do
155
+ opt = OptionParser::OptPlus.create_opt(@config_yaml_with_banner)
156
+ expect(opt.banner).to eq('rspec [OPTION]')
157
+ end
158
+
159
+ it 'expects to assign a default value to OptionParser#banner unless the value is specified in the configuration' do
160
+ opt = OptionParser::OptPlus.create_opt(@config_yaml_without_banner)
161
+ expect(opt.banner).to eq('Usage: rspec [options]')
162
+ end
163
+
164
+ it 'expects to assign an instance of OptPlus to OptionParser#opt_plus' do
165
+ opt = OptionParser::OptPlus.create_opt(@config_yaml_without_banner)
166
+ expect(opt.opt_plus).to be_instance_of(OptionParser::OptPlus)
167
+ end
168
+ end
169
+
170
+ describe OptionParser::OptPlus do
171
+ before do
172
+ @config_yaml_with_banner = <<YAML
173
+ banner: #{File.basename($0)} [OPTION]
174
+ first_option:
175
+ long: --first
176
+ short: -f
177
+ description: First option for a test script
178
+ second_option:
179
+ short: -s [arg]
180
+ description: Second option for a test script
181
+ YAML
182
+
183
+ @config_yaml_without_banner = <<YAML
184
+ first_option:
185
+ short: -f
186
+ long: --first
187
+ description: First option for a test script
188
+ second_option:
189
+ short: -s [arg]
190
+ long: --second [=arg]
191
+ description: Second option for a test script
192
+ YAML
193
+ end
194
+
195
+ describe '#config_to_args' do
196
+ it 'can convert config in yaml to args of OptionParser#on' do
197
+ opt_plus = OptionParser::OptPlus.new(@config_yaml_without_banner)
198
+ args = opt_plus.config_to_args(:first_option)
199
+ expect(args).to eq(["-f", "--first", "First option for a test script"])
200
+ end
201
+
202
+ it 'expects to sort the order of arguments (short long desc)' do
203
+ opt_plus = OptionParser::OptPlus.new(@config_yaml_with_banner)
204
+ args = opt_plus.config_to_args(:first_option)
205
+ expect(args).to eq(["-f", "--first", "First option for a test script"])
206
+ end
207
+
208
+ it 'may ignore missing arguments' do
209
+ opt_plus = OptionParser::OptPlus.new(@config_yaml_with_banner)
210
+ args = opt_plus.config_to_args(:second_option)
211
+ expect(args).to eq(["-s [arg]", "Second option for a test script"])
212
+ end
213
+ end
214
+
215
+ describe '#inherit_ruby_options' do
216
+ it 'can add -E option' do
217
+ external_encoding = Encoding.default_external
218
+ internal_encoding = Encoding.default_internal
219
+
220
+ Encoding.default_external = 'UTF-8'
221
+ expect(Encoding.default_external).to eq(Encoding::UTF_8)
222
+
223
+ set_argv("-EWindows-31J")
224
+ OptionParser.new_with_yaml(@config_yaml_with_banner) do |opt|
225
+ opt.inherit_ruby_options("E")
226
+ opt.parse!
227
+ end
228
+
229
+ expect(Encoding.default_external).to eq(Encoding::Windows_31J)
230
+ Encoding.default_external = external_encoding
231
+ end
232
+
233
+ it 'expect to print help message' do
234
+ expected_help_message = <<HELP
235
+ rspec [OPTION]
236
+ -E, --encoding=ex[:in] specify the default external and internal character encodings
237
+ HELP
238
+
239
+ allow(STDOUT).to receive(:puts).with(expected_help_message)
240
+
241
+ set_argv("--help")
242
+ OptionParser.new_with_yaml(@config_yaml_with_banner) do |opt|
243
+ opt.inherit_ruby_options("E")
244
+ opt.parse!
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'shellwords'
3
+ require 'optparse_plus'
4
+
5
+ module Helpers
6
+ def set_argv(command_line_str)
7
+ ARGV.replace Shellwords.split(command_line_str)
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |c|
12
+ c.include Helpers
13
+ end
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse_plus'
4
+
5
+ class OptparsePlusTest
6
+ attr_accessor :first_option_given, :second_option_value
7
+
8
+ OPTION_YAML_SOURCE = <<YAML
9
+ banner: #{File.basename($0)} [OPTION]
10
+ first_option:
11
+ short: -f
12
+ long: --first
13
+ description: First option for a test script
14
+ second_option:
15
+ short: -s [arg]
16
+ long: --second [=arg]
17
+ description: Second option for a test script
18
+ YAML
19
+
20
+ def parse_with_after_end
21
+ OptionParser.new_with_yaml do |opt|
22
+ opt.with(:first_option) {|status| @first_option_given = status }
23
+ opt.with(:second_option) {|arg| @second_option_value = arg }
24
+ opt.parse!
25
+ end
26
+ end
27
+
28
+ def parse_with_string_as_source
29
+ OptionParser.new_with_yaml(OPTION_YAML_SOURCE) do |opt|
30
+ opt.with(:first_option) {|status| @first_option_given = status }
31
+ opt.with(:second_option) {|arg| @second_option_value = arg }
32
+ opt.parse!
33
+ end
34
+ end
35
+
36
+ def parse_using_on_with
37
+ OptionParser.new_with_yaml(OPTION_YAML_SOURCE) do |opt|
38
+ opt.on_with(:first_option) {|status| @first_option_given = status }
39
+ opt.on_with(:second_option) {|arg| @second_option_value = arg }
40
+ opt.parse!
41
+ end
42
+ end
43
+
44
+ def parse_using_on
45
+ OptionParser.new_with_yaml(OPTION_YAML_SOURCE) do |opt|
46
+ opt.on('-f', '--first',
47
+ 'First option for a test script') {|status| @first_option_given = status }
48
+ # opt.on(:first_option) {|status| @first_option_given = status }
49
+
50
+ # opt.on('-s [arg]', '--second [=arg]',
51
+ # 'Second option for a test script') {|arg| @second_option_value = arg }
52
+ opt.on(:second_option) {|arg| @second_option_value = arg }
53
+ opt.parse!
54
+ end
55
+ end
56
+ end
57
+
58
+ __END__
59
+ banner: test_program [OPTION]
60
+ first_option:
61
+ short: -f
62
+ long: --first
63
+ description: First option for a test script
64
+ second_option:
65
+ short: -s [arg]
66
+ long: --second [=arg]
67
+ description: Second option for a test script
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require(File.join(__dir__, "cli"))
4
+
5
+ class OptparsePlusTest
6
+ def first_option_given?
7
+ @first_option_given
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: optparse_plus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - HASHIMOTO, Naoki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: "\"optparse_plus\" will let you define command line options more easily."
56
+ email:
57
+ - hashimoto.naoki@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - lib/optparse_plus.rb
70
+ - lib/optparse_plus/version.rb
71
+ - optparse_plus.gemspec
72
+ - spec/optparse_plus_spec.rb
73
+ - spec/spec_helper.rb
74
+ - spec/test_scripts/cli.rb
75
+ - spec/test_scripts/main.rb
76
+ homepage: https://github.com/nico-hn/optparse_plus
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.2.0
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: "\"optparse_plus\" adds some helper methods to OptionParser. In your script,
100
+ simply require 'optparse_plus' in stead of 'optparse', then the new methods of OptionParser
101
+ are available for you."
102
+ test_files:
103
+ - spec/optparse_plus_spec.rb
104
+ - spec/spec_helper.rb
105
+ - spec/test_scripts/cli.rb
106
+ - spec/test_scripts/main.rb