eac_ruby_utils 0.69.1 → 0.72.1

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: 5e531361347677f1585f1ceecd5b8230e44b0db18d70dbb3b685123b7b6beaf5
4
- data.tar.gz: 9a49e7f6e59bed4e3a4bc9421decbf1bb832db7e527df3f249e0e3f215bb3c71
3
+ metadata.gz: 262c5b03a02ac07effc5ccac5108cbdc513aa73d61174a895416b8e954992da5
4
+ data.tar.gz: 4e7cc39170e0701152949c01ff4c645a92f4a4c768a3bd42785be48e8ae0e303
5
5
  SHA512:
6
- metadata.gz: 05b20139daca89f913ab309c123c18684c08e1b595f4e64011ec5cc4fe11dced0ecfd84554f5ed0dc6f8f0323f284639d3eaa39e3df481fbde5c7cdae426fe49
7
- data.tar.gz: 41ec207a6adc45ce9f305d96fd17650530355848691b067a4fc21569b97492ae8ba7579ac3ea2b25fff5e99bb6c4ec1f56226820038ded542551e31b6e6a2ad5
6
+ metadata.gz: d5052fda81fdebe2467ceb52f443f0d38777417c3b070a8b7cd3aaa60a996bac8dfdc4cee9ec0ce2977e2a737595e3e5c1b3412e79bbca2f230ec3044625c563
7
+ data.tar.gz: 8f543e1fc5f8b194404fbf40f000d6d8fe1262788f9e4a8e59983ab00f3697ec201239e2a9a4945ca11ce1d0f7349b1a2255f50312130be4e404600df12a54c1
@@ -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,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,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRubyUtils
6
+ module Rspec
7
+ class Setup
8
+ require_sub __FILE__
9
+ common_constructor :setup_obj
10
+
11
+ def perform
12
+ setup_obj.singleton_class.include(::EacRubyUtils::Rspec::Setup::Conditionals)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Rspec
5
+ class 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,44 @@
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
+ gem.registered_module.new(self).perform
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.69.1'
4
+ VERSION = '0.72.1'
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.69.1
4
+ version: 0.72.1
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-07 00:00:00.000000000 Z
11
+ date: 2021-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -72,14 +72,20 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: '0.3'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 0.3.1
76
79
  type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
83
  - - "~>"
81
84
  - !ruby/object:Gem::Version
82
- version: '0.2'
85
+ version: '0.3'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 0.3.1
83
89
  description:
84
90
  email:
85
91
  executables: []
@@ -131,6 +137,8 @@ files:
131
137
  - lib/eac_ruby_utils/fs/traversable.rb
132
138
  - lib/eac_ruby_utils/fs/traverser.rb
133
139
  - lib/eac_ruby_utils/fs_cache.rb
140
+ - lib/eac_ruby_utils/gems_registry.rb
141
+ - lib/eac_ruby_utils/gems_registry/gem.rb
134
142
  - lib/eac_ruby_utils/immutable.rb
135
143
  - lib/eac_ruby_utils/immutable/array_accessor.rb
136
144
  - lib/eac_ruby_utils/immutable/base_accessor.rb
@@ -194,11 +202,14 @@ files:
194
202
  - lib/eac_ruby_utils/patches/string/inflector.rb
195
203
  - lib/eac_ruby_utils/patches/time.rb
196
204
  - lib/eac_ruby_utils/patches/time/required_zone.rb
205
+ - lib/eac_ruby_utils/recursive_builder.rb
197
206
  - lib/eac_ruby_utils/regexp_parser.rb
198
207
  - lib/eac_ruby_utils/require_sub.rb
199
208
  - lib/eac_ruby_utils/rspec.rb
200
- - lib/eac_ruby_utils/rspec/conditional.rb
201
- - lib/eac_ruby_utils/rspec/stubbed_ssh.rb
209
+ - lib/eac_ruby_utils/rspec/default_setup.rb
210
+ - lib/eac_ruby_utils/rspec/setup.rb
211
+ - lib/eac_ruby_utils/rspec/setup/conditionals.rb
212
+ - lib/eac_ruby_utils/rspec/setup_manager.rb
202
213
  - lib/eac_ruby_utils/ruby.rb
203
214
  - lib/eac_ruby_utils/ruby/command.rb
204
215
  - lib/eac_ruby_utils/ruby/on_clean_environment.rb
@@ -230,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
241
  - !ruby/object:Gem::Version
231
242
  version: '0'
232
243
  requirements: []
233
- rubygems_version: 3.0.9
244
+ rubygems_version: 3.1.6
234
245
  signing_key:
235
246
  specification_version: 4
236
247
  summary: Utilities for E.A.C.'s Ruby projects.
@@ -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