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 +4 -4
- data/lib/eac_ruby_utils/envs/executable.rb +15 -3
- data/lib/eac_ruby_utils/gems_registry.rb +35 -0
- data/lib/eac_ruby_utils/gems_registry/gem.rb +75 -0
- data/lib/eac_ruby_utils/recursive_builder.rb +51 -0
- data/lib/eac_ruby_utils/rspec/default_setup.rb +20 -0
- data/lib/eac_ruby_utils/rspec/setup.rb +16 -0
- data/lib/eac_ruby_utils/rspec/setup/conditionals.rb +17 -0
- data/lib/eac_ruby_utils/rspec/setup_manager.rb +44 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- metadata +18 -7
- data/lib/eac_ruby_utils/rspec/conditional.rb +0 -35
- data/lib/eac_ruby_utils/rspec/stubbed_ssh.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 262c5b03a02ac07effc5ccac5108cbdc513aa73d61174a895416b8e954992da5
|
4
|
+
data.tar.gz: 4e7cc39170e0701152949c01ff4c645a92f4a4c768a3bd42785be48e8ae0e303
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 \"#{
|
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(
|
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(
|
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
|
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.
|
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-
|
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.
|
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.
|
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/
|
201
|
-
- lib/eac_ruby_utils/rspec/
|
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.
|
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
|