ehbrs-tools 0.22.0 → 0.25.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/exe/ehbrs +2 -2
  3. data/lib/ehbrs/tools/runner.rb +21 -0
  4. data/lib/ehbrs/tools/runner/cooking_book.rb +32 -0
  5. data/lib/ehbrs/tools/runner/cooking_book/build.rb +52 -0
  6. data/lib/ehbrs/{runner/videos/series.rb → tools/runner/finances.rb} +4 -4
  7. data/lib/ehbrs/tools/runner/finances/bb_browser.rb +66 -0
  8. data/lib/ehbrs/tools/runner/fs.rb +18 -0
  9. data/lib/ehbrs/tools/runner/fs/selected.rb +81 -0
  10. data/lib/ehbrs/tools/runner/fs/used_space.rb +161 -0
  11. data/lib/ehbrs/tools/runner/google.rb +18 -0
  12. data/lib/ehbrs/tools/runner/google/translate.rb +89 -0
  13. data/lib/ehbrs/tools/runner/music.rb +18 -0
  14. data/lib/ehbrs/tools/runner/music/selected.rb +28 -0
  15. data/lib/ehbrs/tools/runner/self.rb +18 -0
  16. data/lib/ehbrs/tools/runner/self/test.rb +27 -0
  17. data/lib/ehbrs/tools/runner/telegram.rb +28 -0
  18. data/lib/ehbrs/tools/runner/telegram/send_message.rb +31 -0
  19. data/lib/ehbrs/tools/runner/vg.rb +18 -0
  20. data/lib/ehbrs/tools/runner/vg/ips.rb +134 -0
  21. data/lib/ehbrs/tools/runner/vg/wii.rb +74 -0
  22. data/lib/ehbrs/{runner/web_utils → tools/runner}/videos.rb +3 -3
  23. data/lib/ehbrs/tools/runner/videos/extract.rb +70 -0
  24. data/lib/ehbrs/tools/runner/videos/probe.rb +34 -0
  25. data/lib/ehbrs/tools/runner/videos/series.rb +20 -0
  26. data/lib/ehbrs/tools/runner/videos/series/rename.rb +74 -0
  27. data/lib/ehbrs/tools/runner/videos/unsupported.rb +61 -0
  28. data/lib/ehbrs/tools/runner/web_utils.rb +26 -0
  29. data/lib/ehbrs/tools/runner/web_utils/videos.rb +20 -0
  30. data/lib/ehbrs/tools/runner/web_utils/videos/download.rb +75 -0
  31. data/lib/ehbrs/tools/runner/web_utils/videos/upload.rb +77 -0
  32. data/lib/ehbrs/tools/version.rb +1 -1
  33. data/lib/ehbrs/vg/wii/game_file.rb +10 -0
  34. data/vendor/aranha-parsers/aranha-parsers.gemspec +2 -2
  35. data/vendor/{avm-apps/lib/avm/apps/jobs.rb → aranha-parsers/lib/aranha/parsers/rspec.rb} +3 -3
  36. data/vendor/aranha-parsers/lib/aranha/parsers/rspec/setup.rb +15 -0
  37. data/vendor/aranha-parsers/lib/aranha/parsers/{spec → rspec}/source_target_fixtures_example.rb +0 -0
  38. data/vendor/aranha-parsers/lib/aranha/parsers/source_address.rb +10 -8
  39. data/vendor/aranha-parsers/lib/aranha/parsers/version.rb +1 -1
  40. data/vendor/aranha-parsers/spec/lib/rubocop_check_spec.rb +1 -5
  41. data/vendor/aranha-parsers/spec/spec_helper.rb +2 -6
  42. data/vendor/aranha-selenium/aranha-selenium.gemspec +2 -2
  43. data/vendor/aranha-selenium/lib/aranha/selenium/version.rb +1 -1
  44. data/vendor/aranha-selenium/spec/rubocop_check_spec.rb +1 -5
  45. data/vendor/aranha-selenium/spec/spec_helper.rb +2 -98
  46. data/vendor/eac_cli/eac_cli.gemspec +3 -3
  47. data/vendor/eac_cli/lib/eac_cli/config.rb +2 -0
  48. data/vendor/eac_cli/lib/eac_cli/config/entry.rb +1 -3
  49. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  50. data/vendor/eac_cli/spec/rubocop_spec.rb +1 -1
  51. data/vendor/eac_cli/spec/spec_helper.rb +2 -101
  52. data/vendor/eac_config/eac_config.gemspec +2 -2
  53. data/vendor/eac_config/lib/eac_config/version.rb +1 -1
  54. data/vendor/eac_config/spec/rubocop_spec.rb +1 -1
  55. data/vendor/eac_config/spec/spec_helper.rb +2 -15
  56. data/vendor/eac_docker/eac_docker.gemspec +2 -2
  57. data/vendor/eac_docker/lib/eac_docker/container.rb +7 -3
  58. data/vendor/eac_docker/lib/eac_docker/debug.rb +15 -0
  59. data/vendor/eac_docker/lib/eac_docker/images/coded.rb +4 -0
  60. data/vendor/eac_docker/lib/eac_docker/images/templatized.rb +16 -2
  61. data/vendor/eac_docker/lib/eac_docker/rspec.rb +2 -10
  62. data/vendor/eac_docker/lib/eac_docker/rspec/setup.rb +17 -0
  63. data/vendor/eac_docker/lib/eac_docker/version.rb +1 -1
  64. data/vendor/eac_docker/spec/rubocop_spec.rb +1 -1
  65. data/vendor/eac_docker/spec/spec_helper.rb +2 -104
  66. data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +4 -4
  67. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  68. data/vendor/eac_ruby_base0/spec/rubocop_spec.rb +1 -1
  69. data/vendor/eac_ruby_base0/spec/spec_helper.rb +2 -101
  70. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +1 -1
  71. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/boolean.rb +1 -1
  72. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +15 -3
  73. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/gems_registry.rb +35 -0
  74. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/gems_registry/gem.rb +75 -0
  75. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/parent_n.rb +11 -0
  76. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb +51 -0
  77. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/default_setup.rb +20 -0
  78. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup.rb +12 -0
  79. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup/conditionals.rb +17 -0
  80. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup_manager.rb +49 -0
  81. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  82. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/parent_n_spec.rb +33 -0
  83. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/recursive_builder_spec.rb +65 -0
  84. data/vendor/eac_ruby_utils/spec/rubocop_check_spec.rb +1 -1
  85. data/vendor/eac_ruby_utils/spec/spec_helper.rb +6 -6
  86. data/vendor/ehbrs_ruby_utils/ehbrs_ruby_utils.gemspec +4 -2
  87. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/finances/bb_browser/docker_image.rb +18 -0
  88. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/patches/object/template.rb +6 -0
  89. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/version.rb +1 -1
  90. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/videos/stream.rb +11 -1
  91. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/web_utils/videos/file.rb +11 -8
  92. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/web_utils/videos/file/rename.rb +28 -0
  93. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec.rb +13 -0
  94. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_attachment.source.yaml +28 -0
  95. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_attachment.target.yaml +7 -0
  96. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_audio.source.yaml +49 -0
  97. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_audio.target.yaml +7 -0
  98. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_subtitle.source.yaml +43 -0
  99. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_subtitle.target.yaml +7 -0
  100. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_video.source.yaml +59 -0
  101. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_video.target.yaml +7 -0
  102. data/vendor/ehbrs_ruby_utils/spec/rubocop_check_spec.rb +1 -5
  103. data/vendor/ehbrs_ruby_utils/spec/spec_helper.rb +2 -98
  104. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Dockerfile +44 -0
  105. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Makefile +35 -0
  106. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/README.md +16 -0
  107. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/context/firefox.service +8 -0
  108. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/context/startbrowser.sh +9 -0
  109. metadata +68 -53
  110. data/lib/ehbrs/runner.rb +0 -19
  111. data/lib/ehbrs/runner/cooking_book.rb +0 -30
  112. data/lib/ehbrs/runner/cooking_book/build.rb +0 -50
  113. data/lib/ehbrs/runner/finances.rb +0 -16
  114. data/lib/ehbrs/runner/finances/bb_browser.rb +0 -35
  115. data/lib/ehbrs/runner/fs.rb +0 -16
  116. data/lib/ehbrs/runner/fs/selected.rb +0 -79
  117. data/lib/ehbrs/runner/fs/used_space.rb +0 -159
  118. data/lib/ehbrs/runner/google.rb +0 -16
  119. data/lib/ehbrs/runner/google/translate.rb +0 -87
  120. data/lib/ehbrs/runner/music.rb +0 -16
  121. data/lib/ehbrs/runner/music/selected.rb +0 -26
  122. data/lib/ehbrs/runner/self.rb +0 -16
  123. data/lib/ehbrs/runner/self/test.rb +0 -25
  124. data/lib/ehbrs/runner/telegram.rb +0 -26
  125. data/lib/ehbrs/runner/telegram/send_message.rb +0 -29
  126. data/lib/ehbrs/runner/vg.rb +0 -16
  127. data/lib/ehbrs/runner/vg/ips.rb +0 -132
  128. data/lib/ehbrs/runner/vg/wii.rb +0 -72
  129. data/lib/ehbrs/runner/videos.rb +0 -16
  130. data/lib/ehbrs/runner/videos/extract.rb +0 -68
  131. data/lib/ehbrs/runner/videos/probe.rb +0 -32
  132. data/lib/ehbrs/runner/videos/series/rename.rb +0 -72
  133. data/lib/ehbrs/runner/videos/unsupported.rb +0 -59
  134. data/lib/ehbrs/runner/web_utils.rb +0 -24
  135. data/lib/ehbrs/runner/web_utils/videos/download.rb +0 -63
  136. data/lib/ehbrs/runner/web_utils/videos/upload.rb +0 -75
  137. data/vendor/avm-apps/Gemfile +0 -5
  138. data/vendor/avm-apps/avm-apps.gemspec +0 -18
  139. data/vendor/avm-apps/lib/avm/apps.rb +0 -9
  140. data/vendor/avm-apps/lib/avm/apps/config.rb +0 -19
  141. data/vendor/avm-apps/lib/avm/apps/jobs/base.rb +0 -64
  142. data/vendor/avm-apps/lib/avm/apps/jobs/variables_source.rb +0 -24
  143. data/vendor/avm-apps/lib/avm/apps/sources/configuration.rb +0 -57
  144. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_locale.rb +0 -18
  145. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_rubocop.rb +0 -26
  146. data/vendor/avm-apps/lib/avm/apps/sources/configuration/_tests.rb +0 -29
  147. data/vendor/avm-apps/lib/avm/apps/version.rb +0 -7
  148. data/vendor/avm-apps/spec/rubocop_spec.rb +0 -3
  149. data/vendor/avm-apps/spec/spec_helper.rb +0 -103
  150. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +0 -35
  151. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/stubbed_ssh.rb +0 -44
