avm-tools 0.98.0 → 0.99.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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/configs.rb +2 -2
  3. data/lib/avm/data/package/dump.rb +2 -2
  4. data/lib/avm/data/package/load.rb +1 -1
  5. data/lib/avm/data/unit.rb +1 -1
  6. data/lib/avm/docker/container.rb +2 -2
  7. data/lib/avm/docker/runner.rb +1 -1
  8. data/lib/avm/eac_redmine_base0/core_update.rb +1 -1
  9. data/lib/avm/eac_webapp_base0/runner/data/load.rb +1 -1
  10. data/lib/avm/eac_writings_base0/project_build.rb +1 -1
  11. data/lib/avm/files/appendable/templatized_directory.rb +1 -1
  12. data/lib/avm/files/formatter.rb +1 -1
  13. data/lib/avm/git/auto_commit/rules/manual.rb +1 -1
  14. data/lib/avm/git/file_auto_fixup.rb +1 -1
  15. data/lib/avm/git/issue/complete.rb +2 -2
  16. data/lib/avm/git/issue/deliver.rb +56 -0
  17. data/lib/avm/git/revision_test.rb +1 -1
  18. data/lib/avm/git/subrepo_check.rb +1 -1
  19. data/lib/avm/git/subrepo_checks.rb +1 -1
  20. data/lib/avm/instances/entries.rb +1 -1
  21. data/lib/avm/instances/entry.rb +1 -1
  22. data/lib/avm/launcher/context/instance_manager/cached_instance.rb +1 -1
  23. data/lib/avm/launcher/instances/base.rb +1 -1
  24. data/lib/avm/patches/object/template.rb +2 -2
  25. data/lib/avm/projects/stereotypes/git/update.rb +1 -1
  26. data/lib/avm/projects/stereotypes/git/update/subrepo.rb +1 -1
  27. data/lib/avm/projects/stereotypes/ruby_gem/publish.rb +2 -2
  28. data/lib/avm/projects/stereotypes/ruby_gem/update.rb +1 -1
  29. data/lib/avm/projects/stereotypes/ruby_gem/version_bump.rb +1 -1
  30. data/lib/avm/ruby/gems/generator.rb +3 -3
  31. data/lib/avm/ruby/rubocop.rb +1 -1
  32. data/lib/avm/tools/runner/git.rb +6 -2
  33. data/lib/avm/tools/runner/git/commit.rb +1 -1
  34. data/lib/avm/tools/runner/git/issue.rb +17 -13
  35. data/lib/avm/tools/version.rb +1 -1
  36. data/lib/eac_launcher/context.rb +2 -2
  37. data/lib/eac_launcher/git/publish_base.rb +1 -1
  38. data/lib/eac_launcher/ruby/gem/build.rb +2 -2
  39. data/vendor/avm-apps/lib/avm/apps/jobs/base.rb +1 -1
  40. data/vendor/avm-apps/lib/avm/apps/sources/configuration.rb +2 -2
  41. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_locale.rb +1 -1
  42. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_rubocop.rb +1 -1
  43. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_tests.rb +1 -1
  44. data/vendor/avm-apps/lib/avm/apps/version.rb +1 -1
  45. data/vendor/avm-eac_asciidoctor_base0/avm-eac_asciidoctor_base0.gemspec +1 -0
  46. data/vendor/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/sources/build.rb +1 -1
  47. data/vendor/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/sources/build/file.rb +1 -1
  48. data/vendor/avm-eac_asciidoctor_base0/lib/avm/eac_asciidoctor_base0/version.rb +1 -1
  49. data/vendor/eac_cli/eac_cli.gemspec +4 -1
  50. data/vendor/eac_cli/lib/eac_cli/default_runner.rb +1 -1
  51. data/vendor/eac_cli/lib/eac_cli/definition/help_formatter.rb +2 -2
  52. data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder.rb +1 -1
  53. data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder/alternative.rb +3 -3
  54. data/vendor/eac_cli/lib/eac_cli/docopt/runner_extension.rb +2 -2
  55. data/vendor/eac_cli/lib/eac_cli/docopt_runner.rb +43 -0
  56. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_class_methods.rb +16 -0
  57. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_doc.rb +23 -0
  58. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_settings.rb +17 -0
  59. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_subcommands.rb +152 -0
  60. data/vendor/eac_cli/lib/eac_cli/old_configs.rb +36 -0
  61. data/vendor/eac_cli/lib/eac_cli/old_configs/entry_reader.rb +80 -0
  62. data/vendor/eac_cli/lib/eac_cli/old_configs/password_entry_reader.rb +16 -0
  63. data/vendor/eac_cli/lib/eac_cli/old_configs/read_entry_options.rb +44 -0
  64. data/vendor/eac_cli/lib/eac_cli/old_configs/store_passwords_entry_reader.rb +25 -0
  65. data/vendor/eac_cli/lib/eac_cli/patches/module.rb +4 -0
  66. data/vendor/eac_cli/lib/eac_cli/patches/module/speaker.rb +10 -0
  67. data/vendor/eac_cli/lib/eac_cli/patches/object/runner_with.rb +1 -1
  68. data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands.rb +5 -1
  69. data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands/definition_concern.rb +10 -0
  70. data/vendor/eac_cli/lib/eac_cli/speaker.rb +131 -0
  71. data/vendor/eac_cli/lib/eac_cli/speaker/_class_methods.rb +37 -0
  72. data/vendor/eac_cli/lib/eac_cli/speaker/_constants.rb +12 -0
  73. data/vendor/eac_cli/lib/eac_cli/speaker/list.rb +61 -0
  74. data/vendor/eac_cli/lib/eac_cli/speaker/node.rb +24 -0
  75. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  76. data/vendor/eac_cli/spec/lib/eac_cli/docopt/runner_extension_spec.rb +1 -1
  77. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console → eac_cli/spec/lib/eac_cli}/docopt_runner_spec.rb +5 -5
  78. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console/configs_spec.rb → eac_cli/spec/lib/eac_cli/old_configs_spec.rb} +2 -2
  79. data/vendor/eac_cli/spec/lib/eac_cli/runner_spec.rb +1 -1
  80. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console → eac_cli/spec/lib/eac_cli}/speaker_spec.rb +2 -2
  81. data/vendor/eac_cli/spec/lib/module/speaker_spec.rb +13 -0
  82. data/vendor/eac_config/Gemfile +5 -0
  83. data/vendor/eac_config/eac_config.gemspec +19 -0
  84. data/vendor/eac_config/lib/eac_config.rb +7 -0
  85. data/vendor/eac_config/lib/eac_config/entry.rb +43 -0
  86. data/vendor/eac_config/lib/eac_config/entry_path.rb +41 -0
  87. data/vendor/eac_config/lib/eac_config/load_nodes_search.rb +39 -0
  88. data/vendor/eac_config/lib/eac_config/load_path.rb +36 -0
  89. data/vendor/eac_config/lib/eac_config/node.rb +53 -0
  90. data/vendor/eac_config/lib/eac_config/node_entry.rb +39 -0
  91. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils/configs.rb → eac_config/lib/eac_config/old_configs.rb} +5 -5
  92. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils/configs → eac_config/lib/eac_config/old_configs}/base.rb +5 -5
  93. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils/configs → eac_config/lib/eac_config/old_configs}/file.rb +4 -4
  94. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils → eac_config/lib/eac_config}/paths_hash.rb +8 -8
  95. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils → eac_config/lib/eac_config}/paths_hash/entry_key_error.rb +1 -1
  96. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils → eac_config/lib/eac_config}/paths_hash/node.rb +2 -2
  97. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils → eac_config/lib/eac_config}/paths_hash/path_search.rb +4 -4
  98. data/vendor/eac_config/lib/eac_config/version.rb +5 -0
  99. data/vendor/eac_config/lib/eac_config/yaml_file_node.rb +41 -0
  100. data/vendor/eac_config/spec/lib/eac_config/entry_path_spec.rb +30 -0
  101. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb → eac_config/spec/lib/eac_config/old_configs_spec.rb} +2 -2
  102. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils → eac_config/spec/lib/eac_config}/paths_hash_spec.rb +6 -6
  103. data/vendor/eac_config/spec/lib/eac_config/yaml_file_node_spec.rb +52 -0
  104. data/vendor/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1.yaml +4 -0
  105. data/vendor/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_1.yaml +2 -0
  106. data/vendor/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2.yaml +3 -0
  107. data/vendor/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2/storage1_2_1.yaml +2 -0
  108. data/vendor/eac_config/spec/rubocop_spec.rb +3 -0
  109. data/vendor/eac_config/spec/spec_helper.rb +17 -0
  110. data/vendor/eac_docker/eac_docker.gemspec +2 -1
  111. data/vendor/eac_docker/lib/eac_docker/images/templatized.rb +1 -0
  112. data/vendor/eac_docker/lib/eac_docker/version.rb +1 -1
  113. data/vendor/eac_docker/spec/lib/eac_docker/images/templatized_spec.rb +2 -1
  114. data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +1 -1
  115. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/jobs_runner.rb +2 -2
  116. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +2 -2
  117. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  118. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple.rb +1 -1
  119. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple/decorated_gem.rb +1 -1
  120. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/version.rb +1 -1
  121. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +0 -2
  122. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +10 -5
  123. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/common_concern.rb +0 -1
  124. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +1 -4
  125. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  126. data/vendor/eac_templates/Gemfile +5 -0
  127. data/vendor/eac_templates/eac_templates.gemspec +19 -0
  128. data/vendor/eac_templates/lib/eac_templates.rb +7 -0
  129. data/vendor/eac_templates/lib/eac_templates/directory.rb +108 -0
  130. data/vendor/eac_templates/lib/eac_templates/file.rb +48 -0
  131. data/vendor/eac_templates/lib/eac_templates/patches/module/template.rb +10 -0
  132. data/vendor/{eac_ruby_utils/lib/eac_ruby_utils → eac_templates/lib/eac_templates}/patches/object/template.rb +1 -1
  133. data/vendor/eac_templates/lib/eac_templates/searcher.rb +53 -0
  134. data/vendor/eac_templates/lib/eac_templates/variable_not_found_error.rb +5 -0
  135. data/vendor/eac_templates/lib/eac_templates/variable_providers.rb +23 -0
  136. data/vendor/eac_templates/lib/eac_templates/variable_providers/base.rb +21 -0
  137. data/vendor/eac_templates/lib/eac_templates/variable_providers/entries_reader.rb +23 -0
  138. data/vendor/eac_templates/lib/eac_templates/variable_providers/generic.rb +23 -0
  139. data/vendor/eac_templates/lib/eac_templates/variable_providers/hash.rb +27 -0
  140. data/vendor/eac_templates/lib/eac_templates/version.rb +5 -0
  141. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/file_spec.rb +4 -4
  142. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/file_spec_files/expected_content +0 -0
  143. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/file_spec_files/source.template +0 -0
  144. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/searcher_spec.rb +5 -5
  145. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/searcher_spec_files/path1/subdir1/file1.template +0 -0
  146. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/searcher_spec_files/path1/subdir1/file2 +0 -0
  147. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/templates → eac_templates/spec/lib/eac_templates}/searcher_spec_files/path2/subdir1/file3.template +0 -0
  148. data/vendor/eac_templates/spec/lib/object/template_spec.rb +23 -0
  149. data/vendor/eac_templates/spec/lib/object/template_spec_files/path/my_stub_with_template +1 -0
  150. data/vendor/eac_templates/spec/rubocop_spec.rb +3 -0
  151. data/vendor/eac_templates/spec/spec_helper.rb +102 -0
  152. metadata +90 -71
  153. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console.rb +0 -5
  154. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +0 -38
  155. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/entry_reader.rb +0 -81
  156. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +0 -18
  157. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/read_entry_options.rb +0 -46
  158. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +0 -27
  159. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner.rb +0 -45
  160. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +0 -18
  161. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +0 -25
  162. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +0 -19
  163. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +0 -154
  164. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker.rb +0 -133
  165. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_class_methods.rb +0 -39
  166. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_constants.rb +0 -14
  167. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb +0 -63
  168. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/node.rb +0 -26
  169. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/console_speaker.rb +0 -10
  170. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/template.rb +0 -10
  171. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates.rb +0 -9
  172. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/directory.rb +0 -110
  173. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/file.rb +0 -50
  174. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/searcher.rb +0 -55
  175. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_not_found_error.rb +0 -7
  176. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers.rb +0 -25
  177. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/base.rb +0 -23
  178. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/entries_reader.rb +0 -25
  179. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/generic.rb +0 -25
  180. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/hash.rb +0 -29
  181. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/console_speaker_spec.rb +0 -13
  182. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec.rb +0 -23
