optparse-plus 3.0.0
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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CHANGES.md +66 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +201 -0
- data/README.rdoc +173 -0
- data/Rakefile +94 -0
- data/bin/optparse_plus +130 -0
- data/fix.rb +29 -0
- data/lib/optparse-plus.rb +1 -0
- data/lib/optparse_plus.rb +15 -0
- data/lib/optparse_plus/argv_parser.rb +50 -0
- data/lib/optparse_plus/cli.rb +116 -0
- data/lib/optparse_plus/cli_logger.rb +133 -0
- data/lib/optparse_plus/cli_logging.rb +138 -0
- data/lib/optparse_plus/cucumber.rb +119 -0
- data/lib/optparse_plus/error.rb +32 -0
- data/lib/optparse_plus/execution_strategy/base.rb +34 -0
- data/lib/optparse_plus/execution_strategy/jvm.rb +37 -0
- data/lib/optparse_plus/execution_strategy/mri.rb +16 -0
- data/lib/optparse_plus/execution_strategy/open_3.rb +16 -0
- data/lib/optparse_plus/execution_strategy/open_4.rb +22 -0
- data/lib/optparse_plus/execution_strategy/rbx_open_4.rb +12 -0
- data/lib/optparse_plus/exit_now.rb +40 -0
- data/lib/optparse_plus/main.rb +603 -0
- data/lib/optparse_plus/process_status.rb +45 -0
- data/lib/optparse_plus/sh.rb +223 -0
- data/lib/optparse_plus/test/base_integration_test.rb +31 -0
- data/lib/optparse_plus/test/integration_test_assertions.rb +65 -0
- data/lib/optparse_plus/version.rb +3 -0
- data/optparse_plus.gemspec +28 -0
- data/templates/full/.gitignore.erb +4 -0
- data/templates/full/README.rdoc.erb +24 -0
- data/templates/full/Rakefile.erb +71 -0
- data/templates/full/_license_head.txt.erb +2 -0
- data/templates/full/apache_LICENSE.txt.erb +203 -0
- data/templates/full/bin/executable.erb +45 -0
- data/templates/full/custom_LICENSE.txt.erb +0 -0
- data/templates/full/gplv2_LICENSE.txt.erb +14 -0
- data/templates/full/gplv3_LICENSE.txt.erb +14 -0
- data/templates/full/mit_LICENSE.txt.erb +7 -0
- data/templates/rspec/spec/something_spec.rb.erb +5 -0
- data/templates/test_unit/test/integration/test_cli.rb.erb +11 -0
- data/templates/test_unit/test/unit/test_something.rb.erb +7 -0
- data/test/integration/base_integration_test.rb +60 -0
- data/test/integration/test_bootstrap.rb +150 -0
- data/test/integration/test_cli.rb +21 -0
- data/test/integration/test_license.rb +56 -0
- data/test/integration/test_readme.rb +53 -0
- data/test/integration/test_rspec.rb +28 -0
- data/test/integration/test_version.rb +21 -0
- data/test/unit/base_test.rb +19 -0
- data/test/unit/command_for_tests.sh +7 -0
- data/test/unit/execution_strategy/test_base.rb +24 -0
- data/test/unit/execution_strategy/test_jvm.rb +77 -0
- data/test/unit/execution_strategy/test_mri.rb +32 -0
- data/test/unit/execution_strategy/test_open_3.rb +70 -0
- data/test/unit/execution_strategy/test_open_4.rb +86 -0
- data/test/unit/execution_strategy/test_rbx_open_4.rb +25 -0
- data/test/unit/test/test_integration_test_assertions.rb +211 -0
- data/test/unit/test_cli_logger.rb +219 -0
- data/test/unit/test_cli_logging.rb +243 -0
- data/test/unit/test_exit_now.rb +37 -0
- data/test/unit/test_main.rb +840 -0
- data/test/unit/test_sh.rb +404 -0
- metadata +260 -0
@@ -0,0 +1,404 @@
|
|
1
|
+
require 'base_test'
|
2
|
+
require 'optparse_plus'
|
3
|
+
|
4
|
+
class TestSH < BaseTest
|
5
|
+
include OptparsePlus::SH
|
6
|
+
include OptparsePlus::CLILogging
|
7
|
+
|
8
|
+
class CapturingLogger
|
9
|
+
attr_reader :debugs, :infos, :warns, :errors, :fatals
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@debugs = []
|
13
|
+
@infos = []
|
14
|
+
@warns = []
|
15
|
+
@errors = []
|
16
|
+
@fatals = []
|
17
|
+
end
|
18
|
+
|
19
|
+
def debug(msg); @debugs << msg; end
|
20
|
+
def info(msg); @infos << msg; end
|
21
|
+
def warn(msg); @warns << msg; end
|
22
|
+
def error(msg)
|
23
|
+
# Try to figure out what's going on on Travis
|
24
|
+
STDERR.puts msg if RUBY_PLATFORM == 'java'
|
25
|
+
@errors << msg
|
26
|
+
end
|
27
|
+
def fatal(msg); @fatals << msg; end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
[:sh,:sh!].each do |method|
|
32
|
+
test_that "#{method} runs a successful command and logs about it" do
|
33
|
+
Given {
|
34
|
+
use_capturing_logger
|
35
|
+
@command = test_command
|
36
|
+
}
|
37
|
+
When {
|
38
|
+
@exit_code = self.send(method,@command)
|
39
|
+
}
|
40
|
+
Then {
|
41
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
test_that "#{method}, when the command succeeds and given a block of one argument, gives that block the stdout" do
|
46
|
+
Given {
|
47
|
+
use_capturing_logger
|
48
|
+
@command = test_command
|
49
|
+
@stdout_received = nil
|
50
|
+
}
|
51
|
+
When {
|
52
|
+
@exit_code = self.send(method,@command) do |stdout|
|
53
|
+
@stdout_received = stdout
|
54
|
+
end
|
55
|
+
}
|
56
|
+
Then {
|
57
|
+
@stdout_received.should be == test_command_stdout
|
58
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
test_that "#{method}, when the command succeeds and given a block of zero arguments, calls the block" do
|
63
|
+
Given {
|
64
|
+
use_capturing_logger
|
65
|
+
@command = test_command
|
66
|
+
@block_called = false
|
67
|
+
}
|
68
|
+
When {
|
69
|
+
@exit_code = self.send(method,@command) do
|
70
|
+
@block_called = true
|
71
|
+
end
|
72
|
+
}
|
73
|
+
Then {
|
74
|
+
@block_called.should be == true
|
75
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
test_that "#{method}, when the command succeeds and given a lambda of zero arguments, calls the lambda" do
|
80
|
+
Given {
|
81
|
+
use_capturing_logger
|
82
|
+
@command = test_command
|
83
|
+
@block_called = false
|
84
|
+
@lambda = lambda { @block_called = true }
|
85
|
+
}
|
86
|
+
When {
|
87
|
+
@exit_code = self.send(method,@command,&@lambda)
|
88
|
+
}
|
89
|
+
Then {
|
90
|
+
@block_called.should be == true
|
91
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
test_that "#{method}, when the command succeeds and given a block of two arguments, calls the block with the stdout and stderr" do
|
96
|
+
Given {
|
97
|
+
use_capturing_logger
|
98
|
+
@command = test_command
|
99
|
+
@block_called = false
|
100
|
+
@stdout_received = nil
|
101
|
+
@stderr_received = nil
|
102
|
+
}
|
103
|
+
When {
|
104
|
+
@exit_code = self.send(method,@command) do |stdout,stderr|
|
105
|
+
@stdout_received = stdout
|
106
|
+
@stderr_received = stderr
|
107
|
+
end
|
108
|
+
}
|
109
|
+
Then {
|
110
|
+
@stdout_received.should be == test_command_stdout
|
111
|
+
@stderr_received.length.should be == 0
|
112
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
test_that "#{method}, when the command succeeds and given a block of three arguments, calls the block with the stdout, stderr, and exit code" do
|
117
|
+
Given {
|
118
|
+
use_capturing_logger
|
119
|
+
@command = test_command
|
120
|
+
@block_called = false
|
121
|
+
@stdout_received = nil
|
122
|
+
@stderr_received = nil
|
123
|
+
@exitstatus_received = nil
|
124
|
+
}
|
125
|
+
When {
|
126
|
+
@exit_code = self.send(method,@command) do |stdout,stderr,exitstatus|
|
127
|
+
@stdout_received = stdout
|
128
|
+
@stderr_received = stderr
|
129
|
+
@exitstatus_received = exitstatus
|
130
|
+
end
|
131
|
+
}
|
132
|
+
Then {
|
133
|
+
@stdout_received.should be == test_command_stdout
|
134
|
+
@stderr_received.length.should be == 0
|
135
|
+
@exitstatus_received.should be == 0
|
136
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
137
|
+
}
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
test_that "sh, when the command fails and given a block, doesn't call the block" do
|
142
|
+
Given {
|
143
|
+
use_capturing_logger
|
144
|
+
@command = test_command("foo")
|
145
|
+
@block_called = false
|
146
|
+
}
|
147
|
+
When {
|
148
|
+
@exit_code = sh @command do
|
149
|
+
@block_called = true
|
150
|
+
end
|
151
|
+
}
|
152
|
+
Then {
|
153
|
+
@exit_code.should be == 1
|
154
|
+
assert_logger_output_for_failure(@logger,@command,test_command_stdout,test_command_stderr)
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
test_that "sh, when the command fails with an unexpected status, and given a block, doesn't call the block" do
|
159
|
+
Given {
|
160
|
+
use_capturing_logger
|
161
|
+
@command = test_command("foo")
|
162
|
+
@block_called = false
|
163
|
+
}
|
164
|
+
When {
|
165
|
+
@exit_code = sh @command, :expected => [2] do
|
166
|
+
@block_called = true
|
167
|
+
end
|
168
|
+
}
|
169
|
+
Then {
|
170
|
+
@exit_code.should be == 1
|
171
|
+
assert_logger_output_for_failure(@logger,@command,test_command_stdout,test_command_stderr)
|
172
|
+
}
|
173
|
+
end
|
174
|
+
|
175
|
+
[1,[1],[1,2]].each do |expected|
|
176
|
+
[:sh,:sh!].each do |method|
|
177
|
+
test_that "#{method}, when the command fails with an expected error code (using syntax #{expected}/#{expected.class}), treats it as success" do
|
178
|
+
Given {
|
179
|
+
use_capturing_logger
|
180
|
+
@command = test_command("foo")
|
181
|
+
@block_called = false
|
182
|
+
@exitstatus_received = nil
|
183
|
+
}
|
184
|
+
When {
|
185
|
+
@exit_code = self.send(method,@command,:expected => expected) do |_,_,exitstatus|
|
186
|
+
@block_called = true
|
187
|
+
@exitstatus_received = exitstatus
|
188
|
+
end
|
189
|
+
}
|
190
|
+
Then {
|
191
|
+
@exit_code.should be == 1
|
192
|
+
@block_called.should be == true
|
193
|
+
@exitstatus_received.should be == 1
|
194
|
+
@logger.debugs[0].should be == "Executing '#{test_command}foo'"
|
195
|
+
@logger.debugs[1].should be == "stdout output of '#{test_command}foo': #{test_command_stdout}"
|
196
|
+
@logger.warns[0].should be == "stderr output of '#{test_command}foo': #{test_command_stderr}"
|
197
|
+
}
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
test_that "sh runs a command that will fail and logs about it" do
|
203
|
+
Given {
|
204
|
+
use_capturing_logger
|
205
|
+
@command = test_command("foo")
|
206
|
+
}
|
207
|
+
When {
|
208
|
+
@exit_code = sh @command
|
209
|
+
}
|
210
|
+
Then {
|
211
|
+
@exit_code.should be == 1
|
212
|
+
assert_logger_output_for_failure(@logger,@command,test_command_stdout,test_command_stderr)
|
213
|
+
}
|
214
|
+
end
|
215
|
+
|
216
|
+
test_that "sh runs a non-existent command that will fail and logs about it" do
|
217
|
+
Given {
|
218
|
+
use_capturing_logger
|
219
|
+
@command = "asdfasdfasdfas"
|
220
|
+
}
|
221
|
+
When {
|
222
|
+
@exit_code = sh @command
|
223
|
+
}
|
224
|
+
Then {
|
225
|
+
@exit_code.should be == 127 # consistent with what bash does
|
226
|
+
@logger.errors[0].should match(/^Error running '#{@command}': .+$/)
|
227
|
+
}
|
228
|
+
end
|
229
|
+
|
230
|
+
test_that "sh! runs a command that will fail and logs about it, but throws an exception" do
|
231
|
+
Given {
|
232
|
+
use_capturing_logger
|
233
|
+
@command = test_command("foo")
|
234
|
+
}
|
235
|
+
When {
|
236
|
+
@code = lambda { sh! @command }
|
237
|
+
}
|
238
|
+
Then {
|
239
|
+
exception = assert_raises(OptparsePlus::FailedCommandError,&@code)
|
240
|
+
exception.command.should be == @command
|
241
|
+
assert_logger_output_for_failure(@logger,@command,test_command_stdout,test_command_stderr)
|
242
|
+
}
|
243
|
+
end
|
244
|
+
|
245
|
+
test_that "sh! runs a command that will fail and includes an error message that appears in the exception" do
|
246
|
+
Given {
|
247
|
+
use_capturing_logger
|
248
|
+
@command = test_command("foo")
|
249
|
+
@custom_error_message = any_sentence
|
250
|
+
}
|
251
|
+
When {
|
252
|
+
@code = lambda { sh! @command, :on_fail => @custom_error_message }
|
253
|
+
}
|
254
|
+
Then {
|
255
|
+
exception = assert_raises(OptparsePlus::FailedCommandError,&@code)
|
256
|
+
exception.command.should be == @command
|
257
|
+
exception.message.should be == @custom_error_message
|
258
|
+
assert_logger_output_for_failure(@logger,@command,test_command_stdout,test_command_stderr)
|
259
|
+
}
|
260
|
+
end
|
261
|
+
|
262
|
+
class MyTestApp
|
263
|
+
include OptparsePlus::SH
|
264
|
+
def initialize(logger=nil)
|
265
|
+
set_sh_logger(logger) if logger
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
test_that "when we don't have CLILogging included, we can still provide our own logger" do
|
270
|
+
Given {
|
271
|
+
@logger = CapturingLogger.new
|
272
|
+
@test_app = MyTestApp.new(@logger)
|
273
|
+
@command = test_command
|
274
|
+
}
|
275
|
+
When {
|
276
|
+
@exit_code = @test_app.sh @command
|
277
|
+
}
|
278
|
+
Then {
|
279
|
+
assert_successful_command_execution(@exit_code,@logger,@command,test_command_stdout)
|
280
|
+
}
|
281
|
+
end
|
282
|
+
|
283
|
+
test_that "when we don't have CLILogging included and fail to provide a logger, an exception is thrown" do
|
284
|
+
Given {
|
285
|
+
@test_app = MyTestApp.new
|
286
|
+
@command = test_command
|
287
|
+
}
|
288
|
+
When {
|
289
|
+
@code = lambda { @test_app.sh @command }
|
290
|
+
}
|
291
|
+
Then {
|
292
|
+
assert_raises(StandardError,&@code)
|
293
|
+
}
|
294
|
+
end
|
295
|
+
|
296
|
+
class MyExecutionStrategy
|
297
|
+
include Clean::Test::Any
|
298
|
+
attr_reader :command
|
299
|
+
|
300
|
+
def initialize(exitcode)
|
301
|
+
@exitcode = exitcode
|
302
|
+
@command = nil
|
303
|
+
end
|
304
|
+
|
305
|
+
def run_command(command)
|
306
|
+
@command = command
|
307
|
+
if @exitcode.kind_of? Integer
|
308
|
+
[any_string,any_string,OpenStruct.new(:exitstatus => @exitcode)]
|
309
|
+
else
|
310
|
+
[any_string,any_string,@exitcode]
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def exception_meaning_command_not_found
|
315
|
+
RuntimeError
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
class MyExecutionStrategyApp
|
320
|
+
include OptparsePlus::CLILogging
|
321
|
+
include OptparsePlus::SH
|
322
|
+
|
323
|
+
attr_reader :strategy
|
324
|
+
|
325
|
+
def initialize(exit_code)
|
326
|
+
@strategy = MyExecutionStrategy.new(exit_code)
|
327
|
+
set_execution_strategy(@strategy)
|
328
|
+
set_sh_logger(CapturingLogger.new)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
test_that "when I provide a custom execution strategy, it gets used" do
|
333
|
+
Given {
|
334
|
+
@exit_code = any_int :min => 0, :max => 127
|
335
|
+
@app = MyExecutionStrategyApp.new(@exit_code)
|
336
|
+
@command = "ls"
|
337
|
+
}
|
338
|
+
When {
|
339
|
+
@results = @app.sh(@command)
|
340
|
+
}
|
341
|
+
Then {
|
342
|
+
@app.strategy.command.should be == @command
|
343
|
+
@results.should be == @exit_code
|
344
|
+
}
|
345
|
+
end
|
346
|
+
|
347
|
+
test_that "when the execution strategy returns a non-int, but truthy value, it gets coerced into a 0" do
|
348
|
+
Given {
|
349
|
+
@app = MyExecutionStrategyApp.new(true)
|
350
|
+
@command = "ls"
|
351
|
+
}
|
352
|
+
When {
|
353
|
+
@results = @app.sh(@command)
|
354
|
+
}
|
355
|
+
Then {
|
356
|
+
@app.strategy.command.should be == @command
|
357
|
+
@results.should be == 0
|
358
|
+
}
|
359
|
+
end
|
360
|
+
|
361
|
+
test_that "when the execution strategy returns a non-int, but falsey value, it gets coerced into a 1" do
|
362
|
+
Given {
|
363
|
+
@app = MyExecutionStrategyApp.new(false)
|
364
|
+
@command = "ls"
|
365
|
+
}
|
366
|
+
When {
|
367
|
+
@results = @app.sh(@command)
|
368
|
+
}
|
369
|
+
Then {
|
370
|
+
@app.strategy.command.should be == @command
|
371
|
+
@results.should be == 1
|
372
|
+
}
|
373
|
+
end
|
374
|
+
|
375
|
+
private
|
376
|
+
|
377
|
+
def assert_successful_command_execution(exit_code,logger,command,stdout)
|
378
|
+
exit_code.should be == 0
|
379
|
+
logger.debugs[0].should be == "Executing '#{command}'"
|
380
|
+
logger.debugs[1].should be == "stdout output of '#{command}': #{stdout}"
|
381
|
+
logger.warns.length.should be == 0
|
382
|
+
end
|
383
|
+
|
384
|
+
def assert_logger_output_for_failure(logger,command,stdout,stderr)
|
385
|
+
logger.debugs[0].should be == "Executing '#{command}'"
|
386
|
+
logger.infos[0].should be == "stdout output of '#{command}': #{stdout}"
|
387
|
+
logger.warns[0].should be == "stderr output of '#{command}': #{stderr}"
|
388
|
+
logger.warns[1].should be == "Error running '#{command}'"
|
389
|
+
end
|
390
|
+
|
391
|
+
def use_capturing_logger
|
392
|
+
@logger = CapturingLogger.new
|
393
|
+
change_logger(@logger)
|
394
|
+
end
|
395
|
+
|
396
|
+
# Runs the test command which exits with the length of ARGV/args
|
397
|
+
def test_command(args='')
|
398
|
+
File.join(File.expand_path(File.dirname(__FILE__)),'command_for_tests.sh') + ' ' + args
|
399
|
+
end
|
400
|
+
|
401
|
+
def test_command_stdout; "standard output"; end
|
402
|
+
def test_command_stderr; "standard error"; end
|
403
|
+
|
404
|
+
end
|
metadata
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: optparse-plus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- davetron5000
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-10 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: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
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: rdoc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '6.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '6.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.5'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: clean_test
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.0.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.0.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: i18n
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: OptparsePlus provides a lot of small but useful features for developing
|
140
|
+
a command-line app, including an opinionated bootstrapping process, some helpful
|
141
|
+
integration test support, and some classes to bridge logging and output into a simple,
|
142
|
+
unified, interface
|
143
|
+
email:
|
144
|
+
- davetron5000 at gmail.com
|
145
|
+
executables:
|
146
|
+
- optparse_plus
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- ".gitignore"
|
151
|
+
- ".ruby-gemset"
|
152
|
+
- ".ruby-version"
|
153
|
+
- ".travis.yml"
|
154
|
+
- CHANGES.md
|
155
|
+
- Gemfile
|
156
|
+
- LICENSE.txt
|
157
|
+
- README.rdoc
|
158
|
+
- Rakefile
|
159
|
+
- bin/optparse_plus
|
160
|
+
- fix.rb
|
161
|
+
- lib/optparse-plus.rb
|
162
|
+
- lib/optparse_plus.rb
|
163
|
+
- lib/optparse_plus/argv_parser.rb
|
164
|
+
- lib/optparse_plus/cli.rb
|
165
|
+
- lib/optparse_plus/cli_logger.rb
|
166
|
+
- lib/optparse_plus/cli_logging.rb
|
167
|
+
- lib/optparse_plus/cucumber.rb
|
168
|
+
- lib/optparse_plus/error.rb
|
169
|
+
- lib/optparse_plus/execution_strategy/base.rb
|
170
|
+
- lib/optparse_plus/execution_strategy/jvm.rb
|
171
|
+
- lib/optparse_plus/execution_strategy/mri.rb
|
172
|
+
- lib/optparse_plus/execution_strategy/open_3.rb
|
173
|
+
- lib/optparse_plus/execution_strategy/open_4.rb
|
174
|
+
- lib/optparse_plus/execution_strategy/rbx_open_4.rb
|
175
|
+
- lib/optparse_plus/exit_now.rb
|
176
|
+
- lib/optparse_plus/main.rb
|
177
|
+
- lib/optparse_plus/process_status.rb
|
178
|
+
- lib/optparse_plus/sh.rb
|
179
|
+
- lib/optparse_plus/test/base_integration_test.rb
|
180
|
+
- lib/optparse_plus/test/integration_test_assertions.rb
|
181
|
+
- lib/optparse_plus/version.rb
|
182
|
+
- optparse_plus.gemspec
|
183
|
+
- templates/full/.gitignore.erb
|
184
|
+
- templates/full/README.rdoc.erb
|
185
|
+
- templates/full/Rakefile.erb
|
186
|
+
- templates/full/_license_head.txt.erb
|
187
|
+
- templates/full/apache_LICENSE.txt.erb
|
188
|
+
- templates/full/bin/executable.erb
|
189
|
+
- templates/full/custom_LICENSE.txt.erb
|
190
|
+
- templates/full/gplv2_LICENSE.txt.erb
|
191
|
+
- templates/full/gplv3_LICENSE.txt.erb
|
192
|
+
- templates/full/mit_LICENSE.txt.erb
|
193
|
+
- templates/rspec/spec/something_spec.rb.erb
|
194
|
+
- templates/test_unit/test/integration/test_cli.rb.erb
|
195
|
+
- templates/test_unit/test/unit/test_something.rb.erb
|
196
|
+
- test/integration/base_integration_test.rb
|
197
|
+
- test/integration/test_bootstrap.rb
|
198
|
+
- test/integration/test_cli.rb
|
199
|
+
- test/integration/test_license.rb
|
200
|
+
- test/integration/test_readme.rb
|
201
|
+
- test/integration/test_rspec.rb
|
202
|
+
- test/integration/test_version.rb
|
203
|
+
- test/unit/base_test.rb
|
204
|
+
- test/unit/command_for_tests.sh
|
205
|
+
- test/unit/execution_strategy/test_base.rb
|
206
|
+
- test/unit/execution_strategy/test_jvm.rb
|
207
|
+
- test/unit/execution_strategy/test_mri.rb
|
208
|
+
- test/unit/execution_strategy/test_open_3.rb
|
209
|
+
- test/unit/execution_strategy/test_open_4.rb
|
210
|
+
- test/unit/execution_strategy/test_rbx_open_4.rb
|
211
|
+
- test/unit/test/test_integration_test_assertions.rb
|
212
|
+
- test/unit/test_cli_logger.rb
|
213
|
+
- test/unit/test_cli_logging.rb
|
214
|
+
- test/unit/test_exit_now.rb
|
215
|
+
- test/unit/test_main.rb
|
216
|
+
- test/unit/test_sh.rb
|
217
|
+
homepage: http://github.com/davetron5000/optparse-plus
|
218
|
+
licenses: []
|
219
|
+
metadata: {}
|
220
|
+
post_install_message:
|
221
|
+
rdoc_options: []
|
222
|
+
require_paths:
|
223
|
+
- lib
|
224
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '0'
|
229
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - ">="
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: '0'
|
234
|
+
requirements: []
|
235
|
+
rubygems_version: 3.1.2
|
236
|
+
signing_key:
|
237
|
+
specification_version: 4
|
238
|
+
summary: Wrapper around the Standard Library's Option Parser to make CLIs Easier
|
239
|
+
test_files:
|
240
|
+
- test/integration/base_integration_test.rb
|
241
|
+
- test/integration/test_bootstrap.rb
|
242
|
+
- test/integration/test_cli.rb
|
243
|
+
- test/integration/test_license.rb
|
244
|
+
- test/integration/test_readme.rb
|
245
|
+
- test/integration/test_rspec.rb
|
246
|
+
- test/integration/test_version.rb
|
247
|
+
- test/unit/base_test.rb
|
248
|
+
- test/unit/command_for_tests.sh
|
249
|
+
- test/unit/execution_strategy/test_base.rb
|
250
|
+
- test/unit/execution_strategy/test_jvm.rb
|
251
|
+
- test/unit/execution_strategy/test_mri.rb
|
252
|
+
- test/unit/execution_strategy/test_open_3.rb
|
253
|
+
- test/unit/execution_strategy/test_open_4.rb
|
254
|
+
- test/unit/execution_strategy/test_rbx_open_4.rb
|
255
|
+
- test/unit/test/test_integration_test_assertions.rb
|
256
|
+
- test/unit/test_cli_logger.rb
|
257
|
+
- test/unit/test_cli_logging.rb
|
258
|
+
- test/unit/test_exit_now.rb
|
259
|
+
- test/unit/test_main.rb
|
260
|
+
- test/unit/test_sh.rb
|