baf 0.10.0 → 0.14.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 +5 -5
- data/lib/baf.rb +2 -2
- data/lib/baf/cli.rb +29 -13
- data/lib/baf/env.rb +12 -2
- data/lib/baf/option.rb +8 -8
- data/lib/baf/testing/cucumber/steps/output.rb +4 -0
- data/lib/baf/testing/cucumber/steps/output_wait.rb +3 -3
- data/lib/baf/version.rb +1 -1
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9311e4cba4d27aee336f9983d97efd78d8296b5672ec1dccc3337056b66ba620
|
4
|
+
data.tar.gz: a9ba3e9ab48e78e71173faaa63eece4addadcc9573e28ea6d3b19adbe6fc41c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aeeb1da2a0f359a5a537580ab13384b3cba5501a6c00722c0f025760eb4c31c951ddf0616410138520bd2457972386dd1bf9bd976259aa271d6365187a0d6e7
|
7
|
+
data.tar.gz: 74267eaf156de24338b988e46960565cb1eefc6dc5b241ccb1dba4db022ed6bd313f5932d944833ab010f858b314daeb3145318e01a8a6b52925e730f753f1af
|
data/lib/baf.rb
CHANGED
data/lib/baf/cli.rb
CHANGED
@@ -8,41 +8,52 @@ require 'baf/options_registrant'
|
|
8
8
|
|
9
9
|
module Baf
|
10
10
|
class CLI
|
11
|
-
ArgumentError = Class.new
|
11
|
+
ArgumentError = Class.new ::Baf::ArgumentError
|
12
12
|
|
13
|
-
EX_USAGE
|
13
|
+
EX_USAGE = 64
|
14
14
|
EX_SOFTWARE = 70
|
15
15
|
|
16
16
|
class << self
|
17
17
|
def run arguments, stdin: $stdin, stdout: $stdout, stderr: $stderr
|
18
|
-
cli = new
|
18
|
+
cli = new env = build_env(stdin, stdout, stderr), arguments
|
19
19
|
cli.parse_arguments!
|
20
20
|
cli.run
|
21
21
|
rescue ArgumentError => e
|
22
22
|
stderr.puts e
|
23
23
|
exit EX_USAGE
|
24
24
|
rescue StandardError => e
|
25
|
-
|
26
|
-
|
25
|
+
if respond_to? :handle_error
|
26
|
+
status = handle_error cli.env, e
|
27
|
+
exit status if status.respond_to? :to_int
|
28
|
+
else
|
29
|
+
stderr.puts "#{e.class.name}: #{e}"
|
30
|
+
stderr.puts e.backtrace.map { |l| ' %s' % l }
|
31
|
+
end
|
27
32
|
exit EX_SOFTWARE
|
28
33
|
end
|
29
34
|
|
30
35
|
private
|
31
36
|
|
37
|
+
def build_env stdin, stdout, stderr
|
38
|
+
env_class.new input: stdin, output: stdout, output_error: stderr
|
39
|
+
end
|
40
|
+
|
32
41
|
def env_class
|
33
42
|
return Env unless parent_name = name =~ /::[^:]+\Z/ ? $` : nil
|
34
|
-
parent = Object.const_get
|
43
|
+
parent = Object.const_get parent_name
|
35
44
|
parent.const_defined?(:Env) ? parent.const_get(:Env) : Env
|
36
45
|
end
|
46
|
+
|
47
|
+
def ruby2_keywords *; end unless Module.respond_to? :ruby2_keywords, true
|
37
48
|
end
|
38
49
|
|
39
50
|
attr_reader :arguments, :env, :parser
|
40
51
|
|
41
52
|
def initialize env, arguments, **opts
|
42
|
-
@env
|
43
|
-
@arguments
|
44
|
-
@parser
|
45
|
-
@registrant = opts
|
53
|
+
@env = env
|
54
|
+
@arguments = arguments
|
55
|
+
@parser = opts.fetch(:parser) { OptionParser.new }
|
56
|
+
@registrant = opts.fetch(:registrant) { OptionsRegistrant.new }
|
46
57
|
|
47
58
|
registrant.register(env, parser) { setup }
|
48
59
|
end
|
@@ -54,6 +65,7 @@ module Baf
|
|
54
65
|
registrant.banner = arg
|
55
66
|
end
|
56
67
|
|
68
|
+
ruby2_keywords \
|
57
69
|
def flag *args
|
58
70
|
registrant.flag *args
|
59
71
|
end
|
@@ -71,15 +83,19 @@ module Baf
|
|
71
83
|
tail: true
|
72
84
|
end
|
73
85
|
|
74
|
-
def option *args
|
75
|
-
args = [*args,
|
86
|
+
def option *args, &block
|
87
|
+
args = [*args, block] if block_given?
|
76
88
|
registrant.option *args
|
77
89
|
end
|
78
90
|
|
79
91
|
def parse_arguments!
|
80
92
|
parser.parse! arguments
|
81
93
|
rescue OptionParser::InvalidOption
|
82
|
-
|
94
|
+
fail ArgumentError, parser
|
95
|
+
end
|
96
|
+
|
97
|
+
def usage!
|
98
|
+
fail ArgumentError, parser
|
83
99
|
end
|
84
100
|
|
85
101
|
def run
|
data/lib/baf/env.rb
CHANGED
@@ -5,10 +5,20 @@ module Baf
|
|
5
5
|
extend Forwardable
|
6
6
|
def_delegators :@input, :gets
|
7
7
|
def_delegators :@output, :print, :puts
|
8
|
+
def_delegator :@output_error, :puts, :puts_error
|
8
9
|
|
9
|
-
def initialize input: $
|
10
|
-
@input
|
10
|
+
def initialize input: $stdin, output: $stdout, output_error: $stderr
|
11
|
+
@input = input
|
11
12
|
@output = output
|
13
|
+
@output_error = output_error
|
12
14
|
end
|
15
|
+
|
16
|
+
def sync_output
|
17
|
+
output.sync = true
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :output
|
13
23
|
end
|
14
24
|
end
|
data/lib/baf/option.rb
CHANGED
@@ -41,20 +41,20 @@ module Baf
|
|
41
41
|
|
42
42
|
def build_attrs short, long, arg_or_desc = nil, desc_or_block = nil, block = nil
|
43
43
|
{
|
44
|
-
short:
|
45
|
-
long:
|
46
|
-
desc:
|
44
|
+
short: short,
|
45
|
+
long: long,
|
46
|
+
desc: arg_or_desc
|
47
47
|
}.merge case desc_or_block
|
48
48
|
when Proc
|
49
49
|
{
|
50
|
-
desc:
|
51
|
-
block:
|
50
|
+
desc: arg_or_desc,
|
51
|
+
block: desc_or_block
|
52
52
|
}
|
53
53
|
when String
|
54
54
|
{
|
55
|
-
arg:
|
56
|
-
desc:
|
57
|
-
block:
|
55
|
+
arg: arg_or_desc,
|
56
|
+
desc: desc_or_block,
|
57
|
+
block: block
|
58
58
|
}
|
59
59
|
else
|
60
60
|
{}
|
@@ -14,6 +14,10 @@ def expect_output content, stream: :output
|
|
14
14
|
end
|
15
15
|
|
16
16
|
|
17
|
+
Then /^the output must be empty$/ do
|
18
|
+
expect(last_command_started.output).to be_empty
|
19
|
+
end
|
20
|
+
|
17
21
|
Then /^the output must contain:$/ do |content|
|
18
22
|
expect(last_command_started.output).to include unescape_text content
|
19
23
|
end
|
@@ -33,19 +33,19 @@ def wait_until message: 'condition not met after %d seconds'
|
|
33
33
|
timeout = ENV.key?('BAF_TEST_TIMEOUT') ?
|
34
34
|
ENV['BAF_TEST_TIMEOUT'].to_i :
|
35
35
|
2
|
36
|
-
Timeout.timeout
|
36
|
+
Timeout.timeout timeout do
|
37
37
|
loop do
|
38
38
|
break if yield
|
39
39
|
sleep 0.05
|
40
40
|
end
|
41
41
|
end
|
42
42
|
rescue Timeout::Error
|
43
|
-
|
43
|
+
fail Baf::Testing::WaitError.new(message % timeout, timeout)
|
44
44
|
end
|
45
45
|
|
46
46
|
|
47
47
|
Then /^the output will match \/([^\/]+)\/([a-z]*)$/ do |pattern, options|
|
48
|
-
wait_output! build_regexp
|
48
|
+
wait_output! build_regexp pattern, options
|
49
49
|
end
|
50
50
|
|
51
51
|
Then /^the output will contain:$/ do |content|
|
data/lib/baf/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: baf-testing
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -60,7 +60,7 @@ homepage: https://rubygems.org/gems/baf
|
|
60
60
|
licenses:
|
61
61
|
- BSD-3-Clause
|
62
62
|
metadata: {}
|
63
|
-
post_install_message:
|
63
|
+
post_install_message:
|
64
64
|
rdoc_options: []
|
65
65
|
require_paths:
|
66
66
|
- lib
|
@@ -75,9 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
|
-
|
79
|
-
|
80
|
-
signing_key:
|
78
|
+
rubygems_version: 3.1.4
|
79
|
+
signing_key:
|
81
80
|
specification_version: 4
|
82
81
|
summary: Basic Application Framework
|
83
82
|
test_files: []
|