@@ -8,42 +8,46 @@ module Avm
8
8
  class Runner
9
9
  class Git
10
10
  class Issue
11
- runner_with :help do
11
+ runner_with :confirmation, :help do
12
12
  desc 'Closes a issue in a Git repository.'
13
13
  bool_opt '-f', '--uncomplete-unfail', 'Do not exit with error if issue is not' \
14
14
  ' completed or is invalid.'
15
15
  arg_opt '-s', '--skip-validations', 'Does not validate conditions on <validations>' \
16
16
  ' (Comma separated value).'
17
- bool_opt '-y', '--yes', 'Does not ask for user confirmation.'
18
17
  bool_opt '--complete', 'Run complete task.'
18
+ bool_opt '--deliver', 'Run "deliver" task.'
19
+ bool_opt '--validate', 'Validate for "complete" task.'
19
20
  end
20
21
 
21
22
  def run
22
- banner
23
- return unless validate
24
-
23
+ run_validate if parsed.validate?
24
+ run_deliver if parsed.deliver?
25
25
  run_complete if parsed.complete?
26
26
  success('Done!')
27
27
  end
28
28
 
29
- def banner
30
- complete.start_banner
29
+ def help_extra_text
30
+ "Validations:\n#{doc_validations_list}"
31
31
  end
