avm-tools 0.93.0 → 0.95.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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/eac_webapp_base0/instance.rb +5 -2
  3. data/lib/avm/eac_webapp_base0/instance/subcommand_parent.rb +24 -0
  4. data/lib/avm/eac_webapp_base0/runner/data.rb +1 -0
  5. data/lib/avm/eac_webapp_base0/runner/data/dump.rb +1 -1
  6. data/lib/avm/eac_webapp_base0/runner/data/load.rb +1 -1
  7. data/lib/avm/git/auto_commit/commit_info.rb +2 -1
  8. data/lib/avm/git/auto_commit/rules.rb +4 -4
  9. data/lib/avm/git/auto_commit/rules/new.rb +24 -0
  10. data/lib/avm/git/auto_commit/rules/nth.rb +8 -0
  11. data/lib/avm/git/auto_commit_path.rb +0 -21
  12. data/lib/avm/git/file_auto_fixup.rb +19 -3
  13. data/lib/avm/ruby/bundler.rb +11 -0
  14. data/lib/avm/ruby/bundler/incompatible_parser.rb +25 -0
  15. data/lib/avm/ruby/bundler/incompatible_parser/depends_on.rb +25 -0
  16. data/lib/avm/ruby/bundler/incompatible_parser/gem_conflict.rb +39 -0
  17. data/lib/avm/ruby/bundler/incompatible_parser/in_gemfile.rb +19 -0
  18. data/lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb +73 -0
  19. data/lib/avm/ruby/bundler/incompatible_parser/line_factory.rb +31 -0
  20. data/lib/avm/ruby/bundler/incompatible_parser/line_parser_base.rb +19 -0
  21. data/lib/avm/ruby/bundler/incompatible_parser/version_requirement.rb +26 -0
  22. data/lib/avm/ruby/gems/generator.rb +1 -5
  23. data/lib/avm/tools/runner/eac_redmine_base0/core_update.rb +7 -11
  24. data/lib/avm/tools/runner/git/auto_commit.rb +28 -28
  25. data/lib/avm/tools/runner/git/subrepo/fix.rb +1 -1
  26. data/lib/avm/tools/runner/local_project/ruby.rb +2 -6
  27. data/lib/avm/tools/runner/local_project/ruby/bundler.rb +3 -7
  28. data/lib/avm/tools/runner/local_project/ruby/bundler/gemfile_lock.rb +10 -13
  29. data/lib/avm/tools/runner/local_project/ruby/bundler/incompatible.rb +84 -0
  30. data/lib/avm/tools/version.rb +1 -1
  31. data/template/avm/ruby/gems/generator/static/spec/rubocop_spec.rb +1 -5
  32. data/template/avm/ruby/gems/generator/static/spec/spec_helper.rb +2 -0
  33. data/vendor/avm-apps/avm-apps.gemspec +1 -1
  34. data/vendor/avm-apps/lib/avm/apps/version.rb +1 -1
  35. data/vendor/avm-apps/spec/rubocop_spec.rb +1 -5
  36. data/vendor/avm-apps/spec/spec_helper.rb +3 -0
  37. data/vendor/eac_cli/eac_cli.gemspec +1 -1
  38. data/vendor/eac_cli/lib/eac_cli/core_ext.rb +2 -0
  39. data/vendor/eac_cli/lib/eac_cli/definition/base_option.rb +5 -1
  40. data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder.rb +3 -1
  41. data/vendor/eac_cli/lib/eac_cli/parser/alternative/short_options.rb +4 -2
  42. data/vendor/eac_cli/lib/eac_cli/patches/object/runner_with.rb +2 -1
  43. data/vendor/eac_cli/lib/eac_cli/runner/context.rb +2 -1
  44. data/vendor/eac_cli/lib/eac_cli/runner/instance_methods.rb +8 -1
  45. data/vendor/eac_cli/lib/eac_cli/runner_with_set.rb +50 -0
  46. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  47. data/vendor/eac_cli/spec/rubocop_spec.rb +1 -5
  48. data/vendor/eac_cli/spec/spec_helper.rb +3 -0
  49. data/vendor/eac_docker/eac_docker.gemspec +1 -1
  50. data/vendor/eac_docker/lib/eac_docker/version.rb +1 -1
  51. data/vendor/eac_docker/spec/rubocop_spec.rb +1 -5
  52. data/vendor/eac_docker/spec/spec_helper.rb +3 -0
  53. data/vendor/eac_git/eac_git.gemspec +2 -1
  54. data/vendor/eac_git/lib/eac_git/local.rb +4 -0
  55. data/vendor/eac_git/lib/eac_git/local/commit.rb +53 -0
  56. data/vendor/eac_git/lib/eac_git/local/commit/changed_file.rb +46 -0
  57. data/vendor/eac_git/lib/eac_git/local/commit/diff_tree_line.rb +32 -0
  58. data/vendor/eac_git/lib/eac_git/local/dirty_files.rb +2 -3
  59. data/vendor/eac_git/lib/eac_git/rspec.rb +6 -1
  60. data/{lib/avm/git/spec_helper.rb → vendor/eac_git/lib/eac_git/rspec/stubbed_git_local_repo.rb} +16 -13
  61. data/vendor/eac_git/lib/eac_git/version.rb +1 -1
  62. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec.rb +13 -0
  63. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/add.source.out +1 -0
  64. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/add.target.yaml +7 -0
  65. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/modify.source.out +1 -0
  66. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/modify.target.yaml +7 -0
  67. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/remove.source.out +1 -0
  68. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/remove.target.yaml +7 -0
  69. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename.source.out +2 -0
  70. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename.target.yaml +13 -0
  71. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename_modify.source.out +2 -0
  72. data/vendor/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename_modify.target.yaml +13 -0
  73. data/vendor/eac_git/spec/lib/eac_git/local/commit_spec.rb +58 -0
  74. data/vendor/eac_git/spec/rubocop_spec.rb +1 -5
  75. data/vendor/eac_git/spec/spec_helper.rb +3 -0
  76. data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +4 -4
  77. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/core_ext.rb +4 -0
  78. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/jobs_runner.rb +31 -0
  79. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches.rb +4 -0
  80. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/class.rb +4 -0
  81. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/class/jobs_runner.rb +10 -0
  82. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/object.rb +5 -0
  83. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/object/runner_with.rb +5 -0
  84. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with.rb +9 -0
  85. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/confirmation.rb +36 -0
  86. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/filesystem_traverser.rb +52 -0
  87. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/input.rb +36 -0
  88. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/output.rb +58 -0
  89. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  90. data/vendor/eac_ruby_base0/spec/lib/eac_ruby_base0/runner_with/confirmation_spec.rb +42 -0
  91. data/vendor/eac_ruby_base0/spec/lib/eac_ruby_base0/runner_with/output_spec.rb +81 -0
  92. data/vendor/eac_ruby_base0/spec/rubocop_spec.rb +1 -5
  93. data/vendor/eac_ruby_base0/spec/spec_helper.rb +3 -0
  94. data/vendor/eac_ruby_gems_utils/eac_ruby_gems_utils.gemspec +1 -1
  95. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/base.rb +7 -10
  96. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple.rb +9 -2
  97. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/version.rb +1 -1
  98. data/vendor/eac_ruby_gems_utils/spec/code/rubocop_check_spec.rb +1 -5
  99. data/vendor/eac_ruby_gems_utils/spec/spec_helper.rb +3 -0
  100. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +2 -1
  101. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_cache.rb +6 -0
  102. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/logs.rb +63 -0
  103. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +9 -1
  104. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +3 -2
  105. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/local_time_zone.rb +8 -2
  106. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class/settings_provider.rb +10 -0
  107. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel/nyi.rb +4 -2
  108. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_nil.rb +17 -0
  109. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  110. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/string/inflector.rb +4 -2
  111. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/required_zone.rb +11 -0
  112. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  113. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +10 -29
  114. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider/setting_value.rb +69 -0
  115. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +18 -5
  116. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  117. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +8 -0
  118. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +9 -0
  119. data/vendor/eac_ruby_utils/spec/rubocop_check_spec.rb +1 -5
  120. data/vendor/eac_ruby_utils/spec/spec_helper.rb +3 -0
  121. metadata +55 -15
  122. data/lib/avm/tools/runner/git/auto_fixup.rb +0 -53
  123. data/vendor/eac_cli/lib/eac_cli/runner_with/output_file.rb +0 -30
  124. data/vendor/eac_cli/spec/lib/eac_cli/runner_with/output_file_spec.rb +0 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff6d2b367a6cca1ba76094f9847bfc4155a3c9abe9665b582c572cb35567320b
