avm-tools 0.86.0 → 0.87.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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/git/file_auto_fixup.rb +22 -3
  3. data/lib/avm/tools/runner.rb +2 -4
  4. data/lib/avm/tools/runner/eac_rails_base0.rb +1 -1
  5. data/lib/avm/tools/runner/eac_rails_base0/apache_path.rb +1 -1
  6. data/lib/avm/tools/runner/eac_redmine_base0.rb +1 -1
  7. data/lib/avm/tools/runner/eac_redmine_base0/core_update.rb +1 -1
  8. data/lib/avm/tools/runner/eac_redmine_base0/docker.rb +1 -1
  9. data/lib/avm/tools/runner/eac_redmine_base0/project_rename.rb +1 -1
  10. data/lib/avm/tools/runner/eac_wordpress_base0.rb +1 -1
  11. data/lib/avm/tools/runner/eac_writings_base0.rb +1 -1
  12. data/lib/avm/tools/runner/eac_writings_base1.rb +1 -1
  13. data/lib/avm/tools/runner/files.rb +7 -15
  14. data/lib/avm/tools/runner/files/format.rb +18 -27
  15. data/lib/avm/tools/runner/files/rotate.rb +11 -21
  16. data/lib/avm/tools/runner/git.rb +10 -15
  17. data/lib/avm/tools/runner/git/auto_commit.rb +2 -2
  18. data/lib/avm/tools/runner/git/auto_fixup.rb +23 -16
  19. data/lib/avm/tools/runner/git/commit.rb +2 -2
  20. data/lib/avm/tools/runner/git/deploy.rb +18 -28
  21. data/lib/avm/tools/runner/git/dirty_files.rb +2 -2
  22. data/lib/avm/tools/runner/git/issue.rb +2 -2
  23. data/lib/avm/tools/runner/git/organize.rb +2 -2
  24. data/lib/avm/tools/runner/git/revisions_test.rb +2 -2
  25. data/lib/avm/tools/runner/git/subrepo.rb +2 -2
  26. data/lib/avm/tools/runner/git/subrepo/check.rb +2 -2
  27. data/lib/avm/tools/runner/git/subrepo/clone.rb +2 -2
  28. data/lib/avm/tools/runner/git/subrepo/fix.rb +4 -3
  29. data/lib/avm/tools/runner/instance.rb +1 -1
  30. data/lib/avm/tools/runner/instance/info.rb +1 -1
  31. data/lib/avm/tools/runner/launcher.rb +1 -1
  32. data/lib/avm/tools/runner/launcher/instances.rb +1 -1
  33. data/lib/avm/tools/runner/launcher/projects.rb +1 -1
  34. data/lib/avm/tools/runner/launcher/publish.rb +1 -1
  35. data/lib/avm/tools/runner/local_project.rb +5 -8
  36. data/lib/avm/tools/runner/local_project/eac_writings_base0.rb +2 -2
  37. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_chapters.rb +2 -2
  38. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_single.rb +2 -2
  39. data/lib/avm/tools/runner/local_project/eac_writings_base0/info.rb +2 -2
  40. data/lib/avm/tools/runner/local_project/eac_writings_base1.rb +2 -2
  41. data/lib/avm/tools/runner/local_project/eac_writings_base1/build.rb +2 -2
  42. data/lib/avm/tools/runner/local_project/info.rb +2 -2
  43. data/lib/avm/tools/runner/local_project/ruby.rb +2 -2
  44. data/lib/avm/tools/runner/local_project/ruby/bundler.rb +2 -2
  45. data/lib/avm/tools/runner/local_project/ruby/bundler/gemfile_lock.rb +2 -2
  46. data/lib/avm/tools/runner/local_project/test.rb +2 -2
  47. data/lib/avm/tools/runner/local_project/update.rb +2 -2
  48. data/lib/avm/tools/runner/local_project/version_bump.rb +10 -13
  49. data/lib/avm/tools/runner/ruby.rb +1 -1
  50. data/lib/avm/tools/runner/ruby/gems.rb +1 -1
  51. data/lib/avm/tools/runner/ruby/gems/generate.rb +1 -1
  52. data/lib/avm/tools/runner/ruby/rubocop.rb +1 -1
  53. data/lib/avm/tools/runner/self.rb +1 -1
  54. data/lib/avm/tools/runner/self/docker.rb +1 -1
  55. data/lib/avm/tools/version.rb +1 -1
  56. data/vendor/eac_cli/lib/eac_cli/docopt/runner_context_replacement.rb +15 -0
  57. data/vendor/eac_cli/lib/eac_cli/docopt/runner_extension.rb +5 -0
  58. data/vendor/eac_cli/lib/eac_cli/parser/alternative.rb +4 -4
  59. data/vendor/eac_cli/lib/eac_cli/parser/alternative/long_options.rb +37 -0
  60. data/vendor/eac_cli/lib/eac_cli/parser/alternative/option_argument.rb +29 -0
  61. data/vendor/eac_cli/lib/eac_cli/parser/alternative/options.rb +7 -36
  62. data/vendor/eac_cli/lib/eac_cli/parser/alternative/short_options.rb +45 -0
  63. data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands.rb +14 -2
  64. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  65. data/vendor/eac_cli/spec/lib/eac_cli/runner_spec.rb +22 -1
  66. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/application.rb +1 -0
  67. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +9 -6
  68. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner/test_all.rb +4 -9
  69. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  70. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb +0 -2
  71. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +4 -1
  72. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/template.rb +10 -0
  73. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/template.rb +1 -8
  74. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  75. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +8 -0
  76. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/inflector_spec.rb +2 -1
  77. metadata +7 -2