32
32
 
33
- def validate
33
+ def run_validate
34
+ complete.start_banner
34
35
  return true if complete.valid?
35
36
 
36
37
  uncomplete_message('Some validation did not pass')
37
38
  end
38
39
 
39
40
  def run_complete
40
- return complete.run if confirm?
41
+ return complete.run if confirm?('Confirm issue completion?')
41
42
 
42
43
  uncomplete_message('Issue was not completed')
43
44
  end
44
45
 
45
- def doc
46
- DOC.gsub('%%VALIDATIONS%%', doc_validations_list)
46
+ def run_deliver
47
+ deliver.start_banner
48
+ return deliver.run if confirm?('Confirm issue delivery?')
49
+
50
+ uncomplete_message('Issue was not delivered')
47
51
  end
48
52
 
49
53
  private
@@ -52,8 +56,8 @@ module Avm
52
56
  ::Avm::Git::Issue::Complete.new(git_complete_issue_options)
53
57
  end
54
58
 
55
- def confirm?
56
- parsed.yes? || request_input('Confirm issue completion?', bool: true)
59
+ def deliver_uncached
60
+ ::Avm::Git::Issue::Deliver.new(runner_context.call(:git_repo))
57
61
  end
58
62
 
59
63
  def skip_validations
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.98.0'
5
+ VERSION = '0.99.0'
6
6
  end
