avm-eac_ruby_base1 0.6.0 → 0.8.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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/depends_on.rb +25 -0
  3. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/gem_conflict.rb +44 -0
  4. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/in_gemfile.rb +17 -0
  5. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_buffer.rb +73 -0
  6. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_factory.rb +31 -0
  7. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base.rb +19 -0
  8. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser/version_requirement.rb +26 -0
  9. data/lib/avm/eac_ruby_base1/bundler/incompatible_parser.rb +25 -0
  10. data/lib/avm/eac_ruby_base1/rubocop/gemfile.rb +4 -4
  11. data/lib/avm/eac_ruby_base1/rubygems/version_file.rb +43 -0
  12. data/lib/avm/eac_ruby_base1/rubygems.rb +11 -0
  13. data/lib/avm/eac_ruby_base1/sources/base/bundle_command.rb +39 -0
  14. data/lib/avm/eac_ruby_base1/sources/base/bundler.rb +53 -0
  15. data/lib/avm/eac_ruby_base1/sources/base/rake.rb +28 -0
  16. data/lib/avm/eac_ruby_base1/sources/base/rubygems.rb +43 -0
  17. data/lib/avm/eac_ruby_base1/sources/base/version_bump.rb +2 -2
  18. data/lib/avm/eac_ruby_base1/sources/base.rb +24 -11
  19. data/lib/avm/eac_ruby_base1/sources/runners/bundler/incompatible.rb +76 -0
  20. data/lib/avm/eac_ruby_base1/sources/runners/bundler.rb +19 -0
  21. data/lib/avm/eac_ruby_base1/sources/runners.rb +13 -0
  22. data/lib/avm/eac_ruby_base1/sources/tester.rb +7 -9
  23. data/lib/avm/eac_ruby_base1/sources/tests/base.rb +59 -0
  24. data/lib/avm/eac_ruby_base1/sources/tests/minitest.rb +29 -0
  25. data/lib/avm/eac_ruby_base1/sources/tests/multiple/decorated_gem.rb +52 -0
  26. data/lib/avm/eac_ruby_base1/sources/tests/multiple/result.rb +29 -0
  27. data/lib/avm/eac_ruby_base1/sources/tests/multiple.rb +90 -0
  28. data/lib/avm/eac_ruby_base1/sources/tests/rspec.rb +25 -0
  29. data/lib/avm/eac_ruby_base1/sources/tests.rb +13 -0
  30. data/lib/avm/eac_ruby_base1/sources/update/sub_update.rb +4 -1
  31. data/lib/avm/eac_ruby_base1/sources/update.rb +2 -6
  32. data/lib/avm/eac_ruby_base1/version.rb +1 -1
  33. data/locale/{en.yaml → en.yml} +0 -0
  34. data/locale/{pt-BR.yaml → pt-BR.yml} +0 -0
  35. metadata +43 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae50465c6257b0c96caed1eeadc4d7879294952f52a3e8b4fc0cbfb3dbc9408b
4
- data.tar.gz: 1d76ec909ab0216c8f5759eae08d3ea4e1ea49fe6cd708bb5796fd0b97768179
3
+ metadata.gz: 223dec7a0d27cbeaf67bec41ef954eac18910558dd8f486b32fc4ec222ed55c2
4
+ data.tar.gz: a5db9261c9655be977e05d6c79efce6433433495d6d90d5c276a99d1adb031ab
5
5
  SHA512:
6
- metadata.gz: 81dba51b5ab1af1c389933de54316315c7af93a2b473a977a9f9f2b1c9522aeb6cbbf7ad6214b3873e0137c5534f0760e20a23d3a854abd19a376e332ab1805d
7
- data.tar.gz: 0d3fea5b073cf33e07c76427d76112754832bd3c89cb1328e71bb8f09502cbdcffbf40f313fe5dadd13fd24a60c0f32bfe2897e52d6c016a302d927ed0ff2c8b
6
+ metadata.gz: b51af1af7eeab59c22a42e7d2596c47e30f6ae08519774fead23543519a4f8aa170f27f0f9bbd8845f858e55f6b92f6264685c57abd584cabef82787dde6528e
7
+ data.tar.gz: 1f0fe91f0a19f5caf0dd7b9c9cba4f27633cd8abcd64a40dcff9ddcb6c32718442a88eb7b00207ebb18af085bf2915a7bf596f5706459b08b5d2daa668bc0a89
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class DependsOn < ::Avm::EacRubyBase1::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,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class GemConflict < ::Avm::EacRubyBase1::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 << depends_on
19
+ end
20
+
21
+ def add_version_requirement(version_requirement)
22
+ version_requirement.stack = depends_on_stack
23
+ versions_requirements << version_requirement
24
+ @depends_on_stack = nil
25
+ end
26
+
27
+ def data
28
+ { gem_name: gem_name, versions_requirements: versions_requirements.map(&:data) }
29
+ end
30
+
31
+ def versions_requirements
32
+ @versions_requirements ||= []
33
+ end
34
+
35
+ private
36
+
37
+ def depends_on_stack
38
+ @depends_on_stack ||= []
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class InGemfile < ::Avm::EacRubyBase1::Bundler::IncompatibleParser::LineParserBase
11
+ LINE_PARSER = /In Gemfile:/
12
+ .to_parser { |_m| new }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/gem_conflict'
5
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/line_factory'
6
+
7
+ module Avm
8
+ module EacRubyBase1
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
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/depends_on'
5
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/gem_conflict'
6
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/in_gemfile'
7
+
8
+ module Avm
9
+ module EacRubyBase1
10
+ module Bundler
11
+ class IncompatibleParser
12
+ class LineFactory
13
+ TYPES = [GemConflict, InGemfile, DependsOn, VersionRequirement].freeze
14
+
15
+ enable_simple_cache
16
+ common_constructor :content do
17
+ self.content = content.strip
18
+ end
19
+
20
+ delegate :blank?, to: :content
21
+
22
+ private
23
+
24
+ def result_uncached
25
+ TYPES.lazy.map { |type| type.parse(content) }.find(&:present?)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Bundler
8
+ class IncompatibleParser
9
+ class LineParserBase
10
+ class << self
11
+ def parse(line_content)
12
+ const_get('LINE_PARSER').parse(line_content)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Bundler
9
+ class IncompatibleParser
10
+ class VersionRequirement < ::Avm::EacRubyBase1::Bundler::IncompatibleParser::LineParserBase
11
+ LINE_PARSER = /\A([a-z][a-z\-_0-9]*)(?: \((.+)\))?\z/
12
+ .to_parser { |m| new(m[1], m[2]) }
13
+
14
+ enable_simple_cache
15
+ attr_accessor :stack
16
+
17
+ common_constructor :gem_name, :requirements_source
18
+
19
+ def data
20
+ { requirements_source: requirements_source, stack: stack.map(&:data) }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
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::EacRubyBase1::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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/patches/eac_ruby_gems_utils/gem'
3
+ require 'avm/eac_ruby_base1/sources/base'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avm
@@ -10,11 +10,11 @@ module Avm
10
10
  def gemfile_rubocop_command
11
11
  return nil unless rubocop_gemfile?
12
12
 
13
- rubocop_command_by_gemfile_path(mygem.root)
13
+ rubocop_command_by_gemfile_path(mygem.path)
14
14
  end
15
15
 
16
16
  def rubocop_command_by_gemfile_path(path)
17
- ::EacRubyGemsUtils::Gem.new(path).bundle('exec', 'rubocop').chdir_root
17
+ ::Avm::EacRubyBase1::Sources::Base.new(path).bundle('exec', 'rubocop').chdir_root
18
18
  end
19
19
 
20
20
  def rubocop_gemfile?
@@ -31,7 +31,7 @@ module Avm
31
31
  end
32
32
 
33
33
  def find_gem(path)
34
- r = ::EacRubyGemsUtils::Gem.new(path)
34
+ r = ::Avm::EacRubyBase1::Sources::Base.new(path)
35
35
  return r if r.gemfile_path.exist?
36
36
  return find_gem(path.dirname) unless path.root?