@@ -5,7 +5,7 @@ require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avm
7
7
  module Tools
8
- class Runner < ::EacRubyUtils::Console::DocoptRunner
8
+ class Runner
9
9
  class Ruby < ::EacRubyUtils::Console::DocoptRunner
10
10
  require_sub __FILE__
11
11
 
@@ -5,7 +5,7 @@ require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avm
7
7
  module Tools
8
- class Runner < ::EacRubyUtils::Console::DocoptRunner
8
+ class Runner
9
9
  class Ruby < ::EacRubyUtils::Console::DocoptRunner
10
10
  class Gems < ::EacRubyUtils::Console::DocoptRunner
11
11
  require_sub __FILE__
@@ -7,7 +7,7 @@ require 'eac_cli/default_runner'
7
7
 
8
8
  module Avm
9
9
  module Tools
10
- class Runner < ::EacRubyUtils::Console::DocoptRunner
10
+ class Runner
11
11
  class Ruby < ::EacRubyUtils::Console::DocoptRunner
12
12
  class Gems < ::EacRubyUtils::Console::DocoptRunner
13
13
  class Generate < ::EacRubyUtils::Console::DocoptRunner
@@ -6,7 +6,7 @@ require 'eac_ruby_utils/core_ext'
6
6
 
7
7
  module Avm
8
8
  module Tools
9
- class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ class Runner
10
10
  class Ruby < ::EacRubyUtils::Console::DocoptRunner
11
11
  class Rubocop < ::EacRubyUtils::Console::DocoptRunner
12
12
  include ::EacRubyUtils::Console::Speaker
@@ -6,7 +6,7 @@ require 'avm/self'
6
6
 
7
7
  module Avm
8
8
  module Tools
9
- class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ class Runner
10
10
  class Self < ::EacRubyUtils::Console::DocoptRunner
11
11
  ::EacRubyUtils.require_sub(__FILE__)
12
12
 
@@ -4,7 +4,7 @@ require 'avm/docker/runner'
4
4
 
5
5
  module Avm
6
6
  module Tools
7
- class Runner < ::EacRubyUtils::Console::DocoptRunner
7
+ class Runner
8
8
  class Self < ::EacRubyUtils::Console::DocoptRunner
9
9
  class Docker < ::Avm::Docker::Runner
10
10
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.86.0'
5
+ VERSION = '0.87.0'
6
6
  end