4
- data.tar.gz: 3aea3baa7f0e41dc0566d2d4411e1cf4c78e852aae4787f33d002a274dd4f3b2
3
+ metadata.gz: 43ee05798fe159fe0fffa66e10aa7260aa8e29a7fe7f37786b29a89b051f600b
4
+ data.tar.gz: 86dbc1695a7dfe69cf4c33d2d5aae928a7cc05448305e41f4a23205636ea39ff
5
5
  SHA512:
6
- metadata.gz: 73222b5a84ab23aacbc5088f0c9a297babcae52fa5427ebcae52053c697250ac4aa8a3e91940a4f82dd5d5f5bf39f12fb730c1d9883ae44cccf606419a241117
7
- data.tar.gz: f76583694406760f366788cc4535095604adf4eaaf784350d425d3d820764c4a531a317fde4ddab56abd496b85895cf55dc9825046c3c4fa09059d66934d4992
6
+ metadata.gz: 52f50815a47e9373174a9f6b39e64d0f16cc5a6cf2a39f5bd540f1f90f3bbad6e3361607cdd7a37d225f746bb7f36717e99b344fbd35882f64013c33d56b5e51
7
+ data.tar.gz: dc15c004e0c6c67ebcaaa7b230c0210c5fbde1ca567a1b405fbea7148732b998f3919c74815be22ded25cd21cffbf4a3e0b6d82406a78e507dc89d6ff4fd41e8
@@ -9,6 +9,7 @@ require 'avm/eac_webapp_base0/deploy/file_unit'
9
9
  module Avm