7
7
  end
@@ -3,7 +3,7 @@
3
3
  require 'active_support/core_ext/hash/indifferent_access'
4
4
  require 'avm/launcher/context/instance_manager'
5
5
  require 'eac_ruby_utils/simple_cache'
6
- require 'eac_ruby_utils/console/speaker'
6
+ require 'eac_cli/speaker'
7
7
  require 'eac_launcher/context/instance_discovery'
8
8
  require 'eac_launcher/context/settings'
9
9
  require 'eac_launcher/paths/logical'
@@ -12,7 +12,7 @@ require 'eac_launcher/project'
12
12
  module EacLauncher
13
13
  class Context
14
14
  include ::EacRubyUtils::SimpleCache
15
- include ::EacRubyUtils::Console::Speaker
15
+ include ::EacCli::Speaker
16
16
 
17
17
  DEFAULT_PROJECTS_ROOT = '.'
18
18
  DEFAULT_SETTINGS_FILE = ::File.join(ENV['HOME'], '.config', 'eac_launcher', 'settings.yml')
@@ -9,7 +9,7 @@ module EacLauncher
9
9
  module Git
10
10
  class PublishBase < ::EacLauncher::Publish::Base
11
11
  include ::EacRubyUtils::SimpleCache
12
- include ::EacRubyUtils::Console::Speaker
12
+ include ::EacCli::Speaker
13
13
 