@@ -19,5 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency 'addressable', '~> 2.6'
20
20
  s.add_dependency 'filesize'
21
21
  s.add_dependency 'net-ssh', '~> 4.2'
22
- s.add_development_dependency 'eac_ruby_gem_support', '~> 0.2'
22
+ s.add_development_dependency 'eac_ruby_gem_support', '~> 0.3', '>= 0.3.2'
23
23
  end
@@ -6,7 +6,7 @@ module EacRubyUtils
6
6
  def parse(value)
7
7
  return parse_string(value) if value.is_a?(::String)
8
8
  return parse_string(value.to_s) if value.is_a?(::Symbol)
9
- return parse_number(value) if value.is_a?(::Number)
9
+ return parse_number(value) if value.is_a?(::Numeric)
10
10
 
11
11
  value ? true : false
12
12
  end
@@ -22,7 +22,7 @@ module EacRubyUtils
22
22
  def validate
23
23
  return nil if exist?
24
24
 
25
- "Program \"#{name}\" not found in environment #{env}"
25
+ "Program \"#{::Shellwords.join(executable_args)}\" not found in environment #{env}"
26
26
  end
27
27
 
28
28
  def validate!
@@ -33,13 +33,25 @@ module EacRubyUtils
33
33
 
34
34
  def command(*command_args)