10
10
  module EacWebappBase0
11
11
  class Instance < ::Avm::Instances::Base
12
+ require_sub __FILE__
12
13
  include ::Avm::Postgresql::InstanceWith
13
14
 
14
15
  FILES_UNITS = [].freeze
@@ -26,8 +27,10 @@ module Avm
26
27
  end
27
28
 
28
29
  def run_subcommand(subcommand_class, argv)
29
- parent = ::OpenStruct.new(instance: self)
30
- subcommand_class.new(argv: argv, parent: parent).run
30
+ subcommand_class.create(
31
+ argv: argv,
32
+ parent: ::Avm::EacWebappBase0::Instance::SubcommandParent.new(self)
33
+ ).run
31
34
  end
32
35
 
33
36
  def data_package
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacWebappBase0
7
+ class Instance < ::Avm::Instances::Base
8
+ class SubcommandParent
9
+ enable_simple_cache
10
+ common_constructor :instance
11
+
12
+ private
13
+
14
+ def runner_context_uncached
15
+ ::EacCli::Runner::Context.new(self, argv: runner_argv)
16
+ end
17
+
18
+ def runner_argv
19
+ [instance.class.name.split('::')[-2].dasherize, instance.id]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -9,6 +9,7 @@ module Avm
9
9
  require_sub __FILE__
10
10
  runner_with :help, :subcommands do
11
11
  desc 'Data utilities for EacRailsBase0 instances.'
12
+ subcommands
12
13
  end
13
14
  end
14
15
  end
@@ -15,7 +15,7 @@ module Avm
15
15
 
16
16
  runner_with :help do
17
17
  desc 'Dump utility for EacRailsBase instance.'
18
- bool_opt '-w', 'rewrite', 'Forces dump overwrite.'
18
+ bool_opt '-w', '--rewrite', 'Forces dump overwrite.'
19
19
  arg_opt '-p', '--dump-path', 'Set DUMP_PATH variable.'
20
20
  end
21
21
 
@@ -9,7 +9,7 @@ module Avm
9
9
  class Runner < ::Avm::Instances::Runner
10
10
  class Data
11
11
  class Load
12
- runner_with :ĥelp do
12
+ runner_with :help do
13
13
  desc 'Load utility for EacRailsBase instance.'
14
14
  arg_opt '-S', '--source-instance', 'Informa a instância a ser extraída o dump.'
15
15
  pos_arg :dump_path, optional: true
@@ -8,10 +8,11 @@ module Avm
8
8
  class CommitInfo
9
9
  enable_immutable
10
10
 
11
- immutable_accessor :fixup
11
+ immutable_accessor :fixup, :message
12
12
 
13
13
  def git_commit_args
14
14
  r = fixup.if_present([]) { |v| ['--fixup', v.sha1] }
15
+ r += message.if_present([]) { |v| ['--message', v] }
15
16
  return r if r.any?
16
17
 
17
18
  raise 'Argument list is empty'
@@ -2,13 +2,13 @@
2
2
 
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
+ ::EacRubyUtils.require_sub __FILE__
6
+
5
7
  module Avm
6
8
  module Git
7
9
  module AutoCommit
8
10
  module Rules