14
14
  CHECKERS = %w[remote_url remote_fetch publish_remote_no_exist remote_equal remote_following
15
15
  local_following].freeze
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tmpdir'
4
- require 'eac_ruby_utils/console/speaker'
4
+ require 'eac_cli/speaker'
5
5
  require 'eac_ruby_utils/envs'
6
6
  require 'eac_launcher/ruby/gem/specification'
7
7
 
@@ -9,7 +9,7 @@ module EacLauncher
9
9
  module Ruby
10
10
  module Gem
11
11
  class Build
12
- include ::EacRubyUtils::Console::Speaker
12
+ include ::EacCli::Speaker
13
13
 
14
14
  def initialize(original_gem_root)
15
15
  @original_gem_root = original_gem_root
@@ -10,7 +10,7 @@ module Avm
10
10
  common_concern do
11
11
  include ::ActiveSupport::Callbacks
12
12
 
13
- enable_console_speaker
13
+ enable_speaker
14
14
  enable_simple_cache
15
15
  enable_listable
16
16
  common_constructor :instance, :options, default: [{}] do
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/configs'
3
+ require 'eac_config/old_configs'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
  require 'yaml'
6
6
 
7
7
  module Avm
8
8
  module Apps
9
9
  module Sources
10
- class Configuration < ::EacRubyUtils::Configs
10
+ class Configuration < ::EacConfig::OldConfigs
11
11
  require_sub __FILE__
12
12
 
13
13
  FILENAMES = %w[.avm.yml .avm.yaml].freeze
@@ -6,7 +6,7 @@ require 'i18n'
6
6
  module Avm
7
7
  module Apps
8
8
  module Sources
9
- class Configuration < ::EacRubyUtils::Configs
9
+ class Configuration < ::EacConfig::OldConfigs
10
10
  LOCALE_KEY = :locale
11
11
 
12
12
  def locale
@@ -3,7 +3,7 @@
3
3
  module Avm
4
4
  module Apps
5
5
  module Sources
6
- class Configuration < ::EacRubyUtils::Configs
6
+ class Configuration < ::EacConfig::OldConfigs
7
7
  RUBOCOP_COMMAND_KEY = 'ruby.rubocop.command'
8
8
  RUBOCOP_GEMFILE_KEY = 'ruby.rubocop.gemfile'
9
9
 
@@ -5,7 +5,7 @@ require 'avm/patches/eac_ruby_gems_utils/gem'
5
5
  module Avm
6
6
  module Apps
7
7
  module Sources
8
- class Configuration < ::EacRubyUtils::Configs
8
+ class Configuration < ::EacConfig::OldConfigs
9
9
  BUNDLE_TEST_COMMAND_KEY = 'test.bundle_command'
10
10
  TEST_COMMAND_KEY = 'test.command'
11
11
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Apps
5
- VERSION = '0.2.0'
5
+ VERSION = '0.2.1'
6
6
  end
7
7
  end
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib}/**/*']
14
14
 
