eac_tools 0.81.0 → 0.82.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 +4 -4
- data/Gemfile.lock +10 -10
- data/lib/eac_tools/version.rb +1 -1
- data/sub/avm/avm.gemspec +2 -2
- data/sub/avm/lib/avm/sources/base/sub/remove.rb +38 -0
- data/sub/avm/lib/avm/sources/base/sub.rb +26 -0
- data/sub/avm/lib/avm/sources/base/subs.rb +7 -0
- data/sub/avm/lib/avm/version.rb +1 -1
- data/sub/avm/locale/en.yml +6 -0
- data/sub/avm/locale/pt-BR.yml +6 -0
- data/sub/avm-tools/avm-tools.gemspec +1 -1
- data/sub/avm-tools/lib/avm/tools/runner/source/sub/remove.rb +22 -0
- data/sub/avm-tools/lib/avm/tools/runner/source/sub.rb +29 -0
- data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
- data/sub/eac_cli/eac_cli.gemspec +2 -2
- data/sub/eac_cli/lib/eac_cli/definition/alternative.rb +4 -4
- data/sub/eac_cli/lib/eac_cli/definition/argument_option.rb +2 -2
- data/sub/eac_cli/lib/eac_cli/definition/boolean_option.rb +3 -4
- data/sub/eac_cli/lib/eac_cli/definition/{base_option → option}/initialize_args_parser.rb +1 -1
- data/sub/eac_cli/lib/eac_cli/definition/option.rb +73 -0
- data/sub/eac_cli/lib/eac_cli/definition/option_or_positional.rb +43 -0
- data/sub/eac_cli/lib/eac_cli/definition/{positional_argument.rb → positional.rb} +14 -22
- data/sub/eac_cli/lib/eac_cli/definition.rb +17 -3
- data/sub/eac_cli/lib/eac_cli/parser/alternative/argv.rb +2 -0
- data/sub/eac_cli/lib/eac_cli/parser/alternative/short_options.rb +10 -1
- data/sub/eac_cli/lib/eac_cli/parser/alternative.rb +20 -0
- data/sub/eac_cli/lib/eac_cli/parser/collector.rb +10 -1
- data/sub/eac_cli/lib/eac_cli/rspec.rb +1 -1
- data/sub/eac_cli/lib/eac_cli/runner/class_runner.rb +1 -1
- data/sub/eac_cli/lib/eac_cli/version.rb +1 -1
- data/sub/eac_cli/spec/lib/eac_cli/parser/alternative/subcommands_spec.rb +58 -0
- data/sub/eac_cli/spec/lib/eac_cli/parser/alternative_spec.rb +1 -52
- data/sub/eac_cli/spec/lib/eac_cli/runner/for_context_spec.rb +3 -3
- data/sub/eac_cli/spec/lib/eac_cli/runner_with/output_spec.rb +2 -2
- metadata +17 -10
- data/sub/eac_cli/lib/eac_cli/definition/base_option.rb +0 -68
- data/sub/eac_cli/lib/eac_cli/definition/default_value.rb +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 708d42ba52d2d044676786c93ad0213f7ace3709a8c7463232283ed38fb65fd7
|
|
4
|
+
data.tar.gz: 8258727a71e6eecb3f2bb4d9513381bec6303e405bfd35e49ddcd193d26d0a4b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 01442d1e31829b644915a656db3c53c33643fff0706a2cc2848ef72abf95370049b6d98d5128739679b30fd8692cff897bf42c9fe164e2a088f5912343d9b48d
|
|
7
|
+
data.tar.gz: 6a2bd15e0ce916d2f99d0cb71048efadda6961d373614df80b04fce683ff89b522e402683a8533c966fa7e2b0b6278eaed2b02af621c4c2877be8bdefc3ee02d
|
data/Gemfile.lock
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
eac_tools (0.
|
|
5
|
-
avm (~> 0.
|
|
4
|
+
eac_tools (0.82.0)
|
|
5
|
+
avm (~> 0.83)
|
|
6
6
|
avm-eac_asciidoctor_base0 (~> 0.19)
|
|
7
7
|
avm-eac_generic_base0 (~> 0.12, >= 0.12.1)
|
|
8
8
|
avm-eac_github_base0 (~> 0.3)
|
|
@@ -18,7 +18,7 @@ PATH
|
|
|
18
18
|
avm-eac_webapp_base0 (~> 0.18, >= 0.18.2)
|
|
19
19
|
avm-eac_wordpress_base0 (~> 0.3, >= 0.3.1)
|
|
20
20
|
avm-git (~> 0.14)
|
|
21
|
-
avm-tools (~> 0.
|
|
21
|
+
avm-tools (~> 0.159)
|
|
22
22
|
eac_ruby_utils (~> 0.119, >= 0.119.2)
|
|
23
23
|
|
|
24
24
|
PATH
|
|
@@ -180,9 +180,9 @@ PATH
|
|
|
180
180
|
PATH
|
|
181
181
|
remote: sub/avm-tools
|
|
182
182
|
specs:
|
|
183
|
-
avm-tools (0.
|
|
183
|
+
avm-tools (0.159.0)
|
|
184
184
|
aranha-parsers (~> 0.21)
|
|
185
|
-
avm (~> 0.
|
|
185
|
+
avm (~> 0.83)
|
|
186
186
|
avm-eac_ruby_base1 (~> 0.33)
|
|
187
187
|
avm-eac_ubuntu_base0 (~> 0.5)
|
|
188
188
|
avm-files (~> 0.6, >= 0.6.2)
|
|
@@ -198,9 +198,9 @@ PATH
|
|
|
198
198
|
PATH
|
|
199
199
|
remote: sub/avm
|
|
200
200
|
specs:
|
|
201
|
-
avm (0.
|
|
201
|
+
avm (0.83.0)
|
|
202
202
|
aranha-parsers (~> 0.21)
|
|
203
|
-
eac_cli (~> 0.38)
|
|
203
|
+
eac_cli (~> 0.38, >= 0.38.1)
|
|
204
204
|
eac_config (~> 0.14, >= 0.14.1)
|
|
205
205
|
eac_docker (~> 0.7)
|
|
206
206
|
eac_fs (~> 0.16)
|
|
@@ -214,9 +214,9 @@ PATH
|
|
|
214
214
|
PATH
|
|
215
215
|
remote: sub/eac_cli
|
|
216
216
|
specs:
|
|
217
|
-
eac_cli (0.38.
|
|
217
|
+
eac_cli (0.38.1)
|
|
218
218
|
colorize (~> 0.8, >= 0.8.1)
|
|
219
|
-
eac_config (~> 0.14)
|
|
219
|
+
eac_config (~> 0.14, >= 0.14.1)
|
|
220
220
|
eac_ruby_utils (~> 0.119, >= 0.119.2)
|
|
221
221
|
|
|
222
222
|
PATH
|
|
@@ -253,7 +253,7 @@ GEM
|
|
|
253
253
|
ofx-parser (~> 1.1)
|
|
254
254
|
asciidoctor (2.0.20)
|
|
255
255
|
ast (2.4.2)
|
|
256
|
-
base64 (0.
|
|
256
|
+
base64 (0.2.0)
|
|
257
257
|
clipboard (1.3.6)
|
|
258
258
|
colorize (0.8.1)
|
|
259
259
|
concurrent-ruby (1.2.2)
|
data/lib/eac_tools/version.rb
CHANGED
data/sub/avm/avm.gemspec
CHANGED
|
@@ -10,10 +10,10 @@ Gem::Specification.new do |s|
|
|
|
10
10
|
s.authors = ['Eduardo H. Bogoni']
|
|
11
11
|
s.summary = 'Ruby base library for Agora Vai! Methodology (https://avm.esquiloazul.tech).'
|
|
12
12
|
|
|
13
|
-
s.files = Dir['{lib}/**/*']
|
|
13
|
+
s.files = Dir['{lib, locale}/**/*']
|
|
14
14
|
|
|
15
15
|
s.add_dependency 'aranha-parsers', '~> 0.21'
|
|
16
|
-
s.add_dependency 'eac_cli', '~> 0.38'
|
|
16
|
+
s.add_dependency 'eac_cli', '~> 0.38', '>= 0.38.1'
|
|
17
17
|
s.add_dependency 'eac_config', '~> 0.14', '>= 0.14.1'
|
|
18
18
|
s.add_dependency 'eac_docker', '~> 0.7'
|
|
19
19
|
s.add_dependency 'eac_fs', '~> 0.16'
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module Avm
|
|
6
|
+
module Sources
|
|
7
|
+
class Base
|
|
8
|
+
class Sub
|
|
9
|
+
class Remove
|
|
10
|
+
acts_as_instance_method
|
|
11
|
+
|
|
12
|
+
# !method initialize(sub)
|
|
13
|
+
# @param sub [Avm::Sources::Base::Sub]
|
|
14
|
+
common_constructor :sub
|
|
15
|
+
delegate :source, to: :sub
|
|
16
|
+
|
|
17
|
+
# @return [void]
|
|
18
|
+
def result
|
|
19
|
+
source.scm.commit_if_change(commit_message) { do_changes }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
# @return [String]
|
|
25
|
+
def commit_message
|
|
26
|
+
sub.i18n_translate(:remove_commit_message, sub_path: sub.sub_path)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [void]
|
|
30
|
+
def do_changes
|
|
31
|
+
::FileUtils.rm_rf(sub.absolute_path)
|
|
32
|
+
source.on_sub_updated
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'avm/sources/base/subs_paths'
|
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
|
5
|
+
|
|
6
|
+
module Avm
|
|
7
|
+
module Sources
|
|
8
|
+
class Base
|
|
9
|
+
class Sub
|
|
10
|
+
# !method initialize(source, sub_path)
|
|
11
|
+
# @param source [Avm::Sources::Base]
|
|
12
|
+
# @param sub_path [Pathname]
|
|
13
|
+
common_constructor :source, :sub_path do
|
|
14
|
+
self.sub_path = sub_path.to_pathname
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @return [Pathname]
|
|
18
|
+
def absolute_path
|
|
19
|
+
sub_path.expand_path(source.path)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
require_sub __FILE__, require_mode: :kernel
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'avm/sources/base/sub'
|
|
3
4
|
require 'avm/sources/base/subs_paths'
|
|
4
5
|
require 'eac_ruby_utils/core_ext'
|
|
5
6
|
|
|
@@ -17,6 +18,12 @@ module Avm
|
|
|
17
18
|
subs.lazy.map { |sub| path.expand_path.child_of?(sub.path) ? sub : nil }.find(&:present?)
|
|
18
19
|
end
|
|
19
20
|
|
|
21
|
+
# @param sub_path [Pathname]
|
|
22
|
+
# @return [Avm::Sources::Base::Sub]
|
|
23
|
+
def sub(sub_path)
|
|
24
|
+
::Avm::Sources::Base::Sub.new(self, sub_path)
|
|
25
|
+
end
|
|
26
|
+
|
|
20
27
|
# @return [Enumerable<Avm::Sources::Base>]
|
|
21
28
|
def subs
|
|
22
29
|
subs_paths_to_search
|
data/sub/avm/lib/avm/version.rb
CHANGED
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.required_ruby_version = '>= 2.7.0'
|
|
18
18
|
|
|
19
19
|
s.add_dependency 'aranha-parsers', '~> 0.21'
|
|
20
|
-
s.add_dependency 'avm', '~> 0.
|
|
20
|
+
s.add_dependency 'avm', '~> 0.83'
|
|
21
21
|
s.add_dependency 'avm-eac_ruby_base1', '~> 0.33'
|
|
22
22
|
s.add_dependency 'avm-eac_ubuntu_base0', '~> 0.5'
|
|
23
23
|
s.add_dependency 'avm-files', '~> 0.6', '>= 0.6.2'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'avm/tools/core_ext'
|
|
4
|
+
|
|
5
|
+
module Avm
|
|
6
|
+
module Tools
|
|
7
|
+
class Runner
|
|
8
|
+
class Source < ::Avm::Sources::Runner
|
|
9
|
+
class Sub
|
|
10
|
+
class Remove
|
|
11
|
+
runner_with :help
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
source_sub.remove
|
|
15
|
+
success "Sub[#{source_sub.sub_path}] removed"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'avm/tools/core_ext'
|
|
4
|
+
|
|
5
|
+
module Avm
|
|
6
|
+
module Tools
|
|
7
|
+
class Runner
|
|
8
|
+
class Source < ::Avm::Sources::Runner
|
|
9
|
+
class Sub
|
|
10
|
+
runner_with :help, :subcommands do
|
|
11
|
+
pos_arg :sub_path
|
|
12
|
+
subcommands
|
|
13
|
+
end
|
|
14
|
+
for_context :source_sub
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
# !method source_sub
|
|
19
|
+
# @return [Avm::Sources::Base::Sub]
|
|
20
|
+
def source_sub_uncached
|
|
21
|
+
source.sub(parsed.sub_path)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
require_sub __FILE__
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/sub/eac_cli/eac_cli.gemspec
CHANGED
|
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.required_ruby_version = '>= 2.7.0'
|
|
16
16
|
|
|
17
17
|
s.add_dependency 'colorize', '~> 0.8', '>= 0.8.1'
|
|
18
|
-
s.add_dependency 'eac_config', '~> 0.14'
|
|
18
|
+
s.add_dependency 'eac_config', '~> 0.14', '>= 0.14.1'
|
|
19
19
|
s.add_dependency 'eac_ruby_utils', '~> 0.119', '>= 0.119.2'
|
|
20
20
|
|
|
21
|
-
s.add_development_dependency 'eac_ruby_gem_support', '~> 0.
|
|
21
|
+
s.add_development_dependency 'eac_ruby_gem_support', '~> 0.9'
|
|
22
22
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'eac_cli/definition/argument_option'
|
|
4
4
|
require 'eac_cli/definition/boolean_option'
|
|
5
|
-
require 'eac_cli/definition/
|
|
5
|
+
require 'eac_cli/definition/positional'
|
|
6
6
|
|
|
7
7
|
module EacCli
|
|
8
8
|
class Definition
|
|
@@ -54,7 +54,7 @@ module EacCli
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def pos_arg(name, arg_options = {})
|
|
57
|
-
new_pos_arg = ::EacCli::Definition::
|
|
57
|
+
new_pos_arg = ::EacCli::Definition::Positional.new(name, arg_options)
|
|
58
58
|
check_positional_blocked(new_pos_arg)
|
|
59
59
|
pos_set << new_pos_arg
|
|
60
60
|
end
|
|
@@ -76,8 +76,8 @@ module EacCli
|
|
|
76
76
|
|
|
77
77
|
def subcommands
|
|
78
78
|
pos_arg(SUBCOMMAND_NAME_ARG, subcommand: true)
|
|
79
|
-
pos_set << ::EacCli::Definition::
|
|
80
|
-
|
|
79
|
+
pos_set << ::EacCli::Definition::Positional.new(SUBCOMMAND_ARGS_ARG,
|
|
80
|
+
optional: true, repeat: true)
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def subcommands?
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'eac_cli/definition/
|
|
3
|
+
require 'eac_cli/definition/option'
|
|
4
4
|
|
|
5
5
|
module EacCli
|
|
6
6
|
class Definition
|
|
7
|
-
class ArgumentOption < ::EacCli::Definition::
|
|
7
|
+
class ArgumentOption < ::EacCli::Definition::Option
|
|
8
8
|
def argument?
|
|
9
9
|
true
|
|
10
10
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'eac_cli/definition/
|
|
3
|
+
require 'eac_cli/definition/option'
|
|
4
4
|
|
|
5
5
|
module EacCli
|
|
6
6
|
class Definition
|
|
7
|
-
class BooleanOption < ::EacCli::Definition::
|
|
7
|
+
class BooleanOption < ::EacCli::Definition::Option
|
|
8
8
|
def argument?
|
|
9
9
|
false
|
|
10
10
|
end
|
|
@@ -16,8 +16,7 @@ module EacCli
|
|
|
16
16
|
def default_value
|
|
17
17
|
return super unless default_value?
|
|
18
18
|
|
|
19
|
-
raise(
|
|
20
|
-
"Unallowed default value for boolean options (Option: #{self})")
|
|
19
|
+
raise("Unallowed default value for boolean options (Option: #{self})")
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
def default_default_value
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_cli/definition/option_or_positional'
|
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
|
5
|
+
|
|
6
|
+
module EacCli
|
|
7
|
+
class Definition
|
|
8
|
+
# @abstract
|
|
9
|
+
class Option < ::EacCli::Definition::OptionOrPositional
|
|
10
|
+
require_sub __FILE__
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
# @param args [Enumerable<String>]
|
|
14
|
+
# @return [EacCli::Definition::Option]
|
|
15
|
+
def from_args(args)
|
|
16
|
+
p = ::EacCli::Definition::Option::InitializeArgsParser.new(args)
|
|
17
|
+
new(p.short, p.long, p.description, p.options)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
DEFAULT_REQUIRED = false
|
|
22
|
+
|
|
23
|
+
enable_abstract_methods
|
|
24
|
+
lists.add_symbol :option, *OPTION_LIST, :default, :usage
|
|
25
|
+
|
|
26
|
+
# @!method initialize(short, long, description, options = {})
|
|
27
|
+
# @param short [String]
|
|
28
|
+
# @param long [String]
|
|
29
|
+
# @param description [String]
|
|
30
|
+
# @param options [Hash<Symbol, Object>]
|
|
31
|
+
# @raise [EacCli::Definition::Error]
|
|
32
|
+
common_constructor :short, :long, :description, :options, default: [{}] do
|
|
33
|
+
validate
|
|
34
|
+
self.options = ::EacCli::Definition::Option.lists.option.hash_keys_validate!(
|
|
35
|
+
options.symbolize_keys
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [Object]
|
|
40
|
+
def default_value
|
|
41
|
+
default_value? ? options[OPTION_DEFAULT] : default_default_value
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @return [Boolean]
|
|
45
|
+
def default_value?
|
|
46
|
+
options.key?(OPTION_DEFAULT)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# @return [Symbol]
|
|
50
|
+
# @raise [EacCli::Definition::Error] If no short or long option is provided.
|
|
51
|
+
def identifier
|
|
52
|
+
[long, short].each do |v|
|
|
53
|
+
v.to_s.if_present { |vv| return vv.variableize.to_sym }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
raise('No short or long option to build identifier')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @return [Boolean]
|
|
60
|
+
def show_on_usage?
|
|
61
|
+
options[:usage]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# @return [void]
|
|
67
|
+
# @raise [EacCli::Definition::Error]
|
|
68
|
+
def validate
|
|
69
|
+
raise 'Nor short neither long selector was set' if short.blank? && long.blank?
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module EacCli
|
|
6
|
+
class Definition
|
|
7
|
+
# @abstract
|
|
8
|
+
class OptionOrPositional
|
|
9
|
+
acts_as_abstract :build_value, :default_value, :identifier, :options
|
|
10
|
+
enable_listable
|
|
11
|
+
|
|
12
|
+
OPTION_LIST = %i[optional repeat required].freeze
|
|
13
|
+
|
|
14
|
+
# @return [Boolean]
|
|
15
|
+
def optional?
|
|
16
|
+
!required?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @raise [EacCli::Definition::Error]
|
|
20
|
+
def raise(*args)
|
|
21
|
+
::Kernel.raise ::EacCli::Definition::Error, *args
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @return [Boolean]
|
|
25
|
+
def repeat?
|
|
26
|
+
options[:repeat] ? true : false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [Boolean]
|
|
30
|
+
def required?
|
|
31
|
+
return true if options.key?(:required) && options.fetch(:required)
|
|
32
|
+
return false if options.key?(:optional) && options.fetch(:optional)
|
|
33
|
+
|
|
34
|
+
self.class.const_get('DEFAULT_REQUIRED')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @return [String]
|
|
38
|
+
def to_s
|
|
39
|
+
"#{self.class.name.demodulize}[#{identifier}]"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'eac_cli/definition/option_or_positional'
|
|
3
4
|
require 'eac_ruby_utils/core_ext'
|
|
4
5
|
|
|
5
6
|
module EacCli
|
|
6
7
|
class Definition
|
|
7
|
-
class
|
|
8
|
+
class Positional < ::EacCli::Definition::OptionOrPositional
|
|
8
9
|
DEFAULT_REQUIRED = true
|
|
9
10
|
DEFAULT_VISIBLE = true
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
lists.add_symbol :option, *OPTION_LIST, :subcommand, :visible
|
|
13
|
+
|
|
14
|
+
# @!method initialize(name, options = {})
|
|
15
|
+
# @param name [String]
|
|
16
|
+
# @param options [Hash<Symbol, Object>]
|
|
13
17
|
common_constructor :name, :options, default: [{}] do
|
|
14
18
|
options.assert_valid_keys(self.class.lists.option.values)
|
|
15
19
|
end
|
|
16
20
|
|
|
21
|
+
# @param new_value [Array, Object]
|
|
22
|
+
# @param previous_value [Array, Object]
|
|
23
|
+
# @return [Array]
|
|
17
24
|
def build_value(new_value, previous_value)
|
|
18
25
|
if previous_value.is_a?(::Array)
|
|
19
26
|
previous_value + [new_value]
|
|
@@ -22,37 +29,22 @@ module EacCli
|
|
|
22
29
|
end
|
|
23
30
|
end
|
|
24
31
|
|
|
32
|
+
# @return [Object]
|
|
25
33
|
def default_value
|
|
26
34
|
repeat? ? [] : nil
|
|
27
35
|
end
|
|
28
36
|
|
|
37
|
+
# @return [Symbol]
|
|
29
38
|
def identifier
|
|
30
39
|
name.to_s.variableize.to_sym
|
|
31
40
|
end
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
!required?
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def repeat?
|
|
38
|
-
options[OPTION_REPEAT]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def required?
|
|
42
|
-
return true if options.key?(OPTION_REQUIRED) && options.fetch(OPTION_REQUIRED)
|
|
43
|
-
return false if options.key?(OPTION_OPTIONAL) && options.fetch(OPTION_OPTIONAL)
|
|
44
|
-
|
|
45
|
-
DEFAULT_REQUIRED
|
|
46
|
-
end
|
|
47
|
-
|
|
42
|
+
# @return [Boolean]
|
|
48
43
|
def subcommand?
|
|
49
44
|
options[OPTION_SUBCOMMAND]
|
|
50
45
|
end
|
|
51
46
|
|
|
52
|
-
|
|
53
|
-
"#{self.class.name.demodulize}[#{identifier}]"
|
|
54
|
-
end
|
|
55
|
-
|
|
47
|
+
# @return [Boolean]
|
|
56
48
|
def visible?
|
|
57
49
|
options.key?(OPTION_VISIBLE) ? options.fetch(OPTION_VISIBLE) : DEFAULT_VISIBLE
|
|
58
50
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'eac_cli/definition/argument_option'
|
|
4
4
|
require 'eac_cli/definition/boolean_option'
|
|
5
|
-
require 'eac_cli/definition/
|
|
5
|
+
require 'eac_cli/definition/positional'
|
|
6
6
|
require 'eac_ruby_utils/core_ext'
|
|
7
7
|
|
|
8
8
|
module EacCli
|
|
@@ -13,6 +13,7 @@ module EacCli
|
|
|
13
13
|
SUBCOMMAND_NAME_ARG = 'subcommand'
|
|
14
14
|
SUBCOMMAND_ARGS_ARG = 'subcommand_args'
|
|
15
15
|
|
|
16
|
+
# @return [String, nil]
|
|
16
17
|
attr_accessor :description
|
|
17
18
|
|
|
18
19
|
def initialize
|
|
@@ -20,25 +21,35 @@ module EacCli
|
|
|
20
21
|
alternatives_set[MAIN_ALTERNATIVE_KEY] = main_alternative
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
# @return [EacCli::Definition::Alternative]
|
|
25
|
+
def alt(key = nil, &block)
|
|
26
|
+
key ||= new_alternative_key
|
|
27
|
+
raise(::EacCli::Definition::Error, "A alternative with key=\"#{key}\" already exists") if
|
|
28
|
+
key.present? && alternatives_set.key?(key)
|
|
29
|
+
|
|
24
30
|
r = ::EacCli::Definition::Alternative.new
|
|
25
31
|
r.instance_eval(&block)
|
|
26
|
-
alternatives_set[
|
|
32
|
+
alternatives_set[key] = r
|
|
27
33
|
r
|
|
28
34
|
end
|
|
29
35
|
|
|
36
|
+
# @return [Enumerable<EacCli::Definition::Alternative>]
|
|
30
37
|
def alternatives
|
|
31
38
|
alternatives_set.values
|
|
32
39
|
end
|
|
33
40
|
|
|
41
|
+
# @return [EacCli::Definition::Alternative]
|
|
42
|
+
# @raise [KeyError] If there is not a alternative with provided key.
|
|
34
43
|
def alternative(key)
|
|
35
44
|
alternatives_set.fetch(key)
|
|
36
45
|
end
|
|
37
46
|
|
|
47
|
+
# Same as {#description=}.
|
|
38
48
|
def desc(description)
|
|
39
49
|
self.description = description
|
|
40
50
|
end
|
|
41
51
|
|
|
52
|
+
# @return [EacCli::Definition::Alternative]
|
|
42
53
|
def main_alternative
|
|
43
54
|
@main_alternative ||= begin
|
|
44
55
|
r = ::EacCli::Definition::Alternative.new
|
|
@@ -47,10 +58,13 @@ module EacCli
|
|
|
47
58
|
end
|
|
48
59
|
end
|
|
49
60
|
|
|
61
|
+
# Same as {#options_argument=}.
|
|
62
|
+
# @param options_argument [Boolean]
|
|
50
63
|
def options_arg(options_argument)
|
|
51
64
|
self.options_argument = options_argument
|
|
52
65
|
end
|
|
53
66
|
|
|
67
|
+
# @return [Boolean]
|
|
54
68
|
def options_argument
|
|
55
69
|
main_alternative.options_argument?
|
|
56
70
|
end
|
|
@@ -5,23 +5,29 @@ module EacCli
|
|
|
5
5
|
class Alternative
|
|
6
6
|
module ShortOptions
|
|
7
7
|
SHORT_OPTION_PREFIX = '-'
|
|
8
|
+
SHORT_OPTION_CHAR_PATTERN = /\A[0-9a-zA-Z]\z/.freeze
|
|
8
9
|
|
|
9
10
|
private
|
|
10
11
|
|
|
12
|
+
# @return [Boolean]
|
|
11
13
|
def argv_current_short_option?
|
|
12
14
|
phase == PHASE_ANY && argv_enum.peek.start_with?(SHORT_OPTION_PREFIX) &&
|
|
13
15
|
!argv_current_long_option?
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
# @para char [String]
|
|
19
|
+
# @return [EacCli::Definition::Option, nil]
|
|
16
20
|
def find_short_option(char)
|
|
17
21
|
alternative.options.find do |option|
|
|
18
22
|
short_without_prefix(option.short).if_present(false) { |v| v == char }
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
25
|
|
|
26
|
+
# @return [void]
|
|
22
27
|
def short_option_collect_argv_value
|
|
23
28
|
last_option = nil
|
|
24
29
|
short_without_prefix(argv_enum.peek).each_char do |char|
|
|
30
|
+
raise_error "Invalid option: \"#{char}\"" unless SHORT_OPTION_CHAR_PATTERN.match?(char)
|
|
25
31
|
raise_error "Option \"#{last_option}\" requires a argument not provided" if
|
|
26
32
|
last_option.present?
|
|
27
33
|
|
|
@@ -30,12 +36,15 @@ module EacCli
|
|
|
30
36
|
end
|
|
31
37
|
end
|
|
32
38
|
|
|
33
|
-
# @
|
|
39
|
+
# @param char [String]
|
|
40
|
+
# @return [EacCli::Definition::Option] The option collected.
|
|
34
41
|
def short_option_collect_char(char)
|
|
35
42
|
option = find_short_option(char)
|
|
36
43
|
option ? option_collect_option(option) : any_option_collect_option
|
|
37
44
|
end
|
|
38
45
|
|
|
46
|
+
# @param short [String]
|
|
47
|
+
# @return [String]
|
|
39
48
|
def short_without_prefix(short)
|
|
40
49
|
short.to_s.gsub(/\A#{::Regexp.quote(SHORT_OPTION_PREFIX)}/, '')
|
|
41
50
|
end
|
|
@@ -10,30 +10,40 @@ module EacCli
|
|
|
10
10
|
require_sub __FILE__, include_modules: true
|
|
11
11
|
enable_listable
|
|
12
12
|
lists.add_symbol :phase, :any, :option_argument, :positional
|
|
13
|
+
|
|
14
|
+
# @return [EacCli::Parser::Error, nil]
|
|
13
15
|
attr_reader :error
|
|
14
16
|
|
|
17
|
+
# @!method initialize(alternative, argv)
|
|
18
|
+
# @param alternative [EacCli::Definition::Alternative]
|
|
19
|
+
# @param argv [Array<String>]
|
|
15
20
|
common_constructor :alternative, :argv do
|
|
16
21
|
alternative.assert_argument(::EacCli::Definition::Alternative, :alternative)
|
|
17
22
|
self.phase = PHASE_ANY
|
|
18
23
|
collect
|
|
19
24
|
end
|
|
20
25
|
|
|
26
|
+
# @return [Boolean]
|
|
21
27
|
def error?
|
|
22
28
|
error.present?
|
|
23
29
|
end
|
|
24
30
|
|
|
31
|
+
# @return [Boolean]
|
|
25
32
|
def success?
|
|
26
33
|
!error?
|
|
27
34
|
end
|
|
28
35
|
|
|
36
|
+
# @return [EacRubyUtils::Struct]
|
|
29
37
|
def parsed
|
|
30
38
|
@parsed ||= collector.to_data.freeze
|
|
31
39
|
end
|
|
32
40
|
|
|
33
41
|
private
|
|
34
42
|
|
|
43
|
+
# @return [Symbol]
|
|
35
44
|
attr_accessor :phase
|
|
36
45
|
|
|
46
|
+
# @return [void]
|
|
37
47
|
def any_collect_argv_value
|
|
38
48
|
%w[double_dash long_option short_option].each do |arg_type|
|
|
39
49
|
return send("#{arg_type}_collect_argv_value") if send("argv_current_#{arg_type}?")
|
|
@@ -42,10 +52,12 @@ module EacCli
|
|
|
42
52
|
positional_collect_argv_value
|
|
43
53
|
end
|
|
44
54
|
|
|
55
|
+
# @return [EacCli::Parser::Collector]
|
|
45
56
|
def collector
|
|
46
57
|
@collector ||= ::EacCli::Parser::Collector.new(alternative)
|
|
47
58
|
end
|
|
48
59
|
|
|
60
|
+
# @return [void]
|
|
49
61
|
def collect
|
|
50
62
|
loop do
|
|
51
63
|
break unless argv_pending?
|
|
@@ -57,21 +69,29 @@ module EacCli
|
|
|
57
69
|
@error = e
|
|
58
70
|
end
|
|
59
71
|
|
|
72
|
+
# @return [void]
|
|
60
73
|
def collect_argv_value
|
|
61
74
|
send("#{phase}_collect_argv_value")
|
|
62
75
|
argv_enum.next
|
|
63
76
|
end
|
|
64
77
|
|
|
78
|
+
# @param message [String]
|
|
79
|
+
# @raise [EacCli::Parser::Error] Always.
|
|
65
80
|
def raise_error(message)
|
|
66
81
|
raise ::EacCli::Parser::Error.new(alternative, argv, message)
|
|
67
82
|
end
|
|
68
83
|
|
|
84
|
+
# @return [void]
|
|
85
|
+
# @raise [EacCli::Parser::Error] If options where not properly supplied.
|
|
69
86
|
def validate
|
|
70
87
|
(alternative.options + alternative.positional).each do |option|
|
|
71
88
|
validate_option(option)
|
|
72
89
|
end
|
|
73
90
|
end
|
|
74
91
|
|
|
92
|
+
# @param option [EacCli::Definition::Option, EacCli::Definition::Positional]
|
|
93
|
+
# @return [void]
|
|
94
|
+
# @raise [EacCli::Parser::Error] If option was not properly supplied.
|
|
75
95
|
def validate_option(option)
|
|
76
96
|
return unless option.required?
|
|
77
97
|
return if collector.supplied?(option)
|
|
@@ -14,29 +14,38 @@ module EacCli
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
# @!method initialize(definition)
|
|
18
|
+
# @param definition [EacCli::Definition]
|
|
17
19
|
common_constructor :definition do
|
|
18
20
|
default_values
|
|
19
21
|
end
|
|
20
22
|
|
|
21
|
-
# @return [
|
|
23
|
+
# @return [EacRubyUtils::Struct]
|
|
22
24
|
def to_data
|
|
23
25
|
::EacRubyUtils::Struct.new(data.transform_keys(&:identifier))
|
|
24
26
|
end
|
|
25
27
|
|
|
28
|
+
# @param option [EacCli::Definition::Option]
|
|
29
|
+
# @param value [String]
|
|
30
|
+
# @return [void]
|
|
26
31
|
def collect(option, value)
|
|
27
32
|
data[option] = option.build_value(value, data[option])
|
|
28
33
|
end
|
|
29
34
|
|
|
35
|
+
# @param option [EacCli::Definition::Option]
|
|
36
|
+
# @return [Boolean]
|
|
30
37
|
def supplied?(option)
|
|
31
38
|
data[option].present?
|
|
32
39
|
end
|
|
33
40
|
|
|
34
41
|
private
|
|
35
42
|
|
|
43
|
+
# @return [Hash]
|
|
36
44
|
def data
|
|
37
45
|
@data ||= {}
|
|
38
46
|
end
|
|
39
47
|
|
|
48
|
+
# @return [void]
|
|
40
49
|
def default_values
|
|
41
50
|
definition.options.each { |option| data[option] = option.default_value }
|
|
42
51
|
definition.positional.each { |positional| data[positional] = positional.default_value }
|
|
@@ -29,7 +29,7 @@ module EacCli
|
|
|
29
29
|
|
|
30
30
|
def run_parser_error(runner_instance, error)
|
|
31
31
|
$stderr.write("#{runner_instance.program_name}: #{error}\n")
|
|
32
|
-
::Kernel.exit(PARSER_ERROR_EXIT_CODE)
|
|
32
|
+
::Kernel.exit(PARSER_ERROR_EXIT_CODE)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_cli/definition/alternative'
|
|
4
|
+
require 'eac_cli/parser/alternative'
|
|
5
|
+
|
|
6
|
+
RSpec.describe EacCli::Parser::Alternative, '#subcommands' do
|
|
7
|
+
let(:instance) { described_class.new(alternative, argv) }
|
|
8
|
+
let(:actual_parsed) { instance.parsed.to_h.symbolize_keys }
|
|
9
|
+
let(:alternative) do
|
|
10
|
+
r = EacCli::Definition::Alternative.new
|
|
11
|
+
r.bool_opt '-b', '--opt1', 'A boolean option'
|
|
12
|
+
r.arg_opt '-a', '--opt2', 'A argument option'
|
|
13
|
+
r.subcommands
|
|
14
|
+
r
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context 'with all values' do
|
|
18
|
+
let(:argv) { %w[--opt1 --opt2 OPT2 CMD CMD_ARG_1 --CMD_ARG_2] }
|
|
19
|
+
let(:parsed_expected) do
|
|
20
|
+
{
|
|
21
|
+
opt1: true, opt2: 'OPT2',
|
|
22
|
+
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => 'CMD',
|
|
23
|
+
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => %w[CMD_ARG_1 --CMD_ARG_2]
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it { expect(instance.error).to be_blank }
|
|
28
|
+
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'with only required values' do
|
|
32
|
+
let(:argv) { %w[CMD] }
|
|
33
|
+
let(:parsed_expected) do
|
|
34
|
+
{
|
|
35
|
+
opt1: false, opt2: nil,
|
|
36
|
+
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => 'CMD',
|
|
37
|
+
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => []
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it { expect(instance.error).to be_blank }
|
|
42
|
+
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'without required values' do
|
|
46
|
+
let(:argv) { %w[--opt1] }
|
|
47
|
+
let(:parsed_expected) do
|
|
48
|
+
{
|
|
49
|
+
opt1: true, opt2: nil,
|
|
50
|
+
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => nil,
|
|
51
|
+
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => []
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it { expect(instance.error).to be_present }
|
|
56
|
+
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'eac_cli/definition/alternative'
|
|
3
4
|
require 'eac_cli/parser/alternative'
|
|
4
5
|
|
|
5
6
|
RSpec.describe EacCli::Parser::Alternative do
|
|
@@ -85,56 +86,4 @@ RSpec.describe EacCli::Parser::Alternative do
|
|
|
85
86
|
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
86
87
|
end
|
|
87
88
|
end
|
|
88
|
-
|
|
89
|
-
context 'with subcommands' do
|
|
90
|
-
let(:alternative) do
|
|
91
|
-
r = EacCli::Definition::Alternative.new
|
|
92
|
-
r.bool_opt '-b', '--opt1', 'A boolean option'
|
|
93
|
-
r.arg_opt '-a', '--opt2', 'A argument option'
|
|
94
|
-
r.subcommands
|
|
95
|
-
r
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
context 'with all values' do
|
|
99
|
-
let(:argv) { %w[--opt1 --opt2 OPT2 CMD CMD_ARG_1 --CMD_ARG_2] }
|
|
100
|
-
let(:parsed_expected) do
|
|
101
|
-
{
|
|
102
|
-
opt1: true, opt2: 'OPT2',
|
|
103
|
-
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => 'CMD',
|
|
104
|
-
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => %w[CMD_ARG_1 --CMD_ARG_2]
|
|
105
|
-
}
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it { expect(instance.error).to be_blank }
|
|
109
|
-
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
context 'with only required values' do
|
|
113
|
-
let(:argv) { %w[CMD] }
|
|
114
|
-
let(:parsed_expected) do
|
|
115
|
-
{
|
|
116
|
-
opt1: false, opt2: nil,
|
|
117
|
-
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => 'CMD',
|
|
118
|
-
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => []
|
|
119
|
-
}
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it { expect(instance.error).to be_blank }
|
|
123
|
-
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
context 'without required values' do
|
|
127
|
-
let(:argv) { %w[--opt1] }
|
|
128
|
-
let(:parsed_expected) do
|
|
129
|
-
{
|
|
130
|
-
opt1: true, opt2: nil,
|
|
131
|
-
EacCli::Definition::Alternative::SUBCOMMAND_NAME_ARG => nil,
|
|
132
|
-
EacCli::Definition::Alternative::SUBCOMMAND_ARGS_ARG => []
|
|
133
|
-
}
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it { expect(instance.error).to be_present }
|
|
137
|
-
it { expect(actual_parsed).to eq(parsed_expected) }
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
89
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'eac_cli/runner'
|
|
4
4
|
|
|
5
|
-
RSpec.describe EacCli::Runner, '#for_context' do
|
|
5
|
+
RSpec.describe EacCli::Runner, '#for_context' do
|
|
6
6
|
let(:parent_runner_class) do
|
|
7
7
|
example = self
|
|
8
8
|
Class.new do
|
|
@@ -61,7 +61,7 @@ RSpec.describe EacCli::Runner, '#for_context' do # rubocop:disable RSpec/Multipl
|
|
|
61
61
|
it { expect(parent_runner.for_context?(:method_for_context)).to be(true) }
|
|
62
62
|
it { expect(parent_runner.for_context?(:method_not_for_context)).to be(false) }
|
|
63
63
|
|
|
64
|
-
context 'when method is for context' do
|
|
64
|
+
context 'when method is for context' do
|
|
65
65
|
let(:child_runner_class) { child_runner_class1 }
|
|
66
66
|
|
|
67
67
|
it do
|
|
@@ -69,7 +69,7 @@ RSpec.describe EacCli::Runner, '#for_context' do # rubocop:disable RSpec/Multipl
|
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
context 'when method is not for context' do
|
|
72
|
+
context 'when method is not for context' do
|
|
73
73
|
let(:child_runner_class) { child_runner_class2 }
|
|
74
74
|
|
|
75
75
|
it do
|
|
@@ -56,7 +56,7 @@ RSpec.describe EacCli::RunnerWith::Output do
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
context 'without --output option as to default file' do
|
|
59
|
+
context 'without --output option as to default file' do
|
|
60
60
|
let(:output_file) { temp_dir.join('default_file') }
|
|
61
61
|
let(:runner_argv) do
|
|
62
62
|
['--output', EacCli::RunnerWith::Output::DEFAULT_FILE_OPTION,
|
|
@@ -69,7 +69,7 @@ RSpec.describe EacCli::RunnerWith::Output do
|
|
|
69
69
|
it { expect(output_file.read).to eq(stub_text) }
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
context 'with --output option' do
|
|
72
|
+
context 'with --output option' do
|
|
73
73
|
let(:output_file) { temp_dir.join('a output file') }
|
|
74
74
|
let(:runner_argv) { ['--output', output_file.to_path, stub_text] }
|
|
75
75
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eac_tools
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.82.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Put here the authors
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-11-
|
|
11
|
+
date: 2023-11-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: avm
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.
|
|
19
|
+
version: '0.83'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.
|
|
26
|
+
version: '0.83'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: avm-eac_asciidoctor_base0
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -282,14 +282,14 @@ dependencies:
|
|
|
282
282
|
requirements:
|
|
283
283
|
- - "~>"
|
|
284
284
|
- !ruby/object:Gem::Version
|
|
285
|
-
version: '0.
|
|
285
|
+
version: '0.159'
|
|
286
286
|
type: :runtime
|
|
287
287
|
prerelease: false
|
|
288
288
|
version_requirements: !ruby/object:Gem::Requirement
|
|
289
289
|
requirements:
|
|
290
290
|
- - "~>"
|
|
291
291
|
- !ruby/object:Gem::Version
|
|
292
|
-
version: '0.
|
|
292
|
+
version: '0.159'
|
|
293
293
|
- !ruby/object:Gem::Dependency
|
|
294
294
|
name: eac_ruby_utils
|
|
295
295
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1094,6 +1094,8 @@ files:
|
|
|
1094
1094
|
- sub/avm-tools/lib/avm/tools/runner/source/issue.rb
|
|
1095
1095
|
- sub/avm-tools/lib/avm/tools/runner/source/issue/complete.rb
|
|
1096
1096
|
- sub/avm-tools/lib/avm/tools/runner/source/issue/deliver.rb
|
|
1097
|
+
- sub/avm-tools/lib/avm/tools/runner/source/sub.rb
|
|
1098
|
+
- sub/avm-tools/lib/avm/tools/runner/source/sub/remove.rb
|
|
1097
1099
|
- sub/avm-tools/lib/avm/tools/runner/source/subs.rb
|
|
1098
1100
|
- sub/avm-tools/lib/avm/tools/runner/source/test.rb
|
|
1099
1101
|
- sub/avm-tools/lib/avm/tools/runner/source/update.rb
|
|
@@ -1318,6 +1320,8 @@ files:
|
|
|
1318
1320
|
- sub/avm/lib/avm/sources/base/organizational.rb
|
|
1319
1321
|
- sub/avm/lib/avm/sources/base/parent.rb
|
|
1320
1322
|
- sub/avm/lib/avm/sources/base/stereotype.rb
|
|
1323
|
+
- sub/avm/lib/avm/sources/base/sub.rb
|
|
1324
|
+
- sub/avm/lib/avm/sources/base/sub/remove.rb
|
|
1321
1325
|
- sub/avm/lib/avm/sources/base/subs.rb
|
|
1322
1326
|
- sub/avm/lib/avm/sources/base/subs_paths.rb
|
|
1323
1327
|
- sub/avm/lib/avm/sources/base/testing.rb
|
|
@@ -1339,6 +1343,8 @@ files:
|
|
|
1339
1343
|
- sub/avm/lib/avm/version_number.rb
|
|
1340
1344
|
- sub/avm/lib/avm/with/application_stereotype.rb
|
|
1341
1345
|
- sub/avm/lib/avm/with/extra_subcommands.rb
|
|
1346
|
+
- sub/avm/locale/en.yml
|
|
1347
|
+
- sub/avm/locale/pt-BR.yml
|
|
1342
1348
|
- sub/avm/spec/lib/avm/applications/base/entries_spec.rb
|
|
1343
1349
|
- sub/avm/spec/lib/avm/applications/base/entries_spec_files/config.yml
|
|
1344
1350
|
- sub/avm/spec/lib/avm/applications/base_spec.rb
|
|
@@ -1373,12 +1379,12 @@ files:
|
|
|
1373
1379
|
- sub/eac_cli/lib/eac_cli/definition.rb
|
|
1374
1380
|
- sub/eac_cli/lib/eac_cli/definition/alternative.rb
|
|
1375
1381
|
- sub/eac_cli/lib/eac_cli/definition/argument_option.rb
|
|
1376
|
-
- sub/eac_cli/lib/eac_cli/definition/base_option.rb
|
|
1377
|
-
- sub/eac_cli/lib/eac_cli/definition/base_option/initialize_args_parser.rb
|
|
1378
1382
|
- sub/eac_cli/lib/eac_cli/definition/boolean_option.rb
|
|
1379
|
-
- sub/eac_cli/lib/eac_cli/definition/default_value.rb
|
|
1380
1383
|
- sub/eac_cli/lib/eac_cli/definition/error.rb
|
|
1381
|
-
- sub/eac_cli/lib/eac_cli/definition/
|
|
1384
|
+
- sub/eac_cli/lib/eac_cli/definition/option.rb
|
|
1385
|
+
- sub/eac_cli/lib/eac_cli/definition/option/initialize_args_parser.rb
|
|
1386
|
+
- sub/eac_cli/lib/eac_cli/definition/option_or_positional.rb
|
|
1387
|
+
- sub/eac_cli/lib/eac_cli/definition/positional.rb
|
|
1382
1388
|
- sub/eac_cli/lib/eac_cli/enum.rb
|
|
1383
1389
|
- sub/eac_cli/lib/eac_cli/old_configs.rb
|
|
1384
1390
|
- sub/eac_cli/lib/eac_cli/old_configs/entry_reader.rb
|
|
@@ -1443,6 +1449,7 @@ files:
|
|
|
1443
1449
|
- sub/eac_cli/lib/eac_cli/version.rb
|
|
1444
1450
|
- sub/eac_cli/spec/lib/eac_cli/definition/alternative_spec.rb
|
|
1445
1451
|
- sub/eac_cli/spec/lib/eac_cli/old_configs_spec.rb
|
|
1452
|
+
- sub/eac_cli/spec/lib/eac_cli/parser/alternative/subcommands_spec.rb
|
|
1446
1453
|
- sub/eac_cli/spec/lib/eac_cli/parser/alternative_spec.rb
|
|
1447
1454
|
- sub/eac_cli/spec/lib/eac_cli/runner/for_context_spec.rb
|
|
1448
1455
|
- sub/eac_cli/spec/lib/eac_cli/runner_spec.rb
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'eac_cli/definition/default_value'
|
|
4
|
-
require 'eac_ruby_utils/core_ext'
|
|
5
|
-
|
|
6
|
-
module EacCli
|
|
7
|
-
class Definition
|
|
8
|
-
class BaseOption
|
|
9
|
-
require_sub __FILE__
|
|
10
|
-
include ::EacCli::Definition::DefaultValue
|
|
11
|
-
|
|
12
|
-
class << self
|
|
13
|
-
def from_args(args)
|
|
14
|
-
p = ::EacCli::Definition::BaseOption::InitializeArgsParser.new(args)
|
|
15
|
-
new(p.short, p.long, p.description, p.options)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
DEFAULT_REQUIRED = false
|
|
20
|
-
|
|
21
|
-
enable_listable
|
|
22
|
-
enable_abstract_methods :build_value
|
|
23
|
-
lists.add_symbol :option, :default, :optional, :usage, :repeat, :required
|
|
24
|
-
common_constructor :short, :long, :description, :options, default: [{}] do
|
|
25
|
-
raise 'Nor short neither long selector was set' if short.blank? && long.blank?
|
|
26
|
-
|
|
27
|
-
self.options = ::EacCli::Definition::BaseOption.lists.option.hash_keys_validate!(
|
|
28
|
-
options.symbolize_keys
|
|
29
|
-
)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def default_value
|
|
33
|
-
default_value? ? options[OPTION_DEFAULT] : default_default_value
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def default_value?
|
|
37
|
-
options.key?(OPTION_DEFAULT)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def identifier
|
|
41
|
-
[long, short].each do |v|
|
|
42
|
-
v.to_s.if_present { |vv| return vv.variableize.to_sym }
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
raise(::EacCli::Definition::Error, 'No short or long option to build identifier')
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def repeat?
|
|
49
|
-
options[OPTION_REPEAT]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def required?
|
|
53
|
-
return true if options.key?(:required) && options.fetch(:required)
|
|
54
|
-
return false if options.key?(:optional) && options.fetch(:optional)
|
|
55
|
-
|
|
56
|
-
DEFAULT_REQUIRED
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def to_s
|
|
60
|
-
"#{self.class.name.demodulize}[#{identifier}]"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def show_on_usage?
|
|
64
|
-
options[:usage]
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
|
4
|
-
|
|
5
|
-
module EacCli
|
|
6
|
-
class Definition
|
|
7
|
-
module DefaultValue
|
|
8
|
-
def default_value
|
|
9
|
-
default_value? ? options[OPTION_DEFAULT] : default_default_value
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def default_value?
|
|
13
|
-
options.key?(OPTION_DEFAULT)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|