eac_ruby_utils 0.70.0 → 0.73.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d2cf379e2415d60c830cd336cd7e7f10defe243a844de933dfd260aea4c6170
4
- data.tar.gz: de772d11fa31b9506914471b46a2fcba0c92f1c8c3d4fb5f0bd1f3127273e2af
3
+ metadata.gz: 9dd426f30a3da5d190205148f10b7a061a2d0315367747689b01146793dbe858
4
+ data.tar.gz: '0961ecbdbd58b1652b0d9ec3e863128376837917989610a06a0df396cb8020b0'
5
5
  SHA512:
6
- metadata.gz: 87b220b118861f20ab93b700bbda9e0fef1992021f2ea9a1f33774650522947e925173302a959b612f1f0a4ab877347605c491638dea2f55634ad093f936670b
7
- data.tar.gz: 49a65d53ee272fe9089c4944b7b115177ceac7a282bdc66fc13ecc689a1925cadc04d6cb62457b13193ed995405640617e9c65ed06f83d2368cd0494b30de4b0
6
+ metadata.gz: 6703ac081a004a151fc22ee490432dad4763ec97c0e3a9c20f6920208d77cd5857cb04351b37e360fa3ba3ae9c34d60bc50872eb3e0b4e05dde269489cbfdf69
7
+ data.tar.gz: 16fc01e522829482ea82f5e7765c832f7ad861573a0c9df8ddcd6f3452237b91d1019d440a47d69e500bc7c7cdf55727dee0cb935525f91f08862e7070ba65b6
@@ -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
@@ -28,9 +28,8 @@ module EacRubyUtils
28
28
 
29
29
  # @return [Array<EacRubyUtils::GemsRegistry::Gem>]
30
30
  def all_gems
31
- ::Gem::Specification.map do |gemspec|
32
- ::EacRubyUtils::GemsRegistry::Gem.new(self, gemspec)
33
- end
31
+ ::Gem::Specification.map { |gemspec| ::EacRubyUtils::GemsRegistry::Gem.new(self, gemspec) }
32
+ .sort
34
33
  end
35
34
  end
36
35
  end
@@ -1,10 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext/string/inflections'
4
+ require 'eac_ruby_utils/recursive_builder'
5
+ require 'eac_ruby_utils/simple_cache'
4
6
 
5
7
  module EacRubyUtils
6
8
  class GemsRegistry
7
9
  class Gem
10
+ include ::Comparable
11
+ include ::EacRubyUtils::SimpleCache
12
+
8
13
  attr_reader :registry, :gemspec
9
14
 
10
15
  def initialize(registry, gemspec)
@@ -12,6 +17,23 @@ module EacRubyUtils
12
17
  @gemspec = gemspec
13
18
  end
14
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
+
15
37
  def found?
16
38
  lib_file_found? && registered_module.is_a?(::Module)
17
39
  end
@@ -34,6 +56,20 @@ module EacRubyUtils
34
56
  def path_to_require
35
57
  gemspec.name.gsub('-', '/') + '/' + registry.module_suffix.underscore
36
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
37
73
  end
38
74
  end
39
75
  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
@@ -1,17 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/rspec/setup'
3
+ require 'eac_ruby_utils/rspec/setup_manager'
4
4
 
5
5
  module EacRubyUtils
6
6
  module Rspec
7
7
  class << self
8
+ # @return [EacRubyUtils::Rspec::SetupManager]
8
9
  def default_setup
9
10
  @default_setup ||
10
11
  raise("Default instance was not set. Use #{self.class.name}.default_setup_create")
11
12
  end
12
13
 
14
+ # @return [EacRubyUtils::Rspec::SetupManager]
13
15
  def default_setup_create(app_root_path, rspec_config = nil)
14
- @default_setup = ::EacRubyUtils::Rspec::Setup.create(app_root_path, rspec_config)
16
+ @default_setup = ::EacRubyUtils::Rspec::SetupManager.create(app_root_path, rspec_config)
15
17
  end
16
18
  end
17
19
  end
@@ -1,45 +1,12 @@
1
1
  # frozen_string_literal: true
2
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'
3
+ require 'eac_ruby_utils/core_ext'
6
4
 
7
5
  module EacRubyUtils
8
6
  module Rspec
9
- class Setup
10
- GEMS_REGISTRY_SUFFIX = 'Rspec::SetupInclude'
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
- singleton_class.include(gem.registered_module)
40
- gem.registered_module.setup(self) if gem.registered_module.respond_to?(:setup)
41
- end
42
- end
7
+ module Setup
8
+ extend ::ActiveSupport::Concern
9
+ require_sub __FILE__, include_modules: true
43
10
  end
44
11
  end