35
35
  validate!
36
- env.command(name, *command_args)
36
+ env.command(*executable_args, *command_args)
37
+ end
38
+
39
+ def executable_args
40
+ executable_args_from_envvar || [name]
41
+ end
42
+
43
+ def executable_args_envvar
44
+ "#{name}_command".variableize.upcase
45
+ end
46
+
47
+ def executable_args_from_envvar
48
+ ENV[executable_args_envvar].if_present { |v| ::Shellwords.split(v) }
37
49
  end
38
50
 
39
51
  private
40
52
 
41
53
  def exist_uncached
42
- env.command(name, *check_args).execute!
54
+ env.command(*executable_args, *check_args).execute!
43
55
  true
44
56
  rescue Errno::ENOENT
45
57
  false
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require 'eac_ruby_utils/gems_registry/gem'
5
+
6
+ module EacRubyUtils
7
+ # Search in each gem for a class determined by registry and run the method "register" on each
8
+ # found.
9
+ #
10
+ # Example:
11
+ # * The module suffix is `TheClass`;
12
+ # * A gem with name "my-lib" is being analyzed
13
+ # * If a require for "my/lib/the_class" is succesful the class/module `My::Lib::TheClass` will
14
+ # be collected.
15
+ class GemsRegistry
16
+ attr_reader :module_suffix
17
+
18
+ def initialize(module_suffix)
19
+ @module_suffix = module_suffix
20
+ end
21
+
22
+ # @return [Array<EacRubyUtils::GemsRegistry::Gem>]
23
+ def registered
24
+ @registered ||= all_gems.select(&:found?)
25
+ end
26
+
27
+ private
28
+
29
+ # @return [Array<EacRubyUtils::GemsRegistry::Gem>]
30
+ def all_gems
31
+ ::Gem::Specification.map { |gemspec| ::EacRubyUtils::GemsRegistry::Gem.new(self, gemspec) }
32
+ .sort
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/string/inflections'
4
+ require 'eac_ruby_utils/recursive_builder'
5
+ require 'eac_ruby_utils/simple_cache'
6
+
7
+ module EacRubyUtils
8
+ class GemsRegistry
9
+ class Gem
10
+ include ::Comparable
11
+ include ::EacRubyUtils::SimpleCache
12
+
13
+ attr_reader :registry, :gemspec
14
+
15
+ def initialize(registry, gemspec)
16
+ @registry = registry
17
+ @gemspec = gemspec
18
+ end
19
+
20
+ def depend_on(gem)
21
+ dependencies.lazy.map(&:name).include?(gem.gemspec.name)
22
+ end
23
+
24
+ def dependencies
25
+ @dependencies ||= dependencies_uncached # dependencies_uncached
26
+ end
27
+
28
+ def <=>(other)
29
+ sd = depend_on(other)
30
+ od = other.depend_on(self)
31
+ return 1 if sd && !od
32
+ return -1 if od && !sd
33
+
34
+ gemspec.name <=> other.gemspec.name
35
+ end
36
+
37
+ def found?
38
+ lib_file_found? && registered_module.is_a?(::Module)
39
+ end
40
+
41
+ def lib_file_found?
42
+ gemspec.require_paths.any? do |require_path|
43
+ ::Pathname.new(require_path).expand_path(gemspec.gem_dir).join(path_to_require + '.rb')
44
+ .file?
45
+ end
46
+ end
47
+
48
+ def registered_module
49
+ return nil unless lib_file_found?
50
+
51
+ require path_to_require
52
+ path_to_require.classify.constantize
53
+ end
54
+
55
+ # @return [String]
56
+ def path_to_require
57
+ gemspec.name.gsub('-', '/') + '/' + registry.module_suffix.underscore
58
+ end
59
+
60
+ private
61
+
62
+ def dependencies_uncached
63
+ ::EacRubyUtils::RecursiveBuilder
64
+ .new(gemspec) { |item| gem_item_dependencies(item) }
65
+ .result
66
+ end
67
+
68
+ def gem_item_dependencies(item)
69
+ ::Gem::Specification.find_by_name(item.name).dependencies
70
+ rescue ::Gem::MissingSpecError
71
+ []
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+
5
+ class Pathname
6
+ # Apply .parent n times.
7
+ # @return [Pathname]
8
+ def parent_n(n) # rubocop:disable Naming/MethodParameterName
9
+ n.times.inject(self) { |a, _e| a.parent }
10
+ end
11
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/simple_cache'
4
+
5
+ module EacRubyUtils
6
+ class RecursiveBuilder
7
+ include ::EacRubyUtils::SimpleCache
8
+
9
+ attr_reader :root, :neighbors_block
10
+
11
+ def initialize(root, &neighbors_block)
12
+ @root = root
13
+ @neighbors_block = neighbors_block
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :added, :to_check
19
+
20
+ def result_uncached
21
+ @added = []
22
+ @to_check = []
23
+ item_try_add_to_check(root)
24
+ while check_next_item
25
+ # Do nothing
26
+ end
27
+ added
28
+ end
29
+
30
+ def item_try_add_to_check(item)
31
+ to_check << item unless item_added?(item)
32
+ end
33
+
34
+ def item_added?(item)
35
+ added.include?(item) || to_check.include?(item)
36
+ end
37
+
38
+ def check_next_item
39
+ return false unless to_check.any?
40
+
41
+ item = to_check.shift
42
+ added << item
43
+ item_neighborhs(item).each { |sub_item| item_try_add_to_check(sub_item) }
44
+ true
45
+ end
46
+
47
+ def item_neighborhs(item)
48
+ neighbors_block.call(item)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/rspec/setup_manager'
4
+
5
+ module EacRubyUtils
6
+ module Rspec
7
+ class << self
8
+ # @return [EacRubyUtils::Rspec::SetupManager]
9
+ def default_setup
10
+ @default_setup ||
11
+ raise("Default instance was not set. Use #{self.class.name}.default_setup_create")
12
+ end
13
+
14
+ # @return [EacRubyUtils::Rspec::SetupManager]
15
+ def default_setup_create(app_root_path, rspec_config = nil)
16
+ @default_setup = ::EacRubyUtils::Rspec::SetupManager.create(app_root_path, rspec_config)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRubyUtils
6
+ module Rspec
7
+ module Setup
8
+ extend ::ActiveSupport::Concern
9
+ require_sub __FILE__, include_modules: true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Rspec
5
+ module Setup
6
+ module Conditionals
7
+ def conditional(tag, &condition)
8
+ message = condition.call
9
+ return if message.blank?
10
+
11
+ puts("[WARN] Excluded tag: #{tag}: #{message}")
12
+ rspec_config.filter_run_excluding tag
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/gems_registry'
4
+ require 'eac_ruby_utils/patches/object/if_respond'
5
+ require 'eac_ruby_utils/patches/object/to_pathname'
6
+
7
+ module EacRubyUtils
8
+ module Rspec
9
+ class SetupManager
10
+ GEMS_REGISTRY_SUFFIX = 'Rspec::Setup'
11
+
12
+ class << self
13
+ def create(app_root_path, rspec_config = nil)
14
+ if rspec_config
15
+ new(app_root_path, rspec_config)
16
+ else
17
+ ::RSpec.configure { |new_rspec_config| new(app_root_path, new_rspec_config) }
18
+ end
19
+ end
20
+ end
21
+
22
+ attr_reader :app_root_path, :rspec_config
23
+
24
+ def initialize(app_root_path, rspec_config)
25
+ @app_root_path = app_root_path.to_pathname
26
+ @rspec_config = rspec_config
27
+ include_registry
28
+ end
29
+
30
+ # @return [EacRubyUtils::GemsRegistry]
31
+ def gems_registry
32
+ @gems_registry ||= ::EacRubyUtils::GemsRegistry.new(GEMS_REGISTRY_SUFFIX)
33
+ end
34
+
35
+ protected
36
+
37
+ def include_registry
38
+ gems_registry.registered.each do |gem|
39
+ include_gem_registered(gem.registered_module)
40
+ end
41
+ end
42
+
43
+ # @param gem [EacRubyUtils::GemsRegistry::Gem]
44
+ def include_gem_registered(registered_module)
45
+ extend(registered_module)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.68.0'
4
+ VERSION = '0.74.0'
5
5
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/pathname/parent_n'
4
+
5
+ RSpec.describe ::Pathname do
6
+ [
7
+ ['/absolute/path/to/file', 0, '/absolute/path/to/file'],
8
+ ['/absolute/path/to/file', 1, '/absolute/path/to'],
9
+ ['/absolute/path/to/file', 2, '/absolute/path'],
10
+ ['/absolute/path/to/file', 3, '/absolute'],
11
+ ['/absolute/path/to/file', 4, '/'],
12
+ ['/absolute/path/to/file', 5, '/'],
13
+ ['relative/path/to/file', 0, 'relative/path/to/file'],
14
+ ['relative/path/to/file', 1, 'relative/path/to'],
15
+ ['relative/path/to/file', 2, 'relative/path'],
16
+ ['relative/path/to/file', 3, 'relative'],
17
+ ['relative/path/to/file', 4, '.'],
18
+ ['relative/path/to/file', 5, '..'],
19
+ ['relative/path/to/file', 6, '../..']
20
+ ].each do |test_data|
21
+ input_path = test_data[0]
22
+ context "when path is \"#{input_path}\"" do
23
+ let(:n) { test_data[1] }
24
+ let(:expected_path) { test_data[2] }
25
+
26
+ it do
27
+ expect(described_class.new(input_path).parent_n(n)).to(
28
+ eq(described_class.new(expected_path))
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/recursive_builder'
4
+
5
+ RSpec.describe ::EacRubyUtils::RecursiveBuilder do
6
+ let(:item_class) do
7
+ ::Class.new do
8
+ class << self
9
+ def create(label, dependencies_keys)
10
+ item = new(label, dependencies_keys)
11
+ registry[item.label] = item
12
+ item
13
+ end
14
+
15
+ def registry
16
+ @registry ||= {}
17
+ end
18
+ end
19
+
20
+ attr_reader :label, :dependencies_keys
21
+
22
+ def initialize(label, dependencies_keys)
23
+ @label = label
24
+ @dependencies_keys = dependencies_keys.freeze
25
+ end
26
+
27
+ def dependencies
28
+ dependencies_keys.map { |key| self.class.registry.fetch(key) }
29
+ end
30
+
31
+ def to_s
32
+ label
33
+ end
34
+ end
35
+ end
36
+
37
+ items = [
38
+ [:a, %w[c], %w[a c]],
39
+ [:b, %w[a], %w[b a c]],
40
+ [:c, [], %w[c]],
41
+ [:d, %w[a b c e], %w[d a b c e]],
42
+ [:e, %w[c b], %w[e c b a]]
43
+ ]
44
+
45
+ items.each do |item|
46
+ let(item[0]) { item_class.create(item[0].to_s, item[1]) }
47
+ before { send(item[0]) }
48
+ end
49
+
50
+ describe '#result' do
51
+ items.each do |item|
52
+ context "when root is \"#{item[0]}\"" do
53
+ let(:root) { send(item[0]) }
54
+ let(:dependencies) { item[2].map { |d| send(d) } }
55
+ let(:builder) do
56
+ described_class.new(root, &:dependencies)
57
+ end
58
+
59
+ it "is #{item[2]}" do
60
+ expect(builder.result).to eq(dependencies)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end