9
- require_sub __FILE__
10
-
11
- RULES_CLASSES = %w[last manual nth unique]
11
+ RULES_CLASSES = %w[last manual new nth unique]
12
12
  .map { |key| ::Avm::Git::AutoCommit::Rules.const_get(key.camelcase) }
13
13
 
14
14
  class << self
@@ -22,7 +22,7 @@ module Avm
22
22
  def rule_class_by_key(key)
23
23
  RULES_CLASSES.find { |klass| klass.keys.include?(key) } ||
24
24
  raise("Rule not find with key \"#{key}\" (Available: " +
25
- RULES_CLASSES.flat_map(&:keys) + ')')
25
+ RULES_CLASSES.flat_map(&:keys).join(', ') + ')')
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/git/auto_commit/rules/base'
4
+ require 'avm/git/auto_commit_path'
5
+
6
+ module Avm
7
+ module Git
8
+ module AutoCommit
9
+ module Rules
10
+ class New < ::Avm::Git::AutoCommit::Rules::Base
11
+ class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
12
+ def auto_commit_path
13
+ ::Avm::Git::AutoCommitPath.new(file.git, file.path)
14
+ end
15
+
16
+ def commit_info
17
+ new_commit_info.message(auto_commit_path.commit_message)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -7,6 +7,14 @@ module Avm
7
7
  module AutoCommit
8
8
  module Rules
9
9
  class Nth < ::Avm::Git::AutoCommit::Rules::Base
10
+ SHORT_KEY = 't'
11
+
12
+ class << self
13
+ def short_key
14
+ SHORT_KEY
15
+ end
16
+ end
17
+
10
18
  common_constructor :number do
11
19
  self.number = number.to_i
12
20
  end
@@ -6,31 +6,10 @@ module Avm
6
6
  module Git
7
7
  class AutoCommitPath
8
8
  require_sub __FILE__, include_modules: true
9
- enable_console_speaker
10
9
  common_constructor :git, :path do
11
10
  self.path = path.to_pathname
12
11
  end
13
12
 
14
- CLASS_NAME_PATTERNS = [%r{lib/((?!.*/lib/).+)\.rb\z}, %r{app/[^/]+/(.+)\.rb\z}].freeze
15
-
16
- def run
17
- banner
18
- commit
19
- end
20
-
21
- def banner
22
- infom "Checking \"#{relative_path}\""
23
- infov ' * Class name', class_name
24
- infov ' * Commit message', commit_message
25
- end
26
-
27
- def commit
28
- infom ' * Commiting...'
29
- git.system!('reset', 'HEAD')
30
- git.system!('add', '--', relative_path.to_path)
31
- git.system!('commit', '-m', commit_message, '--', relative_path.to_path)
32
- end
33
-
34
13
  def class_name
35
14
  ruby_class_name || relative_path.to_path
36
15
  end
@@ -10,10 +10,16 @@ module Avm
10
10
  enable_simple_cache
11
11
  enable_listable
12
12
 
13
- common_constructor :git, :path, :rules
13
+ common_constructor :git, :path, :rules do
14
+ self.path = path.to_pathname.expand_path(git.root_path)
15
+ end
14
16
 
15
17
  COMMITS_SEARCH_INTERVAL = 'origin/master..HEAD'
16
18
 
19
+ def git_relative_path
20
+ path.to_pathname.relative_path_from(git.root_path)
21
+ end
22
+
17
23
  def run
18
24
  start_banner
19
25
  run_commit || warn("No rule returned commit information for \"#{path}\"")
@@ -22,7 +28,7 @@ module Avm
22
28
  private
23
29
 
24
30
  def commit_args
25
- commit_info.if_present([], &:git_commit_args) + ['--', path]
31
+ commit_info.if_present([], &:git_commit_args) + ['--', git_relative_path]
26
32
  end
27
33
 
28
34
  def commit_info_uncached
@@ -38,11 +44,21 @@ module Avm
38
44
  return false if commit_info.blank?
39
45
 
40
46
  infov ' Commit arguments', ::Shellwords.join(commit_args)
41
- git.execute!('commit', *commit_args)
47
+ run_git_add_and_commit
42
48
  success ' Commited'
43
49
  true
44
50
  end
45
51
 
52
+ def run_git_add_and_commit
53
+ git.execute!('reset', '--soft', 'HEAD')
54
+ if path.exist?
55
+ git.execute!('add', git_relative_path)
56
+ else
57
+ git.execute!('rm', '-f', git_relative_path)
58
+ end
59
+ git.execute!('commit', *commit_args)
60
+ end
61
+
46
62
  def commits_uncached
