avm-tools 0.100.0 → 0.103.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/avm/app_src.rb +8 -7
- data/lib/avm/eac_redmine_base0/docker_image.rb +52 -0
- data/lib/avm/eac_redmine_base0/instance.rb +2 -2
- data/lib/avm/git/auto_commit/rules/manual.rb +1 -1
- data/lib/avm/git/issue/complete.rb +4 -8
- data/lib/avm/git/issue/complete/commits.rb +42 -0
- data/lib/avm/git/issue/complete/git_subrepos.rb +23 -0
- data/lib/avm/git/issue/complete/local_branch.rb +54 -0
- data/lib/avm/git/issue/complete/local_tag.rb +39 -0
- data/lib/avm/git/issue/complete/push.rb +54 -0
- data/lib/avm/git/issue/complete/remote.rb +33 -0
- data/lib/avm/git/issue/complete/test.rb +45 -0
- data/lib/avm/git/issue/complete/tracker.rb +28 -0
- data/lib/avm/git/issue/complete/validations.rb +53 -0
- data/lib/avm/git/issue/complete/working_tree.rb +19 -0
- data/lib/avm/git/revision_test.rb +9 -6
- data/lib/avm/instances/base/dockerizable.rb +1 -0
- data/lib/avm/instances/base/entry_keys.rb +6 -1
- data/lib/avm/instances/docker_image.rb +15 -0
- data/lib/avm/instances/entries.rb +0 -1
- data/lib/avm/instances/entry.rb +3 -2
- data/lib/avm/instances/entry_keys.rb +1 -0
- data/lib/avm/launcher/context.rb +1 -1
- data/lib/avm/launcher/git/publish_base.rb +3 -1
- data/lib/avm/launcher/git/warp_base.rb +11 -0
- data/lib/avm/launcher/instances/base.rb +2 -1
- data/lib/avm/launcher/instances/error.rb +1 -3
- data/lib/avm/launcher/ruby/gem/build.rb +1 -1
- data/lib/avm/projects/stereotype/job_comparator.rb +32 -0
- data/lib/avm/projects/stereotypes/git/update.rb +1 -2
- data/lib/avm/projects/stereotypes/ruby_gem/local_project_mixin.rb +2 -2
- data/lib/avm/projects/stereotypes/ruby_gem/publish.rb +1 -1
- data/lib/avm/projects/stereotypes/ruby_gem/update.rb +4 -0
- data/lib/avm/self.rb +9 -0
- data/lib/avm/self/instance.rb +4 -0
- data/lib/avm/tools/runner.rb +4 -0
- data/lib/avm/tools/runner/app_src/version_bump.rb +3 -3
- data/lib/avm/tools/runner/config/load_path.rb +4 -3
- data/lib/avm/tools/runner/eac_redmine_base0/dev_docker.rb +17 -0
- data/lib/avm/tools/runner/eac_redmine_base0/docker.rb +3 -0
- data/lib/avm/tools/runner/git/auto_commit.rb +1 -0
- data/lib/avm/tools/runner/git/deploy.rb +2 -1
- data/lib/avm/tools/runner/git/issue.rb +4 -75
- data/lib/avm/tools/runner/git/issue/complete.rb +79 -0
- data/lib/avm/tools/runner/git/issue/deliver.rb +35 -0
- data/lib/avm/tools/runner/git/organize.rb +1 -1
- data/lib/avm/tools/version.rb +1 -1
- data/template/avm/eac_redmine_base0/docker_image/Dockerfile.template +47 -0
- data/template/avm/eac_redmine_base0/docker_image/apache_http_virtualhost.conf.template +10 -0
- data/template/avm/eac_redmine_base0/docker_image/apache_https_virtualhost.conf.template +16 -0
- data/template/avm/eac_redmine_base0/docker_image/install_settings.sh.template +29 -0
- data/template/avm/eac_redmine_base0/docker_image/start.sh.template +25 -0
- data/template/avm/eac_ubuntu_base0/docker_image/Dockerfile +1 -1
- data/vendor/avm-apps/avm-apps.gemspec +1 -1
- data/vendor/avm-apps/lib/avm/apps/config.rb +19 -0
- data/vendor/avm-apps/lib/avm/apps/jobs/base.rb +1 -1
- data/vendor/avm-apps/lib/avm/apps/version.rb +1 -1
- data/vendor/avm-eac_rails_base1/Gemfile +5 -0
- data/vendor/avm-eac_rails_base1/avm-eac_rails_base1.gemspec +19 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/apache_host.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/instance.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner/bundle.rb +1 -2
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner/code_runner.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner/log.rb +0 -0
- data/vendor/avm-eac_rails_base1/lib/avm/eac_rails_base1/runner/logs.rb +18 -0
- data/vendor/avm-eac_rails_base1/lib/avm/eac_rails_base1/runner/logs/clear.rb +26 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner/rails_server.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner_with/bundle.rb +0 -0
- data/{lib → vendor/avm-eac_rails_base1/lib}/avm/eac_rails_base1/runner_with/rails_environment.rb +0 -0
- data/vendor/avm-eac_rails_base1/lib/avm/eac_rails_base1/version.rb +7 -0
- data/vendor/avm-eac_rails_base1/spec/rubocop_spec.rb +3 -0
- data/vendor/avm-eac_rails_base1/spec/spec_helper.rb +102 -0
- data/vendor/avm-eac_webapp_base0/Gemfile +5 -0
- data/vendor/avm-eac_webapp_base0/avm-eac_webapp_base0.gemspec +19 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0.rb +2 -2
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/apache_host.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/apache_path.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/appended_directories.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/build.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/file_unit.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/git_info.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/version.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/deploy/write_on_target.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/instance.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/instance/subcommand_parent.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/apache_host.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/apache_path.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/data.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/data/dump.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/data/load.rb +0 -0
- data/{lib → vendor/avm-eac_webapp_base0/lib}/avm/eac_webapp_base0/runner/deploy.rb +0 -0
- data/vendor/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/version.rb +7 -0
- data/vendor/avm-eac_webapp_base0/spec/rubocop_spec.rb +3 -0
- data/vendor/avm-eac_webapp_base0/spec/spec_helper.rb +102 -0
- data/vendor/avm/Gemfile +5 -0
- data/vendor/avm/avm.gemspec +19 -0
- data/vendor/avm/lib/avm.rb +7 -0
- data/vendor/avm/lib/avm/docker.rb +9 -0
- data/{lib → vendor/avm/lib}/avm/docker/container.rb +5 -5
- data/{lib → vendor/avm/lib}/avm/docker/image.rb +10 -27
- data/{lib → vendor/avm/lib}/avm/docker/runner.rb +34 -8
- data/vendor/avm/lib/avm/version.rb +5 -0
- data/{lib/avm/version.rb → vendor/avm/lib/avm/version_number.rb} +1 -1
- data/vendor/avm/spec/rubocop_spec.rb +3 -0
- data/vendor/avm/spec/spec_helper.rb +102 -0
- data/vendor/eac_cli/eac_cli.gemspec +1 -2
- data/vendor/eac_cli/lib/eac_cli/config.rb +1 -2
- data/vendor/eac_cli/lib/eac_cli/config/entry.rb +3 -1
- data/vendor/eac_cli/lib/eac_cli/config/entry/undefined.rb +1 -1
- data/vendor/eac_cli/lib/eac_cli/definition/help_formatter.rb +3 -2
- data/vendor/eac_cli/lib/eac_cli/definition/positional_argument.rb +6 -1
- data/vendor/eac_cli/lib/eac_cli/old_configs.rb +0 -1
- data/vendor/eac_cli/lib/eac_cli/old_configs/entry_reader.rb +2 -2
- data/vendor/eac_cli/lib/eac_cli/old_configs_bridge.rb +2 -0
- data/vendor/eac_cli/lib/eac_cli/runner.rb +0 -2
- data/vendor/eac_cli/lib/eac_cli/runner/after_class_methods.rb +20 -3
- data/vendor/eac_cli/lib/eac_cli/runner/instance_methods.rb +5 -1
- data/vendor/eac_cli/lib/eac_cli/runner_with/help.rb +9 -4
- data/vendor/eac_cli/lib/eac_cli/runner_with/help/builder.rb +73 -0
- data/vendor/eac_cli/lib/eac_cli/runner_with/help/builder/alternative.rb +56 -0
- data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands.rb +6 -4
- data/vendor/eac_cli/lib/eac_cli/speaker.rb +15 -19
- data/vendor/eac_cli/lib/eac_cli/speaker/_constants.rb +1 -1
- data/vendor/eac_cli/lib/eac_cli/speaker/list.rb +1 -1
- data/vendor/eac_cli/lib/eac_cli/speaker/options.rb +38 -0
- data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
- data/vendor/eac_cli/spec/lib/eac_cli/parser/alternative_spec.rb +1 -1
- data/vendor/eac_cli/spec/lib/eac_cli/runner_spec.rb +0 -1
- data/vendor/eac_cli/spec/lib/eac_cli/speaker_spec.rb +5 -9
- data/vendor/eac_config/lib/eac_config/node.rb +7 -0
- data/vendor/eac_config/lib/eac_config/version.rb +1 -1
- data/vendor/eac_git/lib/eac_git/executables.rb +4 -0
- data/vendor/eac_git/lib/eac_git/local.rb +5 -1
- data/vendor/eac_git/lib/eac_git/local/commit/archive.rb +19 -0
- data/vendor/eac_git/lib/eac_git/local/subrepo.rb +2 -1
- data/vendor/eac_git/lib/eac_git/version.rb +1 -1
- data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +2 -2
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/application.rb +23 -9
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/application_xdg.rb +34 -0
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/jobs_runner.rb +2 -2
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +19 -7
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/confirmation.rb +8 -1
- data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
- data/vendor/eac_ruby_gems_utils/eac_ruby_gems_utils.gemspec +1 -1
- data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple/decorated_gem.rb +2 -0
- data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/version.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/context.rb +31 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/contextualizable.rb +21 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/context.rb +11 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/speaker.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/parent_n.rb +11 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +10 -2
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/speaker.rb +16 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/speaker/receiver.rb +57 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/speaker/sender.rb +32 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
- data/vendor/{eac_cli/spec/lib → eac_ruby_utils/spec/lib/eac_ruby_utils/patches}/module/speaker_spec.rb +2 -2
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/parent_n_spec.rb +33 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +18 -0
- data/vendor/eac_templates/eac_templates.gemspec +1 -1
- data/vendor/eac_templates/lib/eac_templates/variable_providers.rb +1 -1
- data/vendor/eac_templates/lib/eac_templates/variable_providers/config_reader.rb +27 -0
- data/vendor/eac_templates/lib/eac_templates/version.rb +1 -1
- metadata +106 -65
- data/lib/avm/configs.rb +0 -26
- data/lib/avm/docker.rb +0 -9
- data/lib/avm/docker/registry.rb +0 -28
- data/lib/avm/git/issue/complete/_commits.rb +0 -40
- data/lib/avm/git/issue/complete/_git_subrepos.rb +0 -21
- data/lib/avm/git/issue/complete/_local_branch.rb +0 -52
- data/lib/avm/git/issue/complete/_local_tag.rb +0 -37
- data/lib/avm/git/issue/complete/_push.rb +0 -52
- data/lib/avm/git/issue/complete/_remote.rb +0 -31
- data/lib/avm/git/issue/complete/_test.rb +0 -43
- data/lib/avm/git/issue/complete/_tracker.rb +0 -26
- data/lib/avm/git/issue/complete/_validations.rb +0 -51
- data/lib/avm/git/issue/complete/_working_tree.rb +0 -17
- data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder.rb +0 -71
- data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder/alternative.rb +0 -50
- data/vendor/eac_cli/lib/eac_cli/docopt/runner_context_replacement.rb +0 -15
- data/vendor/eac_cli/lib/eac_cli/docopt/runner_extension.rb +0 -51
- data/vendor/eac_cli/lib/eac_cli/docopt_runner.rb +0 -38
- data/vendor/eac_cli/lib/eac_cli/docopt_runner/_class_methods.rb +0 -16
- data/vendor/eac_cli/lib/eac_cli/docopt_runner/_doc.rb +0 -23
- data/vendor/eac_cli/lib/eac_cli/docopt_runner/_settings.rb +0 -17
- data/vendor/eac_cli/lib/eac_cli/docopt_runner/_subcommands.rb +0 -152
- data/vendor/eac_cli/lib/eac_cli/docopt_runner/context.rb +0 -18
- data/vendor/eac_cli/lib/eac_cli/patches/module.rb +0 -4
- data/vendor/eac_cli/lib/eac_cli/patches/module/speaker.rb +0 -10
- data/vendor/eac_cli/lib/eac_cli/speaker/_class_methods.rb +0 -37
- data/vendor/eac_cli/lib/eac_cli/speaker/node.rb +0 -24
- data/vendor/eac_cli/spec/lib/eac_cli/docopt/runner_extension_spec.rb +0 -35
- data/vendor/eac_cli/spec/lib/eac_cli/docopt_runner_spec.rb +0 -136
@@ -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
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'eac_cli/definition'
|
4
|
-
require 'eac_cli/docopt/runner_extension'
|
5
4
|
require 'eac_cli/parser'
|
6
5
|
require 'eac_ruby_utils/core_ext'
|
7
6
|
|
@@ -43,7 +42,6 @@ module EacCli
|
|
43
42
|
|
44
43
|
extend AfterClassMethods
|
45
44
|
include InstanceMethods
|
46
|
-
::EacCli::Docopt::RunnerExtension.check(self)
|
47
45
|
include ActiveSupport::Callbacks
|
48
46
|
define_callbacks :run
|
49
47
|
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
|
@@ -15,7 +15,7 @@ module EacCli
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def run_parser_error(error)
|
18
|
-
$stderr.write("#{error}\n")
|
18
|
+
$stderr.write("#{program_name}: #{error}\n")
|
19
19
|
::Kernel.exit(PARSER_ERROR_EXIT_CODE)
|
20
20
|
end
|
21
21
|
|
@@ -33,6 +33,10 @@ module EacCli
|
|
33
33
|
def parsed
|
34
34
|
@parsed ||= ::EacCli::Parser.new(self.class.runner_definition, runner_context.argv).parsed
|
35
35
|
end
|
36
|
+
|
37
|
+
def program_name
|
38
|
+
runner_context.if_present(&:program_name) || $PROGRAM_NAME
|
39
|
+
end
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
@@ -6,12 +6,13 @@ require 'eac_ruby_utils/core_ext'
|
|
6
6
|
module EacCli
|
7
7
|
module RunnerWith
|
8
8
|
module Help
|
9
|
+
require_sub __FILE__
|
9
10
|
common_concern do
|
10
11
|
include ::EacCli::Runner
|
11
12
|
|
12
13
|
runner_definition.alt do
|
13
|
-
|
14
|
-
|
14
|
+
bool_opt '-h', '--help', 'Show help.', usage: true, required: true
|
15
|
+
pos_arg :any_arg_with_help, repeat: true, optional: true, visible: false
|
15
16
|
end
|
16
17
|
|
17
18
|
set_callback :run, :before do
|
@@ -20,17 +21,21 @@ module EacCli
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def help_run
|
23
|
-
return unless
|
24
|
+
return unless show_help?
|
24
25
|
|
25
26
|
puts help_text
|
26
27
|
raise ::EacCli::Runner::Exit
|
27
28
|
end
|
28
29
|
|
29
30
|
def help_text
|
30
|
-
r = ::EacCli::
|
31
|
+
r = ::EacCli::RunnerWith::Help::Builder.new(self.class.runner_definition).to_s
|
31
32
|
r += help_extra_text if respond_to?(:help_extra_text)
|
32
33
|
r
|
33
34
|
end
|
35
|
+
|
36
|
+
def show_help?
|
37
|
+
parsed.help? && !if_respond(:run_subcommand?, false)
|
38
|
+
end
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacCli
|
6
|
+
module RunnerWith
|
7
|
+
module Help
|
8
|
+
class Builder
|
9
|
+
require_sub __FILE__
|
10
|
+
common_constructor :definition
|
11
|
+
|
12
|
+
SEP = ' '
|
13
|
+
IDENT = SEP * 2
|
14
|
+
OPTION_DESC_SEP = IDENT * 2
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def option_long(option)
|
18
|
+
b = option.long
|
19
|
+
b += '=<value>' if option.argument?
|
20
|
+
b
|
21
|
+
end
|
22
|
+
|
23
|
+
def option_short(option)
|
24
|
+
b = option.short
|
25
|
+
b += '=<value>' if option.argument?
|
26
|
+
b
|
27
|
+
end
|
28
|
+
|
29
|
+
def option_usage_full(option)
|
30
|
+
if option.long.present?
|
31
|
+
[option.short, option_long(option)].reject(&:blank?).join(SEP)
|
32
|
+
else
|
33
|
+
option_short(option)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def option_definition(option)
|
39
|
+
self.class.option_usage_full(option) + option.description.if_present('') do |v|
|
40
|
+
OPTION_DESC_SEP + v
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def section(header, include_header = true)
|
45
|
+
b = include_header ? "#{header.humanize}:\n" : ''
|
46
|
+
b += send("self_#{header}") + "\n"
|
47
|
+
definition.alternatives.each do |alternative|
|
48
|
+
b += IDENT + ::EacCli::RunnerWith::Help::Builder::Alternative.new(alternative).to_s +
|
49
|
+
"\n"
|
50
|
+
end
|
51
|
+
b
|
52
|
+
end
|
53
|
+
|
54
|
+
def options_section
|
55
|
+
"Options:\n" +
|
56
|
+
definition.alternatives.flat_map(&:options)
|
57
|
+
.map { |option| IDENT + option_definition(option) + "\n" }.join
|
58
|
+
end
|
59
|
+
|
60
|
+
def usage_section
|
61
|
+
"Usage:\n" +
|
62
|
+
definition.alternatives.map do |alternative|
|
63
|
+
IDENT + ::EacCli::RunnerWith::Help::Builder::Alternative.new(alternative).to_s + "\n"
|
64
|
+
end.join
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_s
|
68
|
+
"#{definition.description}\n\n#{usage_section}\n#{options_section}\n"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacCli
|
6
|
+
module RunnerWith
|
7
|
+
module Help
|
8
|
+
class Builder
|
9
|
+
class Alternative
|
10
|
+
PROGRAM_MACRO = '__PROGRAM__'
|
11
|
+
SUBCOMMANDS_MACRO = '__SUBCOMMANDS__'
|
12
|
+
|
13
|
+
common_constructor :alternative
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
(
|
17
|
+
[PROGRAM_MACRO] +
|
18
|
+
alternative.options_argument?.if_present([]) { |_v| ['[options]'] } +
|
19
|
+
options +
|
20
|
+
positionals
|
21
|
+
).join(::EacCli::RunnerWith::Help::Builder::SEP)
|
22
|
+
end
|
23
|
+
|
24
|
+
def options
|
25
|
+
alternative.options.select(&:show_on_usage?).map do |option|
|
26
|
+
::EacCli::RunnerWith::Help::Builder.option_long(option)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def option_argument(option)
|
31
|
+
b = option.long
|
32
|
+
b += '=<value>' if option.argument?
|
33
|
+
b
|
34
|
+
end
|
35
|
+
|
36
|
+
def positionals
|
37
|
+
alternative.positional.map { |p| positional(p) }.reject(&:blank?)
|
38
|
+
end
|
39
|
+
|
40
|
+
def positional(positional)
|
41
|
+
return unless positional.visible?
|
42
|
+
|
43
|
+
if positional.subcommand?
|
44
|
+
SUBCOMMANDS_MACRO
|
45
|
+
else
|
46
|
+
r = "<#{positional.name}>"
|
47
|
+
r += '...' if positional.repeat?
|
48
|
+
r = "[#{r}]" if positional.optional?
|
49
|
+
r
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -10,9 +10,7 @@ module EacCli
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def runner?(object)
|
13
|
-
::EacCli::Runner.runner?(object)
|
14
|
-
object.is_a?(::Class) && object < ::EacCli::DocoptRunner
|
15
|
-
)
|
13
|
+
::EacCli::Runner.runner?(object)
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
@@ -60,7 +58,7 @@ module EacCli
|
|
60
58
|
end
|
61
59
|
|
62
60
|
def run_with_subcommand
|
63
|
-
if
|
61
|
+
if run_subcommand?
|
64
62
|
if subcommand_runner.respond_to?(:run_run)
|
65
63
|
subcommand_runner.run_run
|
66
64
|
else
|
@@ -79,6 +77,10 @@ module EacCli
|
|
79
77
|
"Method #{__method__} should be overrided in #{self.class.name}"
|
80
78
|
end
|
81
79
|
|
80
|
+
def run_subcommand?
|
81
|
+
subcommand_name.present?
|
82
|
+
end
|
83
|
+
|
82
84
|
def subcommands?
|
83
85
|
self.class.runner_definition.subcommands?
|
84
86
|
end
|
@@ -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 }
|
@@ -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
|