15
+ s.add_dependency 'asciidoctor', '~> 2.0', '>= 2.0.12'
15
16
  s.add_dependency 'eac_ruby_utils', '~> 0.63'
16
17
  s.add_dependency 'os'
17
18
  s.add_dependency 'rouge', '~> 3.26'
@@ -8,7 +8,7 @@ module Avm
8
8
  module Sources
9
9
  class Build
10
10
  require_sub __FILE__
11
- enable_console_speaker
11
+ enable_speaker
12
12
  enable_simple_cache
13
13
  enable_listable
14
14
  lists.add_symbol :option, :target_directory
@@ -7,7 +7,7 @@ module Avm
7
7
  module Sources
8
8
  class Build
9
9
  class File
10
- enable_console_speaker
10
+ enable_speaker
11
11
  common_constructor :build, :subpath
12
12
 
13
13
  def run
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacAsciidoctorBase0
5
- VERSION = '0.2.0'
5
+ VERSION = '0.2.1'
6
6
  end
7
7
  end
@@ -12,7 +12,10 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib}/**/*', 'Gemfile']
14
14
 
15
- s.add_dependency 'eac_ruby_utils', '~> 0.55'
15
+ s.add_dependency 'colorize', '~> 0.8.1'
16
+ s.add_dependency 'docopt', '~> 0.6.1'
17
+ s.add_dependency 'eac_config', '~> 0.3'
18
+ s.add_dependency 'eac_ruby_utils', '~> 0.64'
16
19
 
17
20
  s.add_development_dependency 'eac_ruby_gem_support', '~> 0.2'
18
21
  end
@@ -7,7 +7,7 @@ module EacCli
7
7
  module DefaultRunner
8
8
  common_concern do
9
9
  include ::EacCli::RunnerWith::Help
10
- enable_console_speaker
10
+ enable_speaker
11
11
  enable_simple_cache
12
12
  end
13
13
  end
@@ -27,7 +27,7 @@ module EacCli
27
27
 
28
28
  def positional_argument(positional)
29
29
  if positional.subcommand?
30
- ::EacRubyUtils::Console::DocoptRunner::SUBCOMMANDS_MACRO
30
+ ::EacCli::DocoptRunner::SUBCOMMANDS_MACRO
31
31
  else
32
32
  r = "<#{positional.name}>"
33
33
  r += '...' if positional.repeat?
@@ -52,7 +52,7 @@ module EacCli
52
52
  end
53
53
 
54
54
  def self_usage_arguments
55
- [::EacRubyUtils::Console::DocoptRunner::PROGRAM_MACRO] +
55
+ [::EacCli::DocoptRunner::PROGRAM_MACRO] +
56
56
  definition.options_argument.if_present([]) { |_v| ['[options]'] } +
57
57
  self_usage_arguments_options +
58
58
  self_usage_arguments_positional
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
- require 'eac_ruby_utils/console/docopt_runner'
4
+ require 'eac_cli/docopt_runner'
5
5
 
6
6
  module EacCli
7
7
  module Docopt
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
- require 'eac_ruby_utils/console/docopt_runner'
4
+ require 'eac_cli/docopt_runner'
5
5
 
6
6
  module EacCli
7
7
  module Docopt
@@ -11,7 +11,7 @@ module EacCli
11
11
 
12
12
  def to_s
