eac_tools 0.82.0 → 0.83.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.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +45 -40
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/avm.gemspec +4 -3
  5. data/sub/avm/lib/avm/data/rotate.rb +1 -1
  6. data/sub/avm/lib/avm/launcher/instances/base/publishing.rb +1 -1
  7. data/sub/avm/lib/avm/registry/from_gems.rb +2 -2
  8. data/sub/avm/lib/avm/rspec/shared_examples/avm_file_formats_with_fixtures.rb +0 -1
  9. data/sub/avm/lib/avm/source_generators/base.rb +1 -0
  10. data/sub/avm/lib/avm/source_generators/runner.rb +6 -0
  11. data/sub/avm/lib/avm/sources/tests/builder.rb +1 -1
  12. data/sub/avm/lib/avm/version.rb +1 -1
  13. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/avm-tools.gemspec +1 -0
  14. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/ruby_gem_stub.gemspec +1 -0
  15. data/sub/avm-eac_asciidoctor_base0/Gemfile +2 -2
  16. data/sub/avm-eac_asciidoctor_base0/avm-eac_asciidoctor_base0.gemspec +6 -5
  17. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document/header_lines.rb +5 -3
  18. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/instances/build/document.rb +2 -2
  19. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/sources/base/document.rb +2 -2
  20. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/sources/base.rb +1 -3
  21. data/sub/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/version.rb +1 -1
  22. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/file_formats/base_spec.rb +1 -1
  23. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/instances/build/document_spec.rb +18 -18
  24. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/instances/build/document_spec_files/pre_processed_root_body.adoc +1 -0
  25. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/instances/build_spec.rb +3 -3
  26. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/source_generators/base_spec.rb +1 -1
  27. data/sub/avm-eac_asciidoctor_base0/spec/lib/avm/eac_asciidoctor_base0/sources/base_spec.rb +2 -2
  28. data/sub/avm-eac_asciidoctor_base0/spec/rubocop_spec.rb +1 -1
  29. data/sub/avm-eac_asciidoctor_base0/spec/spec_helper/eac_asciidoctor_base0_stubs.rb +1 -1
  30. data/sub/avm-eac_asciidoctor_base0/spec/spec_helper.rb +3 -3
  31. data/sub/avm-eac_python_base0/Gemfile +2 -2
  32. data/sub/avm-eac_python_base0/avm-eac_python_base0.gemspec +5 -4
  33. data/sub/avm-eac_python_base0/lib/avm/eac_python_base0/executables.rb +1 -1
  34. data/sub/avm-eac_python_base0/lib/avm/eac_python_base0/version.rb +1 -1
  35. data/sub/avm-eac_python_base0/spec/lib/avm/eac_python_base0/file_formats/base_spec.rb +1 -1
  36. data/sub/avm-eac_python_base0/spec/lib/avm/eac_python_base0/file_formats/base_spec_files/python_code.source +1 -1
  37. data/sub/avm-eac_python_base0/spec/lib/avm/eac_python_base0/file_formats/base_spec_files/python_code.target +1 -1
  38. data/sub/avm-eac_python_base0/spec/rubocop_spec.rb +1 -1
  39. data/sub/avm-eac_python_base0/spec/spec_helper.rb +1 -1
  40. data/sub/avm-eac_ruby_base1/avm-eac_ruby_base1.gemspec +2 -2
  41. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/rubocop_command.rb +2 -1
  42. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
  43. metadata +14 -144
  44. data/sub/eac_cli/Gemfile +0 -8
  45. data/sub/eac_cli/eac_cli.gemspec +0 -22
  46. data/sub/eac_cli/lib/eac_cli/config/entry/options.rb +0 -58
  47. data/sub/eac_cli/lib/eac_cli/config/entry/undefined.rb +0 -31
  48. data/sub/eac_cli/lib/eac_cli/config/entry.rb +0 -60
  49. data/sub/eac_cli/lib/eac_cli/config.rb +0 -17
  50. data/sub/eac_cli/lib/eac_cli/core_ext.rb +0 -6
  51. data/sub/eac_cli/lib/eac_cli/default_runner.rb +0 -14
  52. data/sub/eac_cli/lib/eac_cli/definition/alternative.rb +0 -105
  53. data/sub/eac_cli/lib/eac_cli/definition/argument_option.rb +0 -21
  54. data/sub/eac_cli/lib/eac_cli/definition/boolean_option.rb +0 -27
  55. data/sub/eac_cli/lib/eac_cli/definition/error.rb +0 -8
  56. data/sub/eac_cli/lib/eac_cli/definition/option/initialize_args_parser.rb +0 -48
  57. data/sub/eac_cli/lib/eac_cli/definition/option.rb +0 -73
  58. data/sub/eac_cli/lib/eac_cli/definition/option_or_positional.rb +0 -43
  59. data/sub/eac_cli/lib/eac_cli/definition/positional.rb +0 -53
  60. data/sub/eac_cli/lib/eac_cli/definition.rb +0 -109
  61. data/sub/eac_cli/lib/eac_cli/enum.rb +0 -45
  62. data/sub/eac_cli/lib/eac_cli/old_configs/entry_reader.rb +0 -80
  63. data/sub/eac_cli/lib/eac_cli/old_configs/password_entry_reader.rb +0 -16
  64. data/sub/eac_cli/lib/eac_cli/old_configs/read_entry_options.rb +0 -44
  65. data/sub/eac_cli/lib/eac_cli/old_configs/store_passwords_entry_reader.rb +0 -25
  66. data/sub/eac_cli/lib/eac_cli/old_configs.rb +0 -35
  67. data/sub/eac_cli/lib/eac_cli/parser/alternative/any_options.rb +0 -19
  68. data/sub/eac_cli/lib/eac_cli/parser/alternative/argv.rb +0 -19
  69. data/sub/eac_cli/lib/eac_cli/parser/alternative/double_dash.rb +0 -24
  70. data/sub/eac_cli/lib/eac_cli/parser/alternative/long_options.rb +0 -37
  71. data/sub/eac_cli/lib/eac_cli/parser/alternative/option_argument.rb +0 -29
  72. data/sub/eac_cli/lib/eac_cli/parser/alternative/options.rb +0 -29
  73. data/sub/eac_cli/lib/eac_cli/parser/alternative/positionals.rb +0 -30
  74. data/sub/eac_cli/lib/eac_cli/parser/alternative/short_options.rb +0 -54
  75. data/sub/eac_cli/lib/eac_cli/parser/alternative.rb +0 -103
  76. data/sub/eac_cli/lib/eac_cli/parser/collector.rb +0 -55
  77. data/sub/eac_cli/lib/eac_cli/parser/error.rb +0 -15
  78. data/sub/eac_cli/lib/eac_cli/parser.rb +0 -34
  79. data/sub/eac_cli/lib/eac_cli/patches/object/runner_with.rb +0 -26
  80. data/sub/eac_cli/lib/eac_cli/patches/object.rb +0 -5
  81. data/sub/eac_cli/lib/eac_cli/patches.rb +0 -4
  82. data/sub/eac_cli/lib/eac_cli/rspec/setup.rb +0 -42
  83. data/sub/eac_cli/lib/eac_cli/rspec.rb +0 -9
  84. data/sub/eac_cli/lib/eac_cli/runner/after_class_methods.rb +0 -38
  85. data/sub/eac_cli/lib/eac_cli/runner/class_runner.rb +0 -36
  86. data/sub/eac_cli/lib/eac_cli/runner/context.rb +0 -63
  87. data/sub/eac_cli/lib/eac_cli/runner/context_responders/base.rb +0 -24
  88. data/sub/eac_cli/lib/eac_cli/runner/context_responders/parent.rb +0 -27
  89. data/sub/eac_cli/lib/eac_cli/runner/context_responders/runner.rb +0 -20
  90. data/sub/eac_cli/lib/eac_cli/runner/context_responders/runner_missing_method.rb +0 -32
  91. data/sub/eac_cli/lib/eac_cli/runner/context_responders/set.rb +0 -44
  92. data/sub/eac_cli/lib/eac_cli/runner/context_responders.rb +0 -11
  93. data/sub/eac_cli/lib/eac_cli/runner/exit.rb +0 -14
  94. data/sub/eac_cli/lib/eac_cli/runner/for_context.rb +0 -40
  95. data/sub/eac_cli/lib/eac_cli/runner/instance_methods.rb +0 -45
  96. data/sub/eac_cli/lib/eac_cli/runner.rb +0 -50
  97. data/sub/eac_cli/lib/eac_cli/runner_with/confirmation.rb +0 -44
  98. data/sub/eac_cli/lib/eac_cli/runner_with/help/builder/alternative.rb +0 -63
  99. data/sub/eac_cli/lib/eac_cli/runner_with/help/builder.rb +0 -81
  100. data/sub/eac_cli/lib/eac_cli/runner_with/help/layout.rb +0 -40
  101. data/sub/eac_cli/lib/eac_cli/runner_with/help.rb +0 -53
  102. data/sub/eac_cli/lib/eac_cli/runner_with/input.rb +0 -36
  103. data/sub/eac_cli/lib/eac_cli/runner_with/output.rb +0 -58
  104. data/sub/eac_cli/lib/eac_cli/runner_with/output_item/base_formatter.rb +0 -15
  105. data/sub/eac_cli/lib/eac_cli/runner_with/output_item/csv_formatter.rb +0 -23
  106. data/sub/eac_cli/lib/eac_cli/runner_with/output_item/yaml_formatter.rb +0 -18
  107. data/sub/eac_cli/lib/eac_cli/runner_with/output_item.rb +0 -42
  108. data/sub/eac_cli/lib/eac_cli/runner_with/output_list/base_formatter.rb +0 -30
  109. data/sub/eac_cli/lib/eac_cli/runner_with/output_list/csv_formatter.rb +0 -26
  110. data/sub/eac_cli/lib/eac_cli/runner_with/output_list/yaml_formatter.rb +0 -23
  111. data/sub/eac_cli/lib/eac_cli/runner_with/output_list.rb +0 -42
  112. data/sub/eac_cli/lib/eac_cli/runner_with/subcommands/definition_concern.rb +0 -10
  113. data/sub/eac_cli/lib/eac_cli/runner_with/subcommands.rb +0 -129
  114. data/sub/eac_cli/lib/eac_cli/runner_with.rb +0 -9
  115. data/sub/eac_cli/lib/eac_cli/runner_with_set.rb +0 -56
  116. data/sub/eac_cli/lib/eac_cli/speaker/constants.rb +0 -13
  117. data/sub/eac_cli/lib/eac_cli/speaker/input_blocked.rb +0 -16
  118. data/sub/eac_cli/lib/eac_cli/speaker/input_requested.rb +0 -8
  119. data/sub/eac_cli/lib/eac_cli/speaker/list.rb +0 -61
  120. data/sub/eac_cli/lib/eac_cli/speaker/options.rb +0 -38
  121. data/sub/eac_cli/lib/eac_cli/speaker.rb +0 -127
  122. data/sub/eac_cli/lib/eac_cli/version.rb +0 -5
  123. data/sub/eac_cli/lib/eac_cli.rb +0 -7
  124. data/sub/eac_cli/spec/lib/eac_cli/definition/alternative_spec.rb +0 -18
  125. data/sub/eac_cli/spec/lib/eac_cli/old_configs_spec.rb +0 -14
  126. data/sub/eac_cli/spec/lib/eac_cli/parser/alternative/subcommands_spec.rb +0 -58
  127. data/sub/eac_cli/spec/lib/eac_cli/parser/alternative_spec.rb +0 -89
  128. data/sub/eac_cli/spec/lib/eac_cli/runner/for_context_spec.rb +0 -79
  129. data/sub/eac_cli/spec/lib/eac_cli/runner_spec.rb +0 -129
  130. data/sub/eac_cli/spec/lib/eac_cli/runner_with/confirmation_spec.rb +0 -42
  131. data/sub/eac_cli/spec/lib/eac_cli/runner_with/help/layout_spec.rb +0 -21
  132. data/sub/eac_cli/spec/lib/eac_cli/runner_with/help_spec.rb +0 -51
  133. data/sub/eac_cli/spec/lib/eac_cli/runner_with/output_spec.rb +0 -81
  134. data/sub/eac_cli/spec/lib/eac_cli/runner_with/subcommands_spec.rb +0 -98
  135. data/sub/eac_cli/spec/lib/eac_cli/speaker_spec.rb +0 -32
  136. data/sub/eac_cli/spec/rubocop_spec.rb +0 -3
  137. data/sub/eac_cli/spec/spec_helper.rb +0 -4
  138. data/sub/eac_config/Gemfile +0 -8
  139. data/sub/eac_config/eac_config.gemspec +0 -19
  140. data/sub/eac_config/lib/eac_config/entries.rb +0 -35
  141. data/sub/eac_config/lib/eac_config/entry/not_found_error.rb +0 -13
  142. data/sub/eac_config/lib/eac_config/entry.rb +0 -64
  143. data/sub/eac_config/lib/eac_config/entry_path.rb +0 -89
  144. data/sub/eac_config/lib/eac_config/envvars_node/entry.rb +0 -54
  145. data/sub/eac_config/lib/eac_config/envvars_node.rb +0 -35
  146. data/sub/eac_config/lib/eac_config/load_nodes_search.rb +0 -39
  147. data/sub/eac_config/lib/eac_config/load_path.rb +0 -28
  148. data/sub/eac_config/lib/eac_config/node.rb +0 -81
  149. data/sub/eac_config/lib/eac_config/node_entry.rb +0 -28
  150. data/sub/eac_config/lib/eac_config/node_uri/instanciate_single.rb +0 -29
  151. data/sub/eac_config/lib/eac_config/node_uri.rb +0 -45
  152. data/sub/eac_config/lib/eac_config/old_configs/base.rb +0 -43
  153. data/sub/eac_config/lib/eac_config/old_configs/file.rb +0 -47
  154. data/sub/eac_config/lib/eac_config/old_configs.rb +0 -75
  155. data/sub/eac_config/lib/eac_config/paths_hash/entry_key_error.rb +0 -8
  156. data/sub/eac_config/lib/eac_config/paths_hash/node.rb +0 -67
  157. data/sub/eac_config/lib/eac_config/paths_hash/path_search.rb +0 -39
  158. data/sub/eac_config/lib/eac_config/paths_hash.rb +0 -63
  159. data/sub/eac_config/lib/eac_config/prefixed_path_node/entry.rb +0 -25
  160. data/sub/eac_config/lib/eac_config/prefixed_path_node.rb +0 -19
  161. data/sub/eac_config/lib/eac_config/rspec/setup.rb +0 -65
  162. data/sub/eac_config/lib/eac_config/rspec.rb +0 -9
  163. data/sub/eac_config/lib/eac_config/version.rb +0 -5
  164. data/sub/eac_config/lib/eac_config/yaml_file_node/entry.rb +0 -36
  165. data/sub/eac_config/lib/eac_config/yaml_file_node/self_entries.rb +0 -72
  166. data/sub/eac_config/lib/eac_config/yaml_file_node.rb +0 -54
  167. data/sub/eac_config/lib/eac_config.rb +0 -7
  168. data/sub/eac_config/spec/lib/eac_config/entry_path_spec.rb +0 -30
  169. data/sub/eac_config/spec/lib/eac_config/envvars_node/entry_spec.rb +0 -14
  170. data/sub/eac_config/spec/lib/eac_config/envvars_node_spec.rb +0 -51
  171. data/sub/eac_config/spec/lib/eac_config/old_configs_spec.rb +0 -46
  172. data/sub/eac_config/spec/lib/eac_config/paths_hash_spec.rb +0 -88
  173. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec.rb +0 -88
  174. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1.yaml +0 -10
  175. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_1.yaml +0 -4
  176. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2/storage1_2_1.yaml +0 -4
  177. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2.yaml +0 -10
  178. data/sub/eac_config/spec/rubocop_spec.rb +0 -3
  179. data/sub/eac_config/spec/spec_helper.rb +0 -4
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_cli/runner_with/output_item/base_formatter'
5
- require 'yaml'
6
-
7
- module EacCli
8
- module RunnerWith
9
- module OutputItem
10
- class YamlFormatter < ::EacCli::RunnerWith::OutputItem::BaseFormatter
11
- # @return [String]
12
- def to_output
13
- ::YAML.dump(item_hash.deep_stringify_keys)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/runner_with/output'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/acts_as_abstract'
6
-
7
- module EacCli
8
- module RunnerWith
9
- module OutputItem
10
- require_sub __FILE__
11
-
12
- FORMATS = {
13
- 'csv' => ::EacCli::RunnerWith::OutputItem::CsvFormatter,
14
- 'yaml' => ::EacCli::RunnerWith::OutputItem::YamlFormatter
15
- }.freeze
16
-
17
- common_concern do
18
- acts_as_abstract :item_hash
19
- include ::EacCli::RunnerWith::Output
20
-
21
- runner_definition do
22
- arg_opt '-f', '--format', 'Format to output item.', default: 'yaml'
23
- end
24
- end
25
-
26
- # @return [String]
27
- def output_content
28
- formatter.to_output
29
- end
30
-
31
- # @return [EacCli::RunnerWith::OutputList::BaseFormatter]
32
- def formatter
33
- formatter_class.new(item_hash)
34
- end
35
-
36
- # @return [Class]
37
- def formatter_class
38
- FORMATS.fetch(parsed.format)
39
- end
40
- end
41
- end
42
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_ruby_utils/acts_as_abstract'
5
-
6
- module EacCli
7
- module RunnerWith
8
- module OutputList
9
- class BaseFormatter
10
- acts_as_abstract :to_output
11
- common_constructor :columns, :rows
12
-
13
- # @return [String]
14
- def build_column(column)
15
- column.to_s
16
- end
17
-
18
- # @return [Array<String>]
19
- def build_columns
20
- columns.map(&:to_s)
21
- end
22
-
23
- # @return [Array<Hash<String, String>>]
24
- def build_rows
25
- rows.map { |row| build_row(row) }
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'csv'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_cli/runner_with/output_list/base_formatter'
6
-
7
- module EacCli
8
- module RunnerWith
9
- module OutputList
10
- class CsvFormatter < ::EacCli::RunnerWith::OutputList::BaseFormatter
11
- # @return [Array]
12
- def build_row(row)
13
- build_columns.map { |c| row.send(c) }
14
- end
15
-
16
- # @return [String]
17
- def to_output
18
- ::CSV.generate do |csv|
19
- csv << build_columns
20
- build_rows.each { |row| csv << row }
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_cli/runner_with/output_list/base_formatter'
5
- require 'yaml'
6
-
7
- module EacCli
8
- module RunnerWith
9
- module OutputList
10
- class YamlFormatter < ::EacCli::RunnerWith::OutputList::BaseFormatter
11
- # @return [Hash<String, String>]
12
- def build_row(row)
13
- build_columns.inject({}) { |a, e| a.merge(e => row.send(e).to_s) }
14
- end
15
-
16
- # @return [String]
17
- def to_output
18
- ::YAML.dump(build_rows)
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/runner_with/output'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/acts_as_abstract'
6
-
7
- module EacCli
8
- module RunnerWith
9
- module OutputList
10
- require_sub __FILE__
11
-
12
- FORMATS = {
13
- 'csv' => ::EacCli::RunnerWith::OutputList::CsvFormatter,
14
- 'yaml' => ::EacCli::RunnerWith::OutputList::YamlFormatter
15
- }.freeze
16
-
17
- common_concern do
18
- acts_as_abstract :list_columns, :list_rows
19
- include ::EacCli::RunnerWith::Output
20
-
21
- runner_definition do
22
- arg_opt '-f', '--format', 'Format to output list.', default: 'yaml'
23
- end
24
- end
25
-
26
- # @return [String]
27
- def output_content
28
- formatter.to_output
29
- end
30
-
31
- # @return [EacCli::RunnerWith::OutputList::BaseFormatter]
32
- def formatter
33
- formatter_class.new(list_columns, list_rows)
34
- end
35
-
36
- # @return [Class]
37
- def formatter_class
38
- FORMATS.fetch(parsed.format)
39
- end
40
- end
41
- end
42
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacCli
4
- module RunnerWith
5
- module Subcommands
6
- module DefinitionConcern
7
- end
8
- end
9
- end
10
- end
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/runner'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module EacCli
7
- module RunnerWith
8
- module Subcommands
9
- require_sub __FILE__
10
-
11
- class << self
12
- def runner?(object)
13
- ::EacCli::Runner.runner?(object)
14
- end
15
-
16
- # @return [Hash<String, EacCli::Runner>]
17
- def subcommands_from_module(a_module)
18
- a_module.constants
19
- .map { |name| [name.to_s.underscore.gsub('_', '-'), a_module.const_get(name)] }
20
- .select { |c| runner?(c[1]) }
21
- .to_h.with_indifferent_access
22
- end
23
- end
24
-
25
- common_concern do
26
- include ::EacCli::Runner
27
- runner_definition.singleton_class
28
- .include(::EacCli::RunnerWith::Subcommands::DefinitionConcern)
29
- end
30
-
31
- EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME = :extra_available_subcommands
32
-
33
- def available_subcommands
34
- @available_subcommands ||= available_subcommands_auto.merge(available_subcommands_extra)
35
- end
36
-
37
- # @return [Hash<String, EacCli::Runner>]
38
- def available_subcommands_auto
39
- ::EacCli::RunnerWith::Subcommands.subcommands_from_module(self.class)
40
- end
41
-
42
- def available_subcommands_extra
43
- if respond_to?(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME, true)
44
- send(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME)
45
- else
46
- {}
47
- end
48
- end
49
-
50
- def available_subcommands_to_s
51
- available_subcommands.keys.sort.join(', ')
52
- end
53
-
54
- # @return [Hash<String, Enumerable<String>]
55
- def help_extra_text
56
- help_list_section('Subcommands', available_subcommands.keys.sort)
57
- end
58
-
59
- def method_missing(method_name, *arguments, &block)
60
- return run_with_subcommand(*arguments, &block) if
61
- run_with_subcommand_alias_run?(method_name)
62
-
63
- super
64
- end
65
-
66
- def respond_to_missing?(method_name, include_private = false)
67
- run_with_subcommand_alias_run?(method_name) || super
68
- end
69
-
70
- def run_with_subcommand
71
- if run_subcommand?
72
- if subcommand_runner.respond_to?(:run_run)
73
- subcommand_runner.run_run
74
- else
75
- subcommand_runner.run
76
- end
77
- else
78
- run_without_subcommand
79
- end
80
- end
81
-
82
- def run_with_subcommand_alias_run?(method_name)
83
- subcommands? && method_name.to_sym == :run
84
- end
85
-
86
- def run_without_subcommand
87
- "Method #{__method__} should be overrided in #{self.class.name}"
88
- end
89
-
90
- def run_subcommand?
91
- subcommand_name.present?
92
- end
93
-
94
- def subcommands?
95
- self.class.runner_definition.subcommands?
96
- end
97
-
98
- def subcommand_args
99
- parsed.fetch(::EacCli::Definition::SUBCOMMAND_ARGS_ARG)
100
- end
101
-
102
- def subcommand_class
103
- available_subcommands[subcommand_name].if_present { |v| return v }
104
-
105
- raise(::EacCli::Parser::Error.new(
106
- self.class.runner_definition, runner_context.argv,
107
- "Subcommand \"#{subcommand_name}\" not found " \
108
- "(Available: #{available_subcommands_to_s})"
109
- ))
110
- end
111
-
112
- def subcommand_name
113
- parsed.fetch(::EacCli::Definition::SUBCOMMAND_NAME_ARG)
114
- end
115
-
116
- def subcommand_program
117
- [program_name, subcommand_name]
118
- end
119
-
120
- def subcommand_runner
121
- @subcommand_runner ||= subcommand_class.create(
122
- argv: subcommand_args,
123
- program_name: subcommand_program,
124
- parent: self
125
- )
126
- end
127
- end
128
- end
129
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacCli
6
- module RunnerWith
7
- require_sub __FILE__
8
- end
9
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/gems_registry'
4
-
5
- module EacCli
6
- class RunnerWithSet
7
- class << self
8
- def default
9
- @default ||= new
10
- end
11
- end
12
-
13
- def add_namespace(namespace)
14
- namespace = sanitize_namespace(namespace)
15
- namespace_set << namespace unless namespace_set.include?(namespace)
16
- self
17
- end
18
-
19
- def add_from_gems_registry
20
- ::EacRubyUtils::GemsRegistry.new('RunnerWith').registered.each do |registered_gem|
21
- add_namespace(registered_gem.registered_module)
22
- end
23
- end
24
-
25
- def item_to_module(item)
26
- item.is_a?(::Module) ? item : key_to_module(item)
27
- end
28
-
29
- def namespaces
30
- namespace_set.dup
31
- end
32
-
33
- private
34
-
35
- def namespace_set
36
- @namespace_set ||= []
37
- end
38
-
39
- def key_to_module(key)
40
- namespace_set.lazy
41
- .map { |namespace| key_to_module_in_namespace(namespace, key) }
42
- .find(&:present?) ||
43
- raise("Not module found with key \"#{key}\" (Namespaces: #{namespace_set})")
44
- end
45
-
46
- def key_to_module_in_namespace(namespace, key)
47
- namespace.const_get(key.to_s.camelize)
48
- rescue ::NameError
49
- nil
50
- end
51
-
52
- def sanitize_namespace(source)
53
- source.is_a?(::Module) ? source : source.to_s.constantize
54
- end
55
- end
56
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/by_reference'
4
-
5
- module EacCli
6
- class Speaker
7
- module Constants
8
- STDERR = ::EacRubyUtils::ByReference.new { $stderr }
9
- STDIN = ::EacRubyUtils::ByReference.new { $stdin }
10
- STDOUT = ::EacRubyUtils::ByReference.new { $stdout }
11
- end
12
- end
13
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/speaker/input_requested'
4
-
5
- module EacCli
6
- class Speaker
7
- class InputBlocked
8
- %w[gets noecho].each do |method|
9
- define_method(method) do
10
- raise ::EacCli::Speaker::InputRequested,
11
- "Method (\"#{method}\") was requested, but input is blocked"
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacCli
4
- class Speaker
5
- class InputRequested < ::RuntimeError
6
- end
7
- end
8
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/hash_with_indifferent_access'
4
- require 'ostruct'
5
-
6
- module EacCli
7
- class Speaker
8
- class List
9
- class << self
10
- def build(list)
11
- return List.new(hash_to_values(list)) if list.is_a?(::Hash)
12
- return List.new(array_to_values(list)) if list.is_a?(::Array)
13
-
14
- raise "Invalid list: #{list} (#{list.class})"
15
- end
16
-
17
- private
18
-
19
- def hash_to_values(list)
20
- list.map { |key, value| ::OpenStruct.new(key: key, label: key, value: value) } # rubocop:disable Style/OpenStructUse
21
- end
22
-
23
- def array_to_values(list)
24
- list.map { |value| ::OpenStruct.new(key: value, label: value, value: value) } # rubocop:disable Style/OpenStructUse
25
- end
26
- end
27
-
28
- attr_reader :values
29
-
30
- def initialize(values)
31
- @values = values.map do |v|
32
- ::OpenStruct.new(key: to_key(v.key), label: to_label(v.label), value: v.value) # rubocop:disable Style/OpenStructUse
33
- end
34
- end
35
-
36
- def valid_labels
37
- values.map(&:label)
38
- end
39
-
40
- def valid_value?(value)
41
- values.any? { |v| v.key == to_key(value) }
42
- end
43
-
44
- def to_key(value)
45
- to_label(value).downcase
46
- end
47
-
48
- def to_label(value)
49
- value.to_s.strip
50
- end
51
-
52
- def build_value(value)
53
- key = to_key(value)
54
- values.each do |v|
55
- return v.value if v.key == key
56
- end
57
- raise "Value not found: \"#{value}\" (#{values})"
58
- end
59
- end
60
- end
61
- end
@@ -1,38 +0,0 @@
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, $stderr)
15
- end
16
-
17
- def out_out
18
- option(OPTION_OUT_OUT, $stdout)
19
- end
20
-
21
- def in_in
22
- option(OPTION_IN_IN, $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
@@ -1,127 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'colorize'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/speaker/receiver'
6
-
7
- module EacCli
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
- end
15
-
16
- def puts(string = '')
17
- string.to_s.each_line do |line|
18
- err_out.puts(err_line_prefix.to_s + line)
19
- end
20
- end
21
-
22
- def out(string = '')
23
- out_out.write(string.to_s)
24
- end
25
-
26
- def error(string)
27
- puts "ERROR: #{string}".white.on_red
28
- end
29
-
30
- def title(string)
31
- string = string.to_s
32
- puts(('-' * (8 + string.length)).green)
33
- puts("--- #{string} ---".green)
34
- puts(('-' * (8 + string.length)).green)
35
- puts
36
- end
37
-
38
- def info(string)
39
- puts string.to_s.white
40
- end
41
-
42
- def infom(string)
43
- puts string.to_s.light_yellow
44
- end
45
-
46
- def warn(string)
47
- puts string.to_s.yellow
48
- end
49
-
50
- # Options:
51
- # +bool+ ([Boolean], default: +false+): requires a answer "yes" or "no".
52
- # +list+ ([Hash] or [Array], default: +nil+): requires a answer from a list.
53
- # +noecho+ ([Boolean], default: +false+): does not output answer.
54
- def input(question, options = {})
55
- bool, list, noecho = options.to_options_consumer.consume_all(:bool, :list, :noecho)
56
- if list
57
- request_from_list(question, list, noecho)
58
- elsif bool
59
- request_from_bool(question, noecho)
60
- else
61
- request_string(question, noecho)
62
- end
63
- end
64
-
65
- def infov(*args)
66
- r = []
67
- args.each_with_index do |v, i|
68
- if i.even?
69
- r << "#{v}: ".cyan
70
- else
71
- r.last << v.to_s
72
- end
73
- end
74
- puts r.join(', ')
75
- end
76
-
77
- def success(string)
78
- puts string.to_s.green
79
- end
80
-
81
- private
82
-
83
- def list_value(list, input)
84
- values = list_values(list)
85
- return input, true unless values
86
-
87
- [input, false] unless values.include?(input)
88
- end
89
-
90
- def list_values(list)
91
- if list.is_a?(::Hash)
92
- list.keys.map(&:to_s)
93
- elsif list.is_a?(::Array)
94
- list.map(&:to_s)
95
- end
96
- end
97
-
98
- def request_from_bool(question, noecho)
99
- request_from_list(question, { yes: true, y: true, no: false, n: false }, noecho)
100
- end
101
-
102
- def request_from_list(question, list, noecho)
103
- list = ::EacCli::Speaker::List.build(list)
104
- loop do
105
- input = request_string("#{question} [#{list.valid_labels.join('/')}]", noecho)
106
- return list.build_value(input) if list.valid_value?(input)
107
-
108
- warn "Invalid input: \"#{input}\" (Valid: #{list.valid_labels.join(', ')})"
109
- end
110
- end
111
-
112
- def request_string(question, noecho)
113
- err_out.write "#{question}: ".to_s.yellow
114
- noecho ? request_string_noecho : request_string_echo
115
- end
116
-
117
- def request_string_noecho
118
- r = in_in.noecho(&:gets).chomp.strip
119
- err_out.write("\n")
120
- r
121
- end
122
-
123
- def request_string_echo
124
- in_in.gets.chomp.strip
125
- end
126
- end
127
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacCli
4
- VERSION = '0.38.1'
5
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacCli
6
- require_sub __FILE__
7
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/definition/alternative'
4
-
5
- RSpec.describe EacCli::Definition::Alternative do
6
- let(:instance) { described_class.new }
7
-
8
- it { expect { instance.arg_opt '-a', '--opt2', 'A argument option' }.not_to raise_error }
9
- it { expect { instance.bool_opt '-b', '--opt1', 'A boolean option' }.not_to raise_error }
10
- it { expect { instance.bool_opt '-b', '--no-description' }.not_to raise_error }
11
- it { expect { instance.bool_opt '--opt1', 'A option without short' }.not_to raise_error }
12
- it { expect { instance.bool_opt '-b', 'A option without long' }.not_to raise_error }
13
- it { expect { instance.bool_opt 'A option without selectors' }.to raise_error(StandardError) }
14
- it { expect { instance.options_argument(true) }.not_to raise_error }
15
- it { expect { instance.pos_arg :pos1 }.not_to raise_error }
16
- it { expect { instance.pos_arg :pos2, optional: true, repeat: true }.not_to raise_error }
17
- it { expect { instance.subcommands }.not_to raise_error }
18
- end