7
7
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ module Docopt
7
+ class RunnerContextReplacement
8
+ common_constructor :runner
9
+
10
+ def argv
11
+ runner.settings[:argv] || ARGV
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_cli/docopt/doc_builder'
4
+ require 'eac_cli/docopt/runner_context_replacement'
4
5
  require 'eac_cli/runner'
5
6
  require 'eac_ruby_utils/console/docopt_runner'
6
7
 
@@ -32,6 +33,10 @@ module EacCli
32
33
  def docopt_options
33
34
  super.merge(options_first: self.class.runner_definition.options_first?)
34
35
  end
36
+
37
+ def runner_context
38
+ @runner_context ||= ::EacCli::Docopt::RunnerContextReplacement.new(self)
39
+ end
35
40
  end
36
41
 
37
42
  def extra_available_subcommands
@@ -35,11 +35,11 @@ module EacCli
35
35
  attr_accessor :phase
36
36
 
37
37
  def any_collect_argv_value
38
- if argv_current_option?
39
- option_collect_argv_value
40
- else
41
- positional_collect_argv_value
38
+ %w[double_dash long_option short_option].each do |arg_type|
39
+ return send("#{arg_type}_collect_argv_value") if send("argv_current_#{arg_type}?")
42
40
  end
41
+
42
+ positional_collect_argv_value
43
43
  end
44
44
 
45
45
  def collector
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module LongOptions
7
+ LONG_OPTION_PREFIX = '--'
8
+ OPTION_WITH_ARGUMENT_PATTERN = /\A([^=]+)(?:=(.*))\z/.freeze
9
+
10
+ private
11
+
12
+ def argv_current_long_option?
13
+ phase == PHASE_ANY && argv_enum.peek.start_with?(LONG_OPTION_PREFIX) &&
14
+ !argv_current_double_dash?
15
+ end
16
+
17
+ def long_option_collect_argv_value
18
+ option_long, value = parse_option_current_argv
19
+ alternative.options.any? do |option|
20
+ next false unless option.long == option_long
21
+
22
+ if value.nil?
23
+ option_collect_option(option)
24
+ else
25
+ option_argument_collect(option, value)
26
+ end
27
+ end || raise_argv_current_invalid_option
28
+ end
29
+
30
+ def parse_option_current_argv
31
+ m = OPTION_WITH_ARGUMENT_PATTERN.match(argv_enum.peek)
32
+ m ? [m[1], m[2].if_present('')] : [argv_enum.peek, nil]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module OptionArgument
7
+ private
8
+
9
+ attr_accessor :argument_option
10
+
11
+ def argument_option_collect_argv(option)
12
+ self.argument_option = option
13
+ self.phase = PHASE_OPTION_ARGUMENT
14
+ end
15
+
16
+ def option_argument_collect(option, value)
17
+ collector.collect(option, value)
18
+ self.argument_option = nil
19
+ self.phase = PHASE_ANY
20
+ option
21
+ end
22
+
23
+ def option_argument_collect_argv_value
24
+ option_argument_collect(argument_option, argv_enum.peek)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -4,49 +4,20 @@ module EacCli
4
4
  class Parser
5
5
  class Alternative
6
6
  module Options
7
- DOUBLE_DASH = '--'
8
-
9
7
  private
10
8
 
11
- attr_accessor :argument_option, :double_dash
12
-
13
- def argument_option_collect_argv(option)
14
- self.argument_option = option
15
- self.phase = PHASE_OPTION_ARGUMENT
16
- end
17
-
18
- def argv_current_option?
19
- phase == PHASE_ANY && argv_enum.peek.start_with?('-')
20
- end
21
-
22
- def argv_current_double_dash?
23
- argv_enum.peek == DOUBLE_DASH && !double_dash
24
- end
25
-
26
9
  def boolean_option_collect_argv(option)
27
10
  collector.collect(option, true)
28
11
  end
29
12
 
30
- def option_argument_collect_argv_value
31
- collector.collect(argument_option, argv_enum.peek)
32
- self.argument_option = nil
33
- self.phase = PHASE_ANY
34
- end
35
-
36
- def option_collect_argv_value
37
- return double_dash_collect_argv_value if argv_current_double_dash?
38
-
39
- alternative.options.any? do |option|
40
- next false unless [option.short, option.long].include?(argv_enum.peek)
41
-
42
- if option.argument?
43
- argument_option_collect_argv(option)
44
- else
45
- boolean_option_collect_argv(option)
46
- end
13
+ def option_collect_option(option)
14
+ if option.argument?
15
+ argument_option_collect_argv(option)
16
+ else
17
+ boolean_option_collect_argv(option)
18
+ end
47
19
 
48
- true
49
- end || raise_argv_current_invalid_option
20
+ option
50
21
  end
51
22
 
52
23
  def raise_argv_current_invalid_option
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module ShortOptions
7
+ SHORT_OPTION_PREFIX = '-'
8
+
9
+ private
10
+
11
+ def argv_current_short_option?
12
+ phase == PHASE_ANY && argv_enum.peek.start_with?(SHORT_OPTION_PREFIX) &&
13
+ !argv_current_long_option?
14
+ end
15
+
16
+ def find_short_option(char)
17
+ alternative.options.find { |option| short_without_prefix(option.short) == char }
18
+ end
19
+
20
+ def short_option_collect_argv_value
21
+ last_option = nil
22
+ short_without_prefix(argv_enum.peek).each_char do |char|
23
+ raise_error "Option \"#{last_option}\" requires a argument not provided" if
24
+ last_option.present?
25
+
26
+ collected_option = short_option_collect_char(char)
27
+ last_option = collected_option if collected_option.argument?
28
+ end
29
+ end
30
+
31
+ # @return [EacCli::Definition::BaseOption] The option collected.
32
+ def short_option_collect_char(char)
33
+ option = find_short_option(char)
34
+ raise_error "Invalid short option \"#{char}\"" unless option
35
+
36
+ option_collect_option(option)
37
+ end
38
+
39
+ def short_without_prefix(short)
40
+ short.gsub(/\A#{::Regexp.quote(SHORT_OPTION_PREFIX)}/, '')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -6,6 +6,14 @@ require 'eac_ruby_utils/core_ext'
6
6
  module EacCli
7
7
  module RunnerWith
8
8
  module Subcommands
9
+ class << self
10
+ def runner?(object)
11
+ ::EacCli::Runner.runner?(object) || (
12
+ object.is_a?(::Class) && object < ::EacRubyUtils::Console::DocoptRunner
13
+ )
14
+ end
15
+ end
16
+
9
17
  common_concern do
10
18
  include ::EacCli::Runner
11
19
  end
@@ -19,7 +27,7 @@ module EacCli
19
27
  def available_subcommands_auto
20
28
  self.class.constants
21
29
  .map { |name| [name.to_s.underscore.gsub('_', '-'), self.class.const_get(name)] }
22
- .select { |c| ::EacCli::Runner.runner?(c[1]) }
30
+ .select { |c| ::EacCli::RunnerWith::Subcommands.runner?(c[1]) }
23
31
  .to_h.with_indifferent_access
24
32
  end
25
33
 
@@ -49,7 +57,11 @@ module EacCli
49
57
 
50
58
  def run_with_subcommand
51
59
  if subcommand_name
52
- subcommand_runner.run_run
60
+ if subcommand_runner.respond_to?(:run_run)
61
+ subcommand_runner.run_run
62
+ else
63
+ subcommand_runner.run
64
+ end
53
65
  else
54
66
  run_without_subcommand
55
67
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacCli
4
- VERSION = '0.12.4'
4
+ VERSION = '0.12.5'
5
5
  end
@@ -11,7 +11,7 @@ RSpec.describe ::EacCli::Runner do
11
11
 
12
12
  runner_definition do
13
13
  arg_opt '-o', '--opt1', 'A arg option.'
14
- bool_opt '-o', '--opt2', 'A boolean option'
14
+ bool_opt '-p', '--opt2', 'A boolean option'
15
15
  pos_arg :pos1
16
16
  pos_arg :pos2, repeat: true, optional: true
17
17
  alt do
@@ -40,6 +40,27 @@ RSpec.describe ::EacCli::Runner do
40
40
  it { expect(instance.parsed.pos2).to eq(%w[ccc ddd]) }
41
41
  end
42
42
 
43
+ context 'with long option and argument in same position' do
44
+ let(:argv) { %w[--opt1=aaa pos1] }
45
+
46
+ it { expect(instance.parsed.opt1).to eq('aaa') }
47
+ end
48
+
49
+ context 'with valid grouped short options' do
50
+ let(:argv) { %w[-po aaa pos1] }
51
+
52
+ it { expect(instance.parsed.opt1).to eq('aaa') }
53
+ it { expect(instance.parsed.opt2?).to eq(true) }
54
+ end
55
+
56
+ context 'with invalid grouped short options' do
57
+ let(:argv) { %w[-op aaa pos1] }
58
+
59
+ it do
60
+ expect { instance.parsed }.to raise_error(::EacCli::Parser::Error)
61
+ end
62
+ end
63
+
43
64
  context 'when only required args are supplied' do
44
65
  let(:argv) { %w[bbb] }
45
66
  let(:parsed_expected) { { opt1: nil, opt2: false, opt3: false, pos1: 'bbb', pos2: [] } }
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_gems_utils/gem'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
  require 'eac_ruby_utils/filesystem_cache'
5
6
 
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_cli/default_runner'
3
+ require 'eac_cli/runner_with/help'
4
+ require 'eac_cli/runner_with/subcommands'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
 
6
7
  module EacRubyBase0
7
8
  module Runner
8
9
  require_sub __FILE__
10
+ enable_console_speaker
9
11
  common_concern do
10
- include ::EacCli::DefaultRunner
12
+ include ::EacCli::RunnerWith::Help
13
+ include ::EacCli::RunnerWith::Subcommands
11
14
  runner_definition do
12
15
  bool_opt '-q', '--quiet', 'Quiet mode.'
13
16
  bool_opt '-I', '--no-input', 'Fail if a input is requested.'
@@ -20,9 +23,9 @@ module EacRubyBase0
20
23
 
21
24
  def run
22
25
  on_speaker_node do |node|
23
- node.stderr = ::StringIO.new if options.fetch('--quiet')
24
- node.stdin = FailIfRequestInput.new if options.fetch('--no-input')
25
- if options.fetch('--version')
26
+ node.stderr = ::StringIO.new if parsed.quiet?
27
+ node.stdin = FailIfRequestInput.new if parsed.no_input?
28
+ if parsed.version?
26
29
  show_version
27
30
  else
28
31
  run_with_subcommand
@@ -31,7 +34,7 @@ module EacRubyBase0
31
34
  end
32
35
 
33
36
  def application_version
34
- context(:application).version.to_s
37
+ runner_context.call(:application).version.to_s
35
38
  end
36
39
 
37
40
  def show_version
@@ -1,17 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_cli/default_runner'
4
- require 'eac_ruby_utils/console/docopt_runner'
5
- require 'eac_ruby_utils/core_ext'
3
+ require 'eac_cli/core_ext'
6
4
  require 'eac_ruby_gems_utils/tests/multiple'
7
5
 
8
6
  module EacRubyBase0
9
7
  module Runner
10
- class TestAll < ::EacRubyUtils::Console::DocoptRunner
11
- require_sub __FILE__
12
- include ::EacCli::DefaultRunner
13
-
14
- runner_definition do
8
+ class TestAll
9
+ runner_with :help do
15
10
  desc 'Test core and local gems.'
16
11
  end
17
12
 
@@ -20,7 +15,7 @@ module EacRubyBase0
20
15
  end
21
16
 
22
17
  def tests_uncached
23
- ::EacRubyGemsUtils::Tests::Multiple.new(context(:application).all_gems)
18
+ ::EacRubyGemsUtils::Tests::Multiple.new(runner_context.call(:application).all_gems)
24
19
  end
25
20
  end
26
21
  end