37
37
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Rubygems
8
+ class VersionFile
9
+ common_constructor :path
10
+
11
+ VERSION_LINE_PATTERN = /\A(\s*)VERSION\s*=\s*[\'\"]([^\'\"]+)[\'\"](\s*)\z/.freeze
12
+
13
+ def value
14
+ path.read.each_line.lazy.map { |line| line_value(line) }.find { |v| v }
15
+ end
16
+
17
+ def value=(new_value)
18
+ path.write(new_value_content(new_value))
19
+ end
20
+
21
+ private
22
+
23
+ # @return Version found in line, nil otherwise.
24
+ def line_value(line)
25
+ VERSION_LINE_PATTERN.if_match(line.rstrip, false) { |m| ::Gem::Version.new(m[2]) }
26
+ end
27
+
28
+ def new_value_content(new_value)
29
+ path.read.each_line
30
+ .map { |line| new_value_line(line, new_value) }
31
+ .join
32
+ end
33
+
34
+ def new_value_line(line, new_value)
35
+ m = VERSION_LINE_PATTERN.match(line)
36
+ return line unless m
37
+
38
+ "#{m[1]}VERSION = '#{new_value}'#{m[3]}"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Rubygems
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/ruby/command'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module Sources
10
+ class Base < ::Avm::EacGenericBase0::Sources::Base
11
+ class BundleCommand < ::EacRubyUtils::Ruby::Command
12
+ GEMFILE_PATH_ENVVAR = 'BUNDLE_GEMFILE'
13
+
14
+ attr_reader :source
15
+
16
+ def initialize(source, command_args, extra_options = {})
17
+ @source = source
18
+ super(command_args, extra_options.merge(host_env: source.env))
19
+ end
20
+
21
+ # Changes current directory to the source's directory.
22
+ def chdir_root
23
+ chdir(source.path)
24
+ end
25
+
26
+ def envvar_gemfile
27
+ envvar(GEMFILE_PATH_ENVVAR, source.gemfile_path.to_path)
28
+ end
29
+
30
+ protected
31
+
32
+ def duplicate(command, extra_options)
33
+ self.class.new(source, command, extra_options)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'avm/eac_ruby_base1/sources/base/bundle_command'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module Sources
10
+ class Base < ::Avm::EacGenericBase0::Sources::Base
11
+ module Bundler
12
+ CONFIGURED_GEMFILE_PATH_ENTRY_KEY = 'ruby.gemfile_path'
13
+ DEFAULT_GEMFILE_PATH = 'Gemfile'
14
+
15
+ # @return [Avm::EacRubyBase1::Sources::Base::BundleCommand]
16
+ def bundle(*args)
17
+ ::Avm::EacRubyBase1::Sources::Base::BundleCommand.new(self, %w[bundle] + args)
18
+ .envvar_gemfile
19
+ end
20
+
21
+ # @return [String]
22
+ def configured_gemfile_path
23
+ configuration.entry(CONFIGURED_GEMFILE_PATH_ENTRY_KEY).value
24
+ end
25
+
26
+ # @return [String]
27
+ def default_gemfile_path
28
+ DEFAULT_GEMFILE_PATH
29
+ end
30
+
31
+ # @return [Bundler::LockfileParser]
32
+ def gemfile_lock_content
33
+ ::Bundler::LockfileParser.new(::Bundler.read_file(gemfile_lock_path))
34
+ end
35
+
36
+ def gemfile_lock_gem_version(gem_name)
37
+ gemfile_lock_content.specs.find { |gem| gem.name == gem_name }.if_present(&:version)
38
+ end
39
+
40
+ # @return [Pathname]
41
+ def gemfile_lock_path
42
+ gemfile_path.basename_sub { |b| "#{b}.lock" }
43
+ end
44
+
45
+ # @return [Pathname]
46
+ def gemfile_path
47
+ path.join(configured_gemfile_path || default_gemfile_path)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Sources
9
+ class Base < ::Avm::EacGenericBase0::Sources::Base
10
+ module Rake
11
+ RAKEFILE_BASENAME = 'Rakefile'
12
+
13
+ # @return [Avm::EacRubyBase1::Sources::Base::BundleCommand]
14
+ def rake(*args)
15
+ raise "File \"#{rakefile_path}\" does not exist" unless rakefile_path.exist?
16
+
17
+ bundle('exec', 'rake', '--rakefile', rakefile_path, *args)
18
+ end
19
+
20
+ # @return [Pathname]
21
+ def rakefile_path
22
+ path.join(RAKEFILE_BASENAME)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Sources
9
+ class Base < ::Avm::EacGenericBase0::Sources::Base
10
+ module Rubygems
11
+ GEMSPEC_EXTNAME = '.gemspec'
12
+
13
+ def gem_name
14
+ gem_name_by_gemspec || gem_name_by_path
15
+ end
16
+
17
+ def gem_name_by_gemspec
18
+ gemspec_path.if_present { |v| v.basename(GEMSPEC_EXTNAME).to_path }
19
+ end
20
+
21
+ def gem_name_by_path
22
+ fullname = path.basename.to_s
23
+ /\A(.+)(?:-\d+(?:\.\d+)*)\z/.if_match(fullname, false) { |m| m[1] }.if_present(fullname)
24
+ end
25
+
26
+ def gem_namespace_parts
27
+ gem_name.split('-')
28
+ end
29
+
30
+ # @return [Gem::Specification]
31
+ def gemspec
32
+ ::Gem::Specification.load(gemspec_path.to_path)
33
+ end
34
+
35
+ # @return [Pathname]
36
+ def gemspec_path
37
+ path.glob("*#{GEMSPEC_EXTNAME}").first
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -9,12 +9,12 @@ module Avm
9
9
  class Base < ::Avm::EacGenericBase0::Sources::Base
10
10
  module VersionBump
11
11
  def after_sub_version_bump_do_changes
12
- the_gem.bundle('install').chdir_root.execute!
12
+ bundle('install').chdir_root.execute!
13
13
  end
14
14
 
15
15
  def version_bump_do_changes(target_version)
16
16
  self.version = target_version
17
- the_gem.bundle('install').chdir_root.execute!
17
+ bundle('install').chdir_root.execute!
18
18
  end
19
19
  end
20
20
  end
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avm/eac_generic_base0/sources/base'
4
+ require 'avm/eac_ruby_base1/rubygems/version_file'
4
5
  require 'avm/eac_ruby_base1/sources/update'
5
6
  require 'avm/eac_ruby_base1/sources/tester'
7
+ require 'avm/eac_ruby_base1/sources/runners/bundler'
6
8
  require 'avm/version_number'
7
- require 'eac_ruby_gems_utils/gem'
8
9
  require 'eac_ruby_utils/core_ext'
9
10
 
10
11
  module Avm
@@ -12,10 +13,18 @@ module Avm
12
13
  module Sources
13
14
  class Base < ::Avm::EacGenericBase0::Sources::Base
14
15
  require_sub __FILE__, include_modules: :prepend, require_dependency: true
15
- delegate :gemspec_path, to: :the_gem
16
16
 
17
- def gemfile_path
18
- path.join('Gemfile')
17
+ EXTRA_AVAILABLE_SUBCOMMANDS = {
18
+ 'bundler' => ::Avm::EacRubyBase1::Sources::Runners::Bundler
19
+ }.freeze
20
+
21
+ # To-do: dismiss this method at Avm::EacRailsBase1::Instance and remove.
22
+ def env_set(env)
23
+ @env = env
24
+ end
25
+
26
+ def extra_available_subcommands
27
+ EXTRA_AVAILABLE_SUBCOMMANDS
19
28
  end
20
29
 
21
30
  def valid?
@@ -27,22 +36,26 @@ module Avm
27
36
  Avm::EacRubyBase1::Sources::Tester
28
37
  end
29
38
 
30
- # @return [EacRubyGemsUtils::Gem]
31
- def the_gem
32
- @the_gem ||= ::EacRubyGemsUtils::Gem.new(path)
33
- end
34
-
35
39
  def update
36
40
  ::Avm::EacRubyBase1::Sources::Update.new(self)
37
41
  end
38
42
 
39
43
  # @return [Avm::VersionNumber]
40
44
  def version
41
- the_gem.version.if_present { |v| ::Avm::VersionNumber.new(v) }
45
+ version_file.value.if_present { |v| ::Avm::VersionNumber.new(v) }
42
46
  end
43
47
 
44
48
  def version=(value)
45
- the_gem.version_file.value = value
49
+ version_file.value = value
50
+ end
51
+
52
+ # @return [Avm::EacRubyBase1::Rubygems::VersionFile]
53
+ def version_file
54
+ ::Avm::EacRubyBase1::Rubygems::VersionFile.new(version_file_path)
55
+ end
56
+
57
+ def version_file_path
58
+ path.join('lib', *gem_namespace_parts, 'version.rb')
46
59
  end
47
60
  end
48
61
  end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/bundler/incompatible_parser'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module EacRubyBase1
8
+ module Sources
9
+ module Runners
10
+ class Bundler
11
+ class Incompatible
12
+ runner_with :help do
13
+ desc 'Identify incompatible gems in a "Gemfile.lock" file.'
14
+ bool_opt '-l', '--last', 'Process the last \"bundle update\" result.'
15
+ end
16
+
17
+ def run
18
+ infov 'Cache path', fs_cache.content_path
19
+ infov 'Cached?', fs_cache.stored?
20
+ parser.gems_in_conflict.each do |gem_in_conflict|
21
+ print_gem_in_conflict(gem_in_conflict)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def bundle_update
28
+ infom 'Running "bundle update"...'
29
+ runner_context.call(:subject).bundle('update').execute[:stdout]
30
+ end
31
+
32
+ def content_path
33
+ fs_cache.write(bundle_update) unless fs_cache.stored? && parsed.last?
34
+ fs_cache.content_path
35
+ end
36
+
37
+ def fs_object_id
38
+ runner_context.call(:subject).path.to_s.variableize
39
+ end
40
+
41
+ def gem_title(gem_in_conflict)
42
+ gem_in_conflict.gem_name
43
+ end
44
+
45
+ def parser_uncached
46
+ ::Avm::EacRubyBase1::Bundler::IncompatibleParser.new(content_path)
47
+ end
48
+
49
+ def print_gem_in_conflict(gem_in_conflict)
50
+ infov 'Gem', gem_title(gem_in_conflict)
51
+ gem_in_conflict.versions_requirements.each do |requirement|
52
+ print_requirement(requirement)
53
+ end
54
+ end
55
+
56
+ def print_requirement(req)
57
+ infov ' ' + requirement_title(req), requirement_value(req)
58
+ end
59
+
60
+ def requirement_stack(req)
61
+ req.stack.map { |d| "#{d.gem_name} (#{d.version})" }.join(' > '.green)
62
+ end
63
+
64
+ def requirement_title(req)
65
+ req.requirements_source.if_present('*')
66
+ end
67
+
68
+ def requirement_value(req)
69
+ requirement_stack(req)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Runners
9
+ class Bundler
10
+ require_sub __FILE__
11
+ runner_with :help, :subcommands do
12
+ desc 'Ruby\'s bundler utitilies for local projects.'
13
+ subcommands
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Runners
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -9,27 +9,25 @@ module Avm
9
9
  class Tester < ::Avm::EacGenericBase0::Sources::Tester
10
10
  BUNDLE_TEST_COMMAND_CONFIGURATION_KEY = :bundle_test_command
11
11
 
12
- delegate :the_gem, to: :source
13
-
14
- # @return [EacRubyUtils::Envs::Command, nil]
12
+ # @return [Avm::EacRailsBase1::Sources::Base::BundleCommand, nil]
15
13
  def test_command
16
14
  bundle_test_command || super || default_test_command
17
15
  end
18
16
 
19
- # @return [EacRubyGemsUtils::Gem::Command, nil]
17
+ # @return [Avm::EacRailsBase1::Sources::Base::BundleCommand, nil]
20
18
  def bundle_test_command
21
19
  source.read_configuration_as_shell_words(BUNDLE_TEST_COMMAND_CONFIGURATION_KEY)
22
- .if_present { |args| the_gem.bundle(*args).chdir_root }
20
+ .if_present { |args| source.bundle(*args).chdir_root }
23
21
  end
24
22
 
25
- # @return [EacRubyGemsUtils::Gem::Command, nil]
23
+ # @return [Avm::EacRailsBase1::Sources::Base::BundleCommand, nil]
26
24
  def default_test_command
27
- the_gem.bundle('exec', 'rspec', '--fail-fast').chdir_root
25
+ source.bundle('exec', 'rspec', '--fail-fast').chdir_root
28
26
  end
29
27
 
30
28
  def run_test_command
31
- execute_command_and_log(the_gem.bundle('install').chdir_root) ||
32
- execute_command_and_log(the_gem.bundle('update').chdir_root)
29
+ execute_command_and_log(source.bundle('install').chdir_root) ||
30
+ execute_command_and_log(source.bundle('update').chdir_root)
33
31
  super
34
32
  end
35
33
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_fs/logs'
5
+ require 'eac_ruby_utils/listable'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module Sources
10
+ class Base
11
+ include ::EacRubyUtils::Listable
12
+
13
+ enable_simple_cache
14
+ lists.add_string :result, :failed, :nonexistent, :successful
15
+
16
+ common_constructor :gem
17
+
18
+ def elegible?
19
+ dependency_present? && gem.root.join(test_directory).exist?
20
+ end
21
+
22
+ def dependency_present?
23
+ gem.gemfile_path.exist? && gem.gemfile_lock_gem_version(dependency_gem).present?
24
+ end
25
+
26
+ def name
27
+ self.class.name.demodulize.gsub(/Test\z/, '')
28
+ end
29
+
30
+ def to_s
31
+ "#{gem}[#{name}]"
32
+ end
33
+
34
+ private
35
+
36
+ def logs_uncached
37
+ ::EacFs::Logs.new.add(:stdout).add(:stderr)
38
+ end
39
+
40
+ def result_uncached
41
+ return RESULT_NONEXISTENT unless elegible?
42
+
43
+ exec_run_with_log ? RESULT_SUCCESSFUL : RESULT_FAILED
44
+ end
45
+
46
+ def exec_run
47
+ gem.bundle('exec', *bundle_exec_args).chdir_root.execute
48
+ end
49
+
50
+ def exec_run_with_log
51
+ r = exec_run
52
+ logs[:stdout].write(r[:stdout])
53
+ logs[:stderr].write(r[:stderr])
54
+ r[:exit_code].zero?
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/sources/tests/base'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Tests
9
+ class Minitest < ::Avm::EacRubyBase1::Sources::Tests::Base
10
+ def bundle_exec_args
11
+ %w[rake test]
12
+ end
13
+
14
+ def dependency_gem
15
+ 'minitest'
16
+ end
17
+
18
+ def elegible?
19
+ super && gem.rakefile_path.exist?
20
+ end
21
+
22
+ def test_directory
23
+ 'test'
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Tests
9
+ class Multiple
10
+ class DecoratedGem < ::SimpleDelegator
11
+ enable_speaker
12
+
13
+ def prepare
14
+ return unless gemfile_path.exist?
15
+
16
+ log('running "bundle install"...')
17
+ return if bundle('install').execute.fetch(:exit_code).zero?
18
+
19
+ unless can_remove_gemfile_lock?
20
+ raise '"bundle install" failed and the Gemfile.lock is part of gem' \
21
+ '(Should be changed by developer)'
22
+ end
23
+
24
+ prepare_with_removable_gemfile_lock
25
+ end
26
+
27
+ def tests
28
+ [::Avm::EacRubyBase1::Sources::Tests::Minitest.new(__getobj__),
29
+ ::Avm::EacRubyBase1::Sources::Tests::Rspec.new(__getobj__)]
30
+ end
31
+
32
+ private
33
+
34
+ def log(message)
35
+ infov self, message
36
+ end
37
+
38
+ def prepare_with_removable_gemfile_lock
39
+ log('"bundle install" failed, removing Gemfile.lock and trying again...')
40
+ gemfile_lock_path.unlink if gemfile_lock_path.exist?
41
+ bundle('install').execute!
42
+ end
43
+
44
+ def can_remove_gemfile_lock?
45
+ !files.include?(gemfile_lock_path.relative_path_from(root))
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacRubyBase1
5
+ module Sources
6
+ module Tests
7
+ class Multiple
8
+ class Result
9
+ common_constructor :result
10
+
11
+ COLORS = {
12
+ ::Avm::EacRubyBase1::Sources::Tests::Base::RESULT_FAILED => :red,
13
+ ::Avm::EacRubyBase1::Sources::Tests::Base::RESULT_NONEXISTENT => :white,
14
+ ::Avm::EacRubyBase1::Sources::Tests::Base::RESULT_SUCCESSFUL => :green
15
+ }.freeze
16
+
17
+ def tag
18
+ result.to_s.send(color)
19
+ end
20
+
21
+ def color
22
+ COLORS.fetch(result)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/sources/tests/minitest'
4
+ require 'avm/eac_ruby_base1/sources/tests/rspec'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module Sources
10
+ module Tests
11
+ class Multiple
12
+ require_sub __FILE__
13
+ enable_speaker
14
+ enable_simple_cache
15
+ common_constructor :gems, :options, default: [{}]
16
+ set_callback :initialize, :after, :run
17
+
18
+ def ok?
19
+ failed_tests.none?
20
+ end
21
+
22
+ def only
23
+ options[:only]
24
+ end
25
+
26
+ private
27
+
28
+ def all_tests_uncached
29
+ decorated_gems.flat_map(&:tests)
30
+ end
31
+
32
+ def clear_logs
33
+ all_tests.each do |test|
34
+ test.logs.remove_all
35
+ end
36
+ end
37
+
38
+ def prepare_all_gems
39
+ infom 'Preparing all gems...'
40
+ decorated_gems.each(&:prepare)
41
+ end
42
+
43
+ def decorated_gems_uncached
44
+ r = gems
45
+ r = r.select { |gem| only.include?(gem.name) } if only.present?
46
+ r.map { |gem| DecoratedGem.new(gem) }
47
+ end
48
+
49
+ def failed_tests_uncached
50
+ all_tests.select do |r|
51
+ r.result == ::Avm::EacRubyBase1::Sources::Tests::Base::RESULT_FAILED
52
+ end
53
+ end
54
+
55
+ def final_results_banner
56
+ if failed_tests.any?
57
+ warn 'Some test did not pass:'
58
+ failed_tests.each do |test|
59
+ infov ' * Test', test
60
+ info test.logs.truncate_all
61
+ end
62
+ else
63
+ success 'All tests passed'
64
+ end
65
+ end
66
+
67
+ def run
68
+ start_banner
69
+ prepare_all_gems
70
+ test_all_gems
71
+ final_results_banner
72
+ ensure
73
+ clear_logs
74
+ end
75
+
76
+ def start_banner
77
+ infov 'Gems to test', decorated_gems.count
78
+ end
79
+
80
+ def test_all_gems
81
+ infom 'Running tests...'
82
+ all_tests.each do |test|
83
+ infov test, Result.new(test.result).tag
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/sources/tests/base'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Tests
9
+ class Rspec < ::Avm::EacRubyBase1::Sources::Tests::Base
10
+ def bundle_exec_args
11
+ %w[rspec]
12
+ end
13
+
14
+ def dependency_gem
15
+ 'rspec-core'
16
+ end
17
+
18
+ def test_directory
19
+ 'spec'
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Sources
8
+ module Tests
9
+ require_sub(__FILE__)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/eac_ruby_base1/sources/base'
4
+
3
5
  module Avm
4
6
  module EacRubyBase1
5
7
  module Sources
@@ -28,8 +30,9 @@ module Avm
28
30
  update_scm.if_present { |commit| on_scm_updated(commit) }
29
31
  end
30
32
 
33
+ # @return [Avm::EacRubyBase1::Sources::Base]
31
34
  def ruby_gem_uncached
32
- ::EacRubyGemsUtils::Gem.new(sub.path)
35
+ ::Avm::EacRubyBase1::Sources::Base.new(sub.path)
33
36
  end
34
37
 
35
38
  def no_scm_update_commit_message
@@ -15,9 +15,9 @@ module Avm
15
15
 
16
16
  def bundle_update
17
17
  infom 'Running "bundle update"...'
18
- ruby_gem.bundle('update').execute!
18
+ bundle('update').execute!
19
19
  infom 'Running "bundle install"...'
20
- ruby_gem.bundle('install').execute!
20
+ bundle('install').execute!
21
21
  end
22
22
 
23
23
  protected
@@ -42,10 +42,6 @@ module Avm
42
42
  ::Avm::EacRubyBase1::Sources::Update::SubUpdate.new(self, sub)
43
43
  end
44
44
  end
45
-
46
- def ruby_gem_uncached
47
- ::EacRubyGemsUtils::Gem.new(source.path)
48
- end
49
45
  end
50
46
  end
51
47
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRubyBase1
5
- VERSION = '0.6.0'
5
+ VERSION = '0.8.0'
6
6
  end
7
7
  end
File without changes
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-eac_ruby_base1
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-17 00:00:00.000000000 Z
11
+ date: 2022-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.9'
19
+ version: '0.22'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.9'
26
+ version: '0.22'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: avm-eac_generic_base0
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,39 +39,39 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: eac_ruby_gems_utils
42
+ name: eac_ruby_utils
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.9'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.9.8
47
+ version: '0.80'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '0.9'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 0.9.8
54
+ version: '0.80'
61
55
  - !ruby/object:Gem::Dependency
62
- name: eac_ruby_utils
56
+ name: aranha-parsers
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: '0.80'
68
- type: :runtime
61
+ version: '0.14'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.14.1
65
+ type: :development
69
66
  prerelease: false
70
67
  version_requirements: !ruby/object:Gem::Requirement
71
68
  requirements:
72
69
  - - "~>"
73
70
  - !ruby/object:Gem::Version
74
- version: '0.80'
71
+ version: '0.14'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.14.1
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: eac_ruby_gem_support
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -97,19 +97,43 @@ files:
97
97
  - lib/avm/eac_ruby_base1/bundler/gemfile.rb
98
98
  - lib/avm/eac_ruby_base1/bundler/gemfile/add_or_replace_gem_line.rb
99
99
  - lib/avm/eac_ruby_base1/bundler/gemfile/dependency.rb
100
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser.rb
101
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/depends_on.rb
102
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/gem_conflict.rb
103
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/in_gemfile.rb
104
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_buffer.rb
105
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_factory.rb
106
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base.rb
107
+ - lib/avm/eac_ruby_base1/bundler/incompatible_parser/version_requirement.rb
100
108
  - lib/avm/eac_ruby_base1/rubocop.rb
101
109
  - lib/avm/eac_ruby_base1/rubocop/configured.rb
102
110
  - lib/avm/eac_ruby_base1/rubocop/envvar.rb
103
111
  - lib/avm/eac_ruby_base1/rubocop/gemfile.rb
112
+ - lib/avm/eac_ruby_base1/rubygems.rb
113
+ - lib/avm/eac_ruby_base1/rubygems/version_file.rb
104
114
  - lib/avm/eac_ruby_base1/sources.rb
105
115
  - lib/avm/eac_ruby_base1/sources/base.rb
116
+ - lib/avm/eac_ruby_base1/sources/base/bundle_command.rb
117
+ - lib/avm/eac_ruby_base1/sources/base/bundler.rb
118
+ - lib/avm/eac_ruby_base1/sources/base/rake.rb
119
+ - lib/avm/eac_ruby_base1/sources/base/rubygems.rb
106
120
  - lib/avm/eac_ruby_base1/sources/base/version_bump.rb
121
+ - lib/avm/eac_ruby_base1/sources/runners.rb
122
+ - lib/avm/eac_ruby_base1/sources/runners/bundler.rb
123
+ - lib/avm/eac_ruby_base1/sources/runners/bundler/incompatible.rb
107
124
  - lib/avm/eac_ruby_base1/sources/tester.rb
125
+ - lib/avm/eac_ruby_base1/sources/tests.rb
126
+ - lib/avm/eac_ruby_base1/sources/tests/base.rb
127
+ - lib/avm/eac_ruby_base1/sources/tests/minitest.rb
128
+ - lib/avm/eac_ruby_base1/sources/tests/multiple.rb
129
+ - lib/avm/eac_ruby_base1/sources/tests/multiple/decorated_gem.rb
130
+ - lib/avm/eac_ruby_base1/sources/tests/multiple/result.rb
131
+ - lib/avm/eac_ruby_base1/sources/tests/rspec.rb
108
132
  - lib/avm/eac_ruby_base1/sources/update.rb
109
133
  - lib/avm/eac_ruby_base1/sources/update/sub_update.rb
110
134
  - lib/avm/eac_ruby_base1/version.rb
111
- - locale/en.yaml
112
- - locale/pt-BR.yaml
135
+ - locale/en.yml
136
+ - locale/pt-BR.yml
113
137
  homepage:
114
138
  licenses: []
115
139
  metadata: {}