eac_cli 0.17.0 → 0.20.2
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/lib/eac_cli/config.rb +19 -0
- data/lib/eac_cli/config/entry.rb +48 -0
- data/lib/eac_cli/config/entry/options.rb +57 -0
- data/lib/eac_cli/config/entry/undefined.rb +26 -0
- data/lib/eac_cli/definition/positional_argument.rb +6 -1
- data/lib/eac_cli/docopt/doc_builder/alternative.rb +3 -1
- data/lib/eac_cli/docopt_runner.rb +4 -8
- data/lib/eac_cli/docopt_runner/{_class_methods.rb → class_methods.rb} +5 -3
- data/lib/eac_cli/docopt_runner/context.rb +18 -0
- data/lib/eac_cli/old_configs.rb +0 -1
- data/lib/eac_cli/old_configs/entry_reader.rb +2 -2
- data/lib/eac_cli/old_configs_bridge.rb +37 -0
- data/lib/eac_cli/runner/after_class_methods.rb +20 -3
- data/lib/eac_cli/runner_with/help.rb +6 -2
- data/lib/eac_cli/runner_with/subcommands.rb +5 -1
- data/lib/eac_cli/speaker.rb +15 -19
- data/lib/eac_cli/speaker/_constants.rb +1 -1
- data/lib/eac_cli/speaker/list.rb +1 -1
- data/lib/eac_cli/speaker/options.rb +38 -0
- data/lib/eac_cli/version.rb +1 -1
- metadata +12 -9
- data/lib/eac_cli/patches/module.rb +0 -4
- data/lib/eac_cli/patches/module/speaker.rb +0 -10
- data/lib/eac_cli/speaker/_class_methods.rb +0 -37
- data/lib/eac_cli/speaker/node.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed5f842e4e428ffc7004dbd3d1e1b6c6a18d868ac51a8c61c82578708260cee6
|
4
|
+
data.tar.gz: 9b5bef7e60e9199c2fdc7555453ea34bc289830aee7fff44629143686e9abe69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ad50457b9d19af0bf7fbb6987d8b413c0aa8b47e14bca04b4bf6bddd4b0298137d84bb4e2f1aa12480e47f58192f67f33ff169310b52445388e29bff15d9fd0
|
7
|
+
data.tar.gz: e7e437ef6d395d38a965d2cf45e470ca421025ac1829dfe16c5e1f2d015ffb1163971adbcb58dca88972f5018dae648e7c7c189c810af9028c99cee005db22a1
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_config/envvars_node'
|
4
|
+
require 'eac_config/yaml_file_node'
|
5
|
+
|
6
|
+
module EacCli
|
7
|
+
class Config
|
8
|
+
require_sub __FILE__
|
9
|
+
attr_reader :sub
|
10
|
+
|
11
|
+
def initialize(sub_node)
|
12
|
+
@sub = sub_node
|
13
|
+
end
|
14
|
+
|
15
|
+
def entry(path, options = {})
|
16
|
+
::EacCli::Config::Entry.new(self, path, options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/speaker'
|
4
|
+
require 'eac_config/entry_path'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module EacCli
|
8
|
+
class Config
|
9
|
+
class Entry
|
10
|
+
require_sub __FILE__, include_modules: true
|
11
|
+
enable_listable
|
12
|
+
enable_simple_cache
|
13
|
+
enable_speaker
|
14
|
+
|
15
|
+
common_constructor :config, :path, :options do
|
16
|
+
self.path = ::EacConfig::EntryPath.assert(path)
|
17
|
+
self.options = ::EacCli::Config::Entry::Options.new(options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def value
|
21
|
+
return sub_value_to_return if sub_entry.found?
|
22
|
+
return nil unless options.required?
|
23
|
+
|
24
|
+
puts "|#{sub_entry.path}|"
|
25
|
+
|
26
|
+
input_value
|
27
|
+
end
|
28
|
+
|
29
|
+
delegate :value=, to: :sub_entry
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def sub_value_to_return
|
34
|
+
sub_entry.value.presence || ::EacRubyUtils::BlankNotBlank.instance
|
35
|
+
end
|
36
|
+
|
37
|
+
def sub_entry_uncached
|
38
|
+
config.sub.entry(path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def input_value_uncached
|
42
|
+
r = send("#{options.type}_value")
|
43
|
+
sub_entry.value = r if options.store?
|
44
|
+
r
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacCli
|
6
|
+
class Config
|
7
|
+
class Entry
|
8
|
+
class Options
|
9
|
+
enable_simple_cache
|
10
|
+
enable_listable
|
11
|
+
|
12
|
+
lists.add_symbol :type, :undefined
|
13
|
+
|
14
|
+
DEFAULT_VALUES = {
|
15
|
+
before_input: nil, bool: false, list: false, noecho: false, noenv: false, noinput: false,
|
16
|
+
required: true, store: true, type: TYPE_UNDEFINED, validator: nil
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
lists.add_symbol :option, *DEFAULT_VALUES.keys
|
20
|
+
|
21
|
+
common_constructor :options do
|
22
|
+
self.options = self.class.lists.option.hash_keys_validate!(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
delegate :to_h, to: :options
|
26
|
+
|
27
|
+
def [](key)
|
28
|
+
values.fetch(key.to_sym)
|
29
|
+
end
|
30
|
+
|
31
|
+
def request_input_options
|
32
|
+
values.slice(:bool, :list, :noecho)
|
33
|
+
end
|
34
|
+
|
35
|
+
DEFAULT_VALUES.each do |attr, default_value|
|
36
|
+
define_method(attr.to_s + ([true, false].include?(default_value) ? '?' : '')) do
|
37
|
+
self[attr]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def values_uncached
|
44
|
+
consumer = options.to_options_consumer
|
45
|
+
r = {}
|
46
|
+
DEFAULT_VALUES.each do |key, default_value|
|
47
|
+
value = consumer.consume(key)
|
48
|
+
value = default_value if value.nil?
|
49
|
+
r[key] = value
|
50
|
+
end
|
51
|
+
consumer.validate
|
52
|
+
r
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacCli
|
6
|
+
class Config
|
7
|
+
class Entry
|
8
|
+
module Undefined
|
9
|
+
private
|
10
|
+
|
11
|
+
def undefined_value
|
12
|
+
loop do
|
13
|
+
entry_value = undefined_value_no_loop
|
14
|
+
next unless options[:validator].if_present(true) { |v| v.call(entry_value) }
|
15
|
+
|
16
|
+
return entry_value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def undefined_value_no_loop
|
21
|
+
input("Value for entry \"#{path}\"", options.request_input_options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -6,9 +6,10 @@ module EacCli
|
|
6
6
|
class Definition
|
7
7
|
class PositionalArgument
|
8
8
|
DEFAULT_REQUIRED = true
|
9
|
+
DEFAULT_VISIBLE = true
|
9
10
|
|
10
11
|
enable_listable
|
11
|
-
lists.add_symbol :option, :optional, :repeat, :required, :subcommand
|
12
|
+
lists.add_symbol :option, :optional, :repeat, :required, :subcommand, :visible
|
12
13
|
common_constructor :name, :options, default: [{}] do
|
13
14
|
options.assert_valid_keys(self.class.lists.option.values)
|
14
15
|
end
|
@@ -51,6 +52,10 @@ module EacCli
|
|
51
52
|
def to_s
|
52
53
|
"#{self.class.name.demodulize}[#{identifier}]"
|
53
54
|
end
|
55
|
+
|
56
|
+
def visible?
|
57
|
+
options.key?(OPTION_VISIBLE) ? options.fetch(OPTION_VISIBLE) : DEFAULT_VISIBLE
|
58
|
+
end
|
54
59
|
end
|
55
60
|
end
|
56
61
|
end
|
@@ -31,10 +31,12 @@ module EacCli
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def positionals
|
34
|
-
alternative.positional.map { |p| positional(p) }
|
34
|
+
alternative.positional.map { |p| positional(p) }.reject(&:blank?)
|
35
35
|
end
|
36
36
|
|
37
37
|
def positional(positional)
|
38
|
+
return unless positional.visible?
|
39
|
+
|
38
40
|
if positional.subcommand?
|
39
41
|
::EacCli::DocoptRunner::SUBCOMMANDS_MACRO
|
40
42
|
else
|
@@ -1,17 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'active_support/core_ext/hash/slice'
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
5
4
|
require 'docopt'
|
6
|
-
require 'eac_ruby_utils/contextualizable'
|
7
|
-
require 'eac_ruby_utils/patches/hash/sym_keys_hash'
|
8
|
-
Dir["#{__dir__}/#{::File.basename(__FILE__, '.*')}/_*.rb"].sort.each do |partial|
|
9
|
-
require partial
|
10
|
-
end
|
11
5
|
|
12
6
|
module EacCli
|
13
7
|
class DocoptRunner
|
14
|
-
|
8
|
+
require_sub __FILE__
|
9
|
+
extend ::EacCli::DocoptRunner::ClassMethods
|
10
|
+
include ::EacCli::DocoptRunner::Context
|
15
11
|
|
16
12
|
class << self
|
17
13
|
def create(settings = {})
|
@@ -1,13 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'docopt'
|
4
|
+
|
3
5
|
module EacCli
|
4
6
|
class DocoptRunner
|
5
|
-
|
7
|
+
module ClassMethods
|
8
|
+
DOCOPT_ERROR_EXIT_CODE = 0xC0
|
6
9
|
|
7
|
-
class << self
|
8
10
|
def run(options = {})
|
9
11
|
create(options).send(:run)
|
10
|
-
rescue Docopt::Exit => e
|
12
|
+
rescue ::Docopt::Exit => e
|
11
13
|
STDERR.write(e.message + "\n")
|
12
14
|
::Kernel.exit(DOCOPT_ERROR_EXIT_CODE)
|
13
15
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EacCli
|
4
|
+
class DocoptRunner
|
5
|
+
# Provides the method context which search and call a method in self and ancestor objects.
|
6
|
+
module Context
|
7
|
+
def context(method)
|
8
|
+
current = self
|
9
|
+
while current
|
10
|
+
return current.send(method) if current.respond_to?(method)
|
11
|
+
|
12
|
+
current = current.respond_to?(:parent) ? current.parent : nil
|
13
|
+
end
|
14
|
+
raise "Context method \"#{method}\" not found for #{self.class}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/eac_cli/old_configs.rb
CHANGED
@@ -70,8 +70,8 @@ module EacCli
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def entry_value_from_input(entry_key, options)
|
73
|
-
entry_value =
|
74
|
-
|
73
|
+
entry_value = input("Value for entry \"#{entry_key}\"",
|
74
|
+
options.request_input_options)
|
75
75
|
warn('Entered value is blank') if entry_value.blank?
|
76
76
|
entry_value
|
77
77
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/config'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module EacCli
|
7
|
+
class OldConfigsBridge < ::EacCli::Config
|
8
|
+
ENTRY_KEY = 'core.store_passwords'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def new_configs_path(configs_key, options)
|
12
|
+
options[:storage_path] || ::File.join(ENV['HOME'], '.config', configs_key, 'settings.yml')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(configs_key, options = {})
|
17
|
+
options.assert_argument(::Hash, 'options')
|
18
|
+
envvar_node = ::EacConfig::EnvvarsNode.new
|
19
|
+
file_node = ::EacConfig::YamlFileNode.new(self.class.new_configs_path(configs_key, options))
|
20
|
+
envvar_node.load_path.push(file_node.url)
|
21
|
+
envvar_node.write_node = file_node
|
22
|
+
super(envvar_node)
|
23
|
+
end
|
24
|
+
|
25
|
+
def read_entry(entry_key, options = {})
|
26
|
+
entry(entry_key, options).value
|
27
|
+
end
|
28
|
+
|
29
|
+
def read_password(entry_key, options = {})
|
30
|
+
entry(entry_key, options.merge(noecho: true, store: store_passwords?)).value
|
31
|
+
end
|
32
|
+
|
33
|
+
def store_passwords?
|
34
|
+
read_entry(ENTRY_KEY, bool: true)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'eac_cli/speaker'
|
4
|
+
require 'eac_ruby_utils/speaker'
|
5
|
+
|
3
6
|
module EacCli
|
4
7
|
module Runner
|
5
8
|
module AfterClassMethods
|
@@ -10,9 +13,11 @@ module EacCli
|
|
10
13
|
end
|
11
14
|
|
12
15
|
def run(*runner_context_args)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
on_asserted_speaker do
|
17
|
+
r = create(*runner_context_args)
|
18
|
+
r.run_run
|
19
|
+
r
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
def runner_definition(&block)
|
@@ -24,6 +29,18 @@ module EacCli
|
|
24
29
|
def super_runner_definition
|
25
30
|
superclass.try(:runner_definition).if_present(&:dup) || ::EacCli::Definition.new
|
26
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def on_asserted_speaker
|
36
|
+
if ::EacRubyUtils::Speaker.context.optional_current
|
37
|
+
yield
|
38
|
+
else
|
39
|
+
::EacRubyUtils::Speaker.context.on(::EacCli::Speaker.new) do
|
40
|
+
yield
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
27
44
|
end
|
28
45
|
end
|
29
46
|
end
|
@@ -10,8 +10,8 @@ module EacCli
|
|
10
10
|
include ::EacCli::Runner
|
11
11
|
|
12
12
|
runner_definition.alt do
|
13
|
-
options_argument false
|
14
13
|
bool_opt '-h', '--help', 'Show help.', usage: true
|
14
|
+
pos_arg :any_arg_with_help, repeat: true, optional: true, visible: false
|
15
15
|
end
|
16
16
|
|
17
17
|
set_callback :run, :before do
|
@@ -20,7 +20,7 @@ module EacCli
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def help_run
|
23
|
-
return unless
|
23
|
+
return unless show_help?
|
24
24
|
|
25
25
|
puts help_text
|
26
26
|
raise ::EacCli::Runner::Exit
|
@@ -31,6 +31,10 @@ module EacCli
|
|
31
31
|
r += help_extra_text if respond_to?(:help_extra_text)
|
32
32
|
r
|
33
33
|
end
|
34
|
+
|
35
|
+
def show_help?
|
36
|
+
parsed.help? && !if_respond(:run_subcommand?, false)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -60,7 +60,7 @@ module EacCli
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def run_with_subcommand
|
63
|
-
if
|
63
|
+
if run_subcommand?
|
64
64
|
if subcommand_runner.respond_to?(:run_run)
|
65
65
|
subcommand_runner.run_run
|
66
66
|
else
|
@@ -79,6 +79,10 @@ module EacCli
|
|
79
79
|
"Method #{__method__} should be overrided in #{self.class.name}"
|
80
80
|
end
|
81
81
|
|
82
|
+
def run_subcommand?
|
83
|
+
subcommand_name.present?
|
84
|
+
end
|
85
|
+
|
82
86
|
def subcommands?
|
83
87
|
self.class.runner_definition.subcommands?
|
84
88
|
end
|
data/lib/eac_cli/speaker.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'colorize'
|
4
|
-
require '
|
5
|
-
require 'eac_ruby_utils/
|
6
|
-
require 'eac_ruby_utils/require_sub'
|
7
|
-
::EacRubyUtils.require_sub __FILE__
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'eac_ruby_utils/speaker/receiver'
|
8
6
|
|
9
7
|
module EacCli
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
class Speaker
|
9
|
+
require_sub __FILE__, include_modules: true
|
10
|
+
include ::EacRubyUtils::Speaker::Receiver
|
11
|
+
|
12
|
+
common_constructor :options, default: [{}] do
|
13
|
+
self.options = self.class.lists.option.hash_keys_validate!(options)
|
14
14
|
end
|
15
15
|
|
16
16
|
def puts(string = '')
|
17
17
|
string.to_s.each_line do |line|
|
18
|
-
|
18
|
+
err_out.puts(err_line_prefix.to_s + line)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
def out(string = '')
|
23
|
-
|
23
|
+
out_out.write(string.to_s)
|
24
24
|
end
|
25
25
|
|
26
26
|
def fatal_error(string)
|
@@ -52,7 +52,7 @@ module EacCli
|
|
52
52
|
# +bool+ ([Boolean], default: +false+): requires a answer "yes" or "no".
|
53
53
|
# +list+ ([Hash] or [Array], default: +nil+): requires a answer from a list.
|
54
54
|
# +noecho+ ([Boolean], default: +false+): does not output answer.
|
55
|
-
def
|
55
|
+
def input(question, options = {})
|
56
56
|
bool, list, noecho = options.to_options_consumer.consume_all(:bool, :list, :noecho)
|
57
57
|
if list
|
58
58
|
request_from_list(question, list, noecho)
|
@@ -110,22 +110,18 @@ module EacCli
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def request_string(question, noecho)
|
113
|
-
|
113
|
+
err_out.write "#{question}: ".to_s.yellow
|
114
114
|
noecho ? request_string_noecho : request_string_echo
|
115
115
|
end
|
116
116
|
|
117
117
|
def request_string_noecho
|
118
|
-
r =
|
119
|
-
|
118
|
+
r = in_in.noecho(&:gets).chomp.strip
|
119
|
+
err_out.write("\n")
|
120
120
|
r
|
121
121
|
end
|
122
122
|
|
123
123
|
def request_string_echo
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
def current_node
|
128
|
-
::EacCli::Speaker.current_node
|
124
|
+
in_in.gets.chomp.strip
|
129
125
|
end
|
130
126
|
end
|
131
127
|
end
|
@@ -4,7 +4,7 @@ require 'eac_ruby_utils/by_reference'
|
|
4
4
|
|
5
5
|
module EacCli
|
6
6
|
# https://github.com/fazibear/colorize
|
7
|
-
|
7
|
+
class Speaker
|
8
8
|
STDERR = ::EacRubyUtils::ByReference.new { $stderr }
|
9
9
|
STDIN = ::EacRubyUtils::ByReference.new { $stdin }
|
10
10
|
STDOUT = ::EacRubyUtils::ByReference.new { $stdout }
|
data/lib/eac_cli/speaker/list.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacCli
|
6
|
+
class Speaker
|
7
|
+
module Options
|
8
|
+
common_concern do
|
9
|
+
enable_listable
|
10
|
+
lists.add_symbol :option, :out_out, :err_out, :in_in, :parent, :err_line_prefix
|
11
|
+
end
|
12
|
+
|
13
|
+
def err_out
|
14
|
+
option(OPTION_ERR_OUT, ::EacCli::Speaker::STDERR)
|
15
|
+
end
|
16
|
+
|
17
|
+
def out_out
|
18
|
+
option(OPTION_OUT_OUT, ::EacCli::Speaker::STDOUT)
|
19
|
+
end
|
20
|
+
|
21
|
+
def in_in
|
22
|
+
option(OPTION_IN_IN, ::EacCli::Speaker::STDIN)
|
23
|
+
end
|
24
|
+
|
25
|
+
def err_line_prefix
|
26
|
+
option(OPTION_ERR_LINE_PREFIX, '')
|
27
|
+
end
|
28
|
+
|
29
|
+
def parent
|
30
|
+
options[OPTION_PARENT]
|
31
|
+
end
|
32
|
+
|
33
|
+
def option(key, default)
|
34
|
+
options[key] || parent.if_present(default) { |v| v.send(__METHOD__) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/eac_cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.67'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0.
|
68
|
+
version: '0.67'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: eac_ruby_gem_support
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,6 +88,10 @@ extra_rdoc_files: []
|
|
88
88
|
files:
|
89
89
|
- Gemfile
|
90
90
|
- lib/eac_cli.rb
|
91
|
+
- lib/eac_cli/config.rb
|
92
|
+
- lib/eac_cli/config/entry.rb
|
93
|
+
- lib/eac_cli/config/entry/options.rb
|
94
|
+
- lib/eac_cli/config/entry/undefined.rb
|
91
95
|
- lib/eac_cli/core_ext.rb
|
92
96
|
- lib/eac_cli/default_runner.rb
|
93
97
|
- lib/eac_cli/definition.rb
|
@@ -103,15 +107,17 @@ files:
|
|
103
107
|
- lib/eac_cli/docopt/runner_context_replacement.rb
|
104
108
|
- lib/eac_cli/docopt/runner_extension.rb
|
105
109
|
- lib/eac_cli/docopt_runner.rb
|
106
|
-
- lib/eac_cli/docopt_runner/_class_methods.rb
|
107
110
|
- lib/eac_cli/docopt_runner/_doc.rb
|
108
111
|
- lib/eac_cli/docopt_runner/_settings.rb
|
109
112
|
- lib/eac_cli/docopt_runner/_subcommands.rb
|
113
|
+
- lib/eac_cli/docopt_runner/class_methods.rb
|
114
|
+
- lib/eac_cli/docopt_runner/context.rb
|
110
115
|
- lib/eac_cli/old_configs.rb
|
111
116
|
- lib/eac_cli/old_configs/entry_reader.rb
|
112
117
|
- lib/eac_cli/old_configs/password_entry_reader.rb
|
113
118
|
- lib/eac_cli/old_configs/read_entry_options.rb
|
114
119
|
- lib/eac_cli/old_configs/store_passwords_entry_reader.rb
|
120
|
+
- lib/eac_cli/old_configs_bridge.rb
|
115
121
|
- lib/eac_cli/parser.rb
|
116
122
|
- lib/eac_cli/parser/alternative.rb
|
117
123
|
- lib/eac_cli/parser/alternative/argv.rb
|
@@ -124,8 +130,6 @@ files:
|
|
124
130
|
- lib/eac_cli/parser/collector.rb
|
125
131
|
- lib/eac_cli/parser/error.rb
|
126
132
|
- lib/eac_cli/patches.rb
|
127
|
-
- lib/eac_cli/patches/module.rb
|
128
|
-
- lib/eac_cli/patches/module/speaker.rb
|
129
133
|
- lib/eac_cli/patches/object.rb
|
130
134
|
- lib/eac_cli/patches/object/runner_with.rb
|
131
135
|
- lib/eac_cli/runner.rb
|
@@ -139,10 +143,9 @@ files:
|
|
139
143
|
- lib/eac_cli/runner_with/subcommands/definition_concern.rb
|
140
144
|
- lib/eac_cli/runner_with_set.rb
|
141
145
|
- lib/eac_cli/speaker.rb
|
142
|
-
- lib/eac_cli/speaker/_class_methods.rb
|
143
146
|
- lib/eac_cli/speaker/_constants.rb
|
144
147
|
- lib/eac_cli/speaker/list.rb
|
145
|
-
- lib/eac_cli/speaker/
|
148
|
+
- lib/eac_cli/speaker/options.rb
|
146
149
|
- lib/eac_cli/version.rb
|
147
150
|
homepage:
|
148
151
|
licenses: []
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_cli/speaker/node'
|
4
|
-
|
5
|
-
module EacCli
|
6
|
-
module Speaker
|
7
|
-
class << self
|
8
|
-
def current_node
|
9
|
-
nodes_stack.last
|
10
|
-
end
|
11
|
-
|
12
|
-
def on_node(&block)
|
13
|
-
push
|
14
|
-
yield(*(block.arity.zero? ? [] : [current_node]))
|
15
|
-
ensure
|
16
|
-
pop
|
17
|
-
end
|
18
|
-
|
19
|
-
def push
|
20
|
-
nodes_stack << ::EacCli::Speaker::Node.new
|
21
|
-
current_node
|
22
|
-
end
|
23
|
-
|
24
|
-
def pop
|
25
|
-
return nodes_stack.pop if nodes_stack.count > 1
|
26
|
-
|
27
|
-
raise "Cannot remove first node (nodes_stack.count: #{nodes_stack.count})"
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def nodes_stack
|
33
|
-
@nodes_stack ||= [::EacCli::Speaker::Node.new]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
data/lib/eac_cli/speaker/node.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/patches/object/if_present'
|
4
|
-
require 'eac_cli/speaker/_constants'
|
5
|
-
|
6
|
-
module EacCli
|
7
|
-
module Speaker
|
8
|
-
class Node
|
9
|
-
attr_accessor :stdin, :stdout, :stderr, :stderr_line_prefix
|
10
|
-
|
11
|
-
def initialize(parent = nil)
|
12
|
-
self.stdin = parent.if_present(::EacCli::Speaker::STDIN, &:stdin)
|
13
|
-
self.stdout = parent.if_present(::EacCli::Speaker::STDOUT, &:stdout)
|
14
|
-
self.stderr = parent.if_present(::EacCli::Speaker::STDERR, &:stderr)
|
15
|
-
self.stderr_line_prefix = parent.if_present('', &:stderr_line_prefix)
|
16
|
-
end
|
17
|
-
|
18
|
-
def configure
|
19
|
-
yield(self)
|
20
|
-
self
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|