47
63
  git.execute!('log', '--pretty=format:%H', COMMITS_SEARCH_INTERVAL, '--', path)
48
64
  .each_line.map { |sha1| ::Avm::Git::Commit.new(git, sha1.strip) }
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Ruby
7
+ module Bundler
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Ruby
7
+ module Bundler
8
+ class IncompatibleParser
9
+ require_sub __FILE__
10
+
11
+ enable_simple_cache
12
+ attr_reader :gems_in_conflict
13
+
14
+ def initialize(path)
15
+ @gems_in_conflict = ::Avm::Ruby::Bundler::IncompatibleParser::LineBuffer
16
+ .from_file(path).gems_in_conflict.freeze
17
+ end
18
+
19
+ def data
20
+ gems_in_conflict.map(&:data)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/ruby/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module Ruby
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class DependsOn < ::Avm::Ruby::Bundler::IncompatibleParser::LineParserBase
11
+ LINE_PARSER = /(.+) was resolved to (.+), which depends on/
12
+ .to_parser { |m| new(m[1], m[2]) }
13
+
14
+ common_constructor :gem_name, :version do
15
+ self.version = ::Gem::Version.new(version)
16
+ end
17
+
18
+ def data
19
+ { gem_name: gem_name, version: version }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/ruby/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module Ruby
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class GemConflict < ::Avm::Ruby::Bundler::IncompatibleParser::LineParserBase
11
+ LINE_PARSER = /Bundler could not find compatible versions for gem "(.+)":/
12
+ .to_parser { |m| new(m[1]) }
13
+
14
+ enable_simple_cache
15
+ common_constructor :gem_name
16
+
17
+ def add_depends_on(depends_on)
18
+ @depends_on_stack ||= []
19
+ @depends_on_stack << depends_on
20
+ end
21
+
22
+ def add_version_requirement(version_requirement)
23
+ version_requirement.stack = @depends_on_stack
24
+ versions_requirements << version_requirement
25
+ @depends_on_stack = nil
26
+ end
27
+
28
+ def data
29
+ { gem_name: gem_name, versions_requirements: versions_requirements.map(&:data) }
30
+ end
31
+
32
+ def versions_requirements
33
+ @versions_requirements ||= []
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/ruby/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module Ruby
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class InGemfile < ::Avm::Ruby::Bundler::IncompatibleParser::LineParserBase
11
+ LINE_PARSER = /In Gemfile:/
12
+ .to_parser { |_m| new }
13
+
14
+ common_constructor
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/ruby/bundler/incompatible_parser/gem_conflict'
5
+ require 'avm/ruby/bundler/incompatible_parser/line_factory'
6
+
7
+ module Avm
8
+ module Ruby
9
+ module Bundler
10
+ class IncompatibleParser
11
+ class LineBuffer
12
+ class << self
13
+ def from_file(path)
14
+ new(::File.read(path.to_s))
15
+ end
16
+ end
17
+
18
+ attr_reader :gems_in_conflict
19
+
20
+ def initialize(content)
21
+ self.gems_in_conflict = []
22
+ self.parsing_required = false
23
+ content.each_line { |string_line| add_line(LineFactory.new(string_line)) }
24
+ end
25
+
26
+ private
27
+
28
+ attr_accessor :parsing_required
29
+ attr_writer :gems_in_conflict
30
+
31
+ def add_line(line)
32
+ return if line.blank?
33
+
34
+ return if LineFactory::TYPES.any? do |type|
35
+ next false unless line.result.is_a?(type)
36
+
37
+ send("on_#{type.name.demodulize.underscore.variableize}_line", line.result)
38
+ true
39
+ end
40
+
41
+ return unless parsing_required
42
+
43
+ raise(::ArgumentError, "Unparsed line: \"#{line.content}\"")
44
+ end
45
+
46
+ def on_gem_conflict_line(result)
47
+ self.parsing_required = true
48
+ gems_in_conflict << result
49
+ end
50
+
51
+ def on_in_gemfile_line(result)
52
+ # Do nothing
53
+ end
54
+
55
+ def on_depends_on_line(result)
56
+ current_gem_conflict.add_depends_on(result)
57
+ end
58
+
59
+ def on_version_requirement_line(result)
60
+ current_gem_conflict.add_version_requirement(result)
61
+ end
62
+
63
+ def current_gem_conflict
64
+ raise 'No gems in conflict' if gems_in_conflict.none?
65
+ raise 'Last gem is blank' if gems_in_conflict.last.blank?
66
+
67
+ gems_in_conflict.last
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end