13
13
  (
14
- [::EacRubyUtils::Console::DocoptRunner::PROGRAM_MACRO] +
14
+ [::EacCli::DocoptRunner::PROGRAM_MACRO] +
15
15
  alternative.options_argument?.if_present([]) { |_v| ['[options]'] } +
16
16
  options +
17
17
  positionals
@@ -36,7 +36,7 @@ module EacCli
36
36
 
37
37
  def positional(positional)
38
38
  if positional.subcommand?
39
- ::EacRubyUtils::Console::DocoptRunner::SUBCOMMANDS_MACRO
39
+ ::EacCli::DocoptRunner::SUBCOMMANDS_MACRO
40
40
  else
41
41
  r = "<#{positional.name}>"
42
42
  r += '...' if positional.repeat?
@@ -3,7 +3,7 @@
3
3
  require 'eac_cli/docopt/doc_builder'
4
4
  require 'eac_cli/docopt/runner_context_replacement'
5
5
  require 'eac_cli/runner'
6
- require 'eac_ruby_utils/console/docopt_runner'
6
+ require 'eac_cli/docopt_runner'
7
7
 
8
8
  module EacCli
9
9
  module Docopt
@@ -16,7 +16,7 @@ module EacCli
16
16
 
17
17
  class << self
18
18
  def check(klass)
19
- return unless klass < ::EacRubyUtils::Console::DocoptRunner
19
+ return unless klass < ::EacCli::DocoptRunner
20
20
 
21
21
  ::EacCli::Runner.alias_runner_class_methods(klass, '', 'eac_cli')
22
22
  ::EacCli::Runner.alias_runner_class_methods(klass, 'original', '')
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash/indifferent_access'
4
+ require 'active_support/core_ext/hash/slice'
5
+ 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
+
12
+ module EacCli
13
+ class DocoptRunner
14
+ include ::EacRubyUtils::Contextualizable
15
+
16
+ class << self
17
+ def create(settings = {})
18
+ new(settings)
19
+ end
20
+ end
21
+
22
+ attr_reader :settings
23
+
24
+ def initialize(settings = {})
25
+ @settings = settings.with_indifferent_access.freeze
26
+ check_subcommands
27
+ end
28
+
29
+ def options
30
+ @options ||= ::Docopt.docopt(target_doc, docopt_options)
31
+ end
32
+
33
+ def parent
34
+ settings[:parent]
35
+ end
36
+
37
+ protected
38
+
39
+ def docopt_options
40
+ settings.slice(:version, :argv, :help, :options_first).to_sym_keys_hash
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class DocoptRunner
5
+ DOCOPT_ERROR_EXIT_CODE = 0xC0
6
+
7
+ class << self
8
+ def run(options = {})
9
+ create(options).send(:run)
10
+ rescue Docopt::Exit => e
11
+ STDERR.write(e.message + "\n")
12
+ ::Kernel.exit(DOCOPT_ERROR_EXIT_CODE)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class DocoptRunner
5
+ PROGRAM_MACRO = '__PROGRAM__'
6
+
7
+ def source_doc
8
+ setting_value(:doc)
9
+ end
10
+
11
+ def target_doc
12
+ source_doc.gsub(PROGRAM_MACRO, target_program_name).strip + "\n"
13
+ end
14
+
15
+ def source_program_name
16
+ setting_value(:program_name, false)
17
+ end
18
+
19
+ def target_program_name
20
+ [source_program_name, ENV['PROGRAM_NAME'], $PROGRAM_NAME].find(&:present?)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/settings_provider'
4
+
5
+ module EacCli
6
+ class DocoptRunner
7
+ include ::EacRubyUtils::SettingsProvider
8
+
9
+ attr_reader :settings
10
+
11
+ private
12
+
13
+ def setting_value(key, required = true)
14
+ super(key, required: required, order: %w[method settings_object constant])
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/string/inflections'
4
+ require 'shellwords'
5
+
6
+ module EacCli
7
+ class DocoptRunner
8
+ SUBCOMMAND_ARG = '<subcommand>'
9
+ SUBCOMMAND_ARGS_ARG = '<subcommand-args>'
10
+ SUBCOMMANDS_MACRO = '__SUBCOMMANDS__'
11
+
12
+ def subcommands?
13
+ source_doc.include?(SUBCOMMANDS_MACRO)
14
+ end
15
+
16
+ def check_subcommands
17
+ return unless subcommands?
18
+
19
+ singleton_class.include(SubcommandsSupport)
20
+ check_subcommands_arg
21
+ return if singleton_class.method_defined?(:run)
22
+
23
+ singleton_class.send(:alias_method, :run, :run_with_subcommand)
24
+ end
25
+
26
+ module SubcommandsSupport
27
+ EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME = :extra_available_subcommands
28
+
29
+ def check_subcommands_arg
30
+ if subcommand_arg_as_list?
31
+ singleton_class.include(SubcommandsSupport::SubcommandArgAsList)
32
+ else
33
+ singleton_class.include(SubcommandsSupport::SubcommandArgAsArg)
34
+ end
35
+ end
36
+
37
+ def run_with_subcommand
38
+ if subcommand_name
39
+ check_valid_subcommand
40
+ subcommand_run
41
+ else
42
+ run_without_subcommand
43
+ end
44
+ end
45
+
46
+ def subcommand
47
+ @subcommand ||= subcommand_class_name(subcommand_name).constantize.create(
48
+ argv: subcommand_args,
49
+ program_name: subcommand_program,
50
+ parent: self
51
+ )
52
+ end
53
+
54
+ def subcommand_run
55
+ if !subcommand.is_a?(::EacCli::DocoptRunner) &&
56
+ subcommand.respond_to?(:run_run)
57
+ subcommand.run_run
58
+ else
59
+ subcommand.run
60
+ end
61
+ end
62
+
63
+ def target_doc
64
+ super.gsub(SUBCOMMANDS_MACRO,
65
+ "#{target_doc_subcommand_arg} [#{SUBCOMMAND_ARGS_ARG}...]") +
66
+ "\n" + subcommands_target_doc
67
+ end
68
+
69
+ def docopt_options
70
+ super.merge(options_first: true)
71
+ end
72
+
73
+ def subcommand_class_name(subcommand)
74
+ "#{self.class.name}::#{subcommand.underscore.camelize}"
75
+ end
76
+
77
+ def subcommand_arg_as_list?
78
+ setting_value(:subcommand_arg_as_list, false) || false
79
+ end
80
+
81
+ def subcommand_args
82
+ options.fetch(SUBCOMMAND_ARGS_ARG)
83
+ end
84
+
85
+ def subcommand_program
86
+ subcommand_name
87
+ end
88
+
89
+ def available_subcommands
90
+ r = ::Set.new(setting_value(:subcommands, false) || auto_available_subcommands)
91
+ if respond_to?(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME, true)
92
+ r += send(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME)
93
+ end
94
+ r.sort
95
+ end
96
+
97
+ def auto_available_subcommands
98
+ self.class.constants
99
+ .map { |name| self.class.const_get(name) }
100
+ .select { |c| c.instance_of? Class }
101
+ .select { |c| c < ::EacCli::DocoptRunner }
102
+ .map { |c| c.name.demodulize.underscore.dasherize }
103
+ end
104
+
105
+ def run_without_subcommand
106
+ "Method #{__method__} should be overrided in #{self.class.name}"
107
+ end
108
+
109
+ protected
110
+
111
+ def check_valid_subcommand
112
+ return if available_subcommands.include?(subcommand_name)
113
+
114
+ raise ::Docopt::Exit, "\"#{subcommand_name}\" is not a valid subcommand" \
115
+ " (Valid: #{available_subcommands.join(', ')})"
116
+ end
117
+
118
+ module SubcommandArgAsArg
119
+ def target_doc_subcommand_arg
120
+ SUBCOMMAND_ARG
121
+ end
122
+
123
+ def subcommand_name
124
+ options.fetch(SUBCOMMAND_ARG)
125
+ end
126
+
127
+ def subcommands_target_doc
128
+ available_subcommands.inject("Subcommands:\n") do |a, e|
129
+ a + " #{e}\n"
130
+ end
131
+ end
132
+ end
133
+
134
+ module SubcommandArgAsList
135
+ def target_doc_subcommand_arg
136
+ '(' + available_subcommands.join('|') + ')'
137
+ end
138
+
139
+ def subcommand_name
140
+ available_subcommands.each do |subcommand|
141
+ return subcommand if options.fetch(subcommand)
142
+ end
143
+ nil
144
+ end
145
+
146
+ def subcommands_target_doc
147
+ "\n"
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end