45
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,52 @@
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
+ REGISTERED_MODULE_PERFORM_METHOD = :perform
12
+
13
+ class << self
14
+ def create(app_root_path, rspec_config = nil)
15
+ if rspec_config
16
+ new(app_root_path, rspec_config)
17
+ else
18
+ ::RSpec.configure { |new_rspec_config| new(app_root_path, new_rspec_config) }
19
+ end
20
+ end
21
+ end
22
+
23
+ attr_reader :app_root_path, :rspec_config
24
+
25
+ def initialize(app_root_path, rspec_config)
26
+ @app_root_path = app_root_path.to_pathname
27
+ @rspec_config = rspec_config
28
+ include_registry
29
+ end
30
+
31
+ # @return [EacRubyUtils::GemsRegistry]
32
+ def gems_registry
33
+ @gems_registry ||= ::EacRubyUtils::GemsRegistry.new(GEMS_REGISTRY_SUFFIX)
34
+ end
35
+
36
+ protected
37
+
38
+ def include_registry
39
+ gems_registry.registered.each do |gem|
40
+ include_gem_registered(gem.registered_module)
41
+ end
42
+ end
43
+
44
+ # @param gem [EacRubyUtils::GemsRegistry::Gem]
45
+ def include_gem_registered(registered_module)
46
+ extend(registered_module)
47
+ registered_module.send(REGISTERED_MODULE_PERFORM_METHOD, self) if
48
+ registered_module.respond_to?(REGISTERED_MODULE_PERFORM_METHOD)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.70.0'
4
+ VERSION = '0.73.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_ruby_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.70.0
4
+ version: 0.73.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-25 00:00:00.000000000 Z
11
+ date: 2021-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -73,6 +73,9 @@ dependencies:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.3'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 0.3.2
76
79
  type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -80,6 +83,9 @@ dependencies:
80
83
  - - "~>"
81
84
  - !ruby/object:Gem::Version
82
85
  version: '0.3'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 0.3.2
83
89
  description:
84
90
  email:
85
91
  executables: []
@@ -196,13 +202,14 @@ files:
196
202
  - lib/eac_ruby_utils/patches/string/inflector.rb
197
203
  - lib/eac_ruby_utils/patches/time.rb
198
204
  - lib/eac_ruby_utils/patches/time/required_zone.rb
205
+ - lib/eac_ruby_utils/recursive_builder.rb
199
206
  - lib/eac_ruby_utils/regexp_parser.rb
200
207
  - lib/eac_ruby_utils/require_sub.rb
201
208
  - lib/eac_ruby_utils/rspec.rb
202
- - lib/eac_ruby_utils/rspec/conditional.rb
203
209
  - lib/eac_ruby_utils/rspec/default_setup.rb
204
210
  - lib/eac_ruby_utils/rspec/setup.rb
205
- - lib/eac_ruby_utils/rspec/stubbed_ssh.rb
211
+ - lib/eac_ruby_utils/rspec/setup/conditionals.rb
212
+ - lib/eac_ruby_utils/rspec/setup_manager.rb
206
213
  - lib/eac_ruby_utils/ruby.rb
207
214
  - lib/eac_ruby_utils/ruby/command.rb
208
215
  - lib/eac_ruby_utils/ruby/on_clean_environment.rb
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/object/blank'
4
-
5
- module EacRubyUtils
6
- module Rspec
7
- class Conditional
8
- def self.default
9
- @default ||= new
10
- end
11
-
12
- def initialize
13
- @tags = {}
14
- end
15
-
16
- def add(tag, &condition)
17
- tags[tag] = condition
18
- end
19
-
20
- def configure(rspec_config)
21
- tags.each do |tag, condition|
22
- message = condition.call
23
- if message.present?
24
- puts("[WARN] Excluded tag: #{tag}: #{message}")
25
- rspec_config.filter_run_excluding tag
26
- end
27
- end
28
- end
29
-
30
- private
31
-
32
- attr_reader :tags
33
- end
34
- end
35
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/object/blank'
4
- require 'eac_ruby_utils/envs/ssh_env'
5
- require 'eac_ruby_utils/patches/object/if_present'
6
-
7
- module EacRubyUtils
8
- module Rspec
9
- class StubbedSsh
10
- DEFAULT_ENVVAR_NAME = 'STUBBED_SSH_URL'
11
-
12
- class << self
13
- def default
14
- @default ||= new(DEFAULT_ENVVAR_NAME)
15
- end
16
- end
17
-
18
- attr_reader :envvar_name
19
-
20
- def initialize(envvar_name)
21
- @envvar_name = envvar_name
22
- end
23
-
24
- def validate
25
- return nil if provided_url.present?
26
-
27
- "Environment variable \"#{envvar_name}\" unprovided or blank"
28
- end
29
-
30
- def validate!
31
- validate.if_present { |v| raise v }
32
- end
33
-
34
- def provided_url
35
- ENV[envvar_name]
36
- end
37
-
38
- def build_env
39
- validate!
40
- ::EacRubyUtils::Envs::SshEnv.new(provided_url)
41
- end
42
- end
43
- end
44
- end