eco-helpers 3.0.27 → 3.0.29
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/CHANGELOG.md +52 -1
- data/eco-helpers.gemspec +1 -0
- data/lib/eco/api/common/class_helpers.rb +1 -136
- data/lib/eco/api/common/loaders/config/cli.rb +1 -1
- data/lib/eco/api/common/loaders/config/session.rb +1 -1
- data/lib/eco/api/common/loaders/config/workflow.rb +1 -1
- data/lib/eco/api/common/loaders/config.rb +2 -5
- data/lib/eco/api/common/loaders/use_case/target_model.rb +1 -1
- data/lib/eco/api/common/loaders/use_case/type.rb +1 -1
- data/lib/eco/api/common/people/supervisor_helpers.rb +3 -1
- data/lib/eco/api/common/session/helpers/prompt_user.rb +3 -1
- data/lib/eco/api/common/session/logger/channels.rb +1 -0
- data/lib/eco/api/common/session/sftp.rb +9 -2
- data/lib/eco/api/session/batch/job/sets.rb +1 -0
- data/lib/eco/api/session/batch/job/type.rb +1 -0
- data/lib/eco/api/session/batch/launcher/valid_methods.rb +3 -2
- data/lib/eco/api/usecases/base_case/model.rb +2 -1
- data/lib/eco/api/usecases/base_case/type.rb +2 -1
- data/lib/eco/api/usecases/base_io/validations.rb +2 -1
- data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/commandable.rb +3 -2
- data/lib/eco/api/usecases/lib/files/file_pattern.rb +0 -2
- data/lib/eco/api/usecases/lib/files/sftp.rb +9 -6
- data/lib/eco/api/usecases/samples/drivers/sftp_sample.rb +3 -1
- data/lib/eco/api/usecases/service/sftp.rb +36 -0
- data/lib/eco/api/usecases/service.rb +15 -0
- data/lib/eco/api/usecases.rb +1 -0
- data/lib/eco/data/files/helpers.rb +4 -2
- data/lib/eco/data/fuzzy_match.rb +4 -2
- data/lib/eco/data/hashes/diff_result/meta.rb +2 -1
- data/lib/eco/data/locations/node_diff/accessors.rb +2 -1
- data/lib/eco/language/delegation/chainable_delegator.rb +18 -0
- data/lib/eco/language/delegation/delegating_blank.rb +162 -0
- data/lib/eco/language/delegation/delegating_missing.rb +104 -0
- data/lib/eco/language/delegation/delegating_missing_const.rb +53 -0
- data/lib/eco/language/delegation/delegating_missing_on_class.rb +53 -0
- data/lib/eco/language/delegation/{const_delegator.rb → for_delegator/const_delegator.rb} +8 -6
- data/lib/eco/language/delegation/{const_lookup_hooks.rb → for_delegator/const_lookup_hooks.rb} +37 -19
- data/lib/eco/language/delegation/{delegated_class.rb → for_delegator/delegated_class.rb} +6 -19
- data/lib/eco/language/delegation/for_delegator.rb +11 -0
- data/lib/eco/language/delegation.rb +6 -3
- data/lib/eco/language/klass/builder.rb +29 -0
- data/lib/eco/language/klass/helpers_built.rb +9 -0
- data/lib/eco/language/klass/hierarchy.rb +34 -0
- data/lib/eco/language/klass/inheritable_class_vars.rb +45 -0
- data/lib/eco/language/klass/naming.rb +21 -0
- data/lib/eco/language/klass/resolver.rb +30 -0
- data/lib/eco/language/klass/when_inherited.rb +10 -13
- data/lib/eco/language/klass.rb +6 -0
- data/lib/eco/language/methods.rb +0 -1
- data/lib/eco/language/strings/underscore.rb +17 -0
- data/lib/eco/language/strings.rb +8 -0
- data/lib/eco/language.rb +1 -0
- data/lib/eco/version.rb +1 -1
- metadata +35 -6
- data/lib/eco/language/methods/delegate_missing.rb +0 -30
@@ -0,0 +1,45 @@
|
|
1
|
+
module Eco::Language::Klass
|
2
|
+
module InheritableClassVars
|
3
|
+
include Naming
|
4
|
+
|
5
|
+
# Keeps track on class instance variables that should be inherited by child classes.
|
6
|
+
# @note
|
7
|
+
# - subclasses will inherit the value as is at that moment
|
8
|
+
# - any change afterwards will be only on the specific class (in line with class instance variables)
|
9
|
+
# - adapted from https://stackoverflow.com/a/10729812/4352306
|
10
|
+
# TODO: this separates the logic of the method to the instance var.
|
11
|
+
# Think if would be possible to join them somehow.
|
12
|
+
def inheritable_class_vars(*vars)
|
13
|
+
@inheritable_class_vars ||= [:inheritable_class_vars]
|
14
|
+
@inheritable_class_vars += vars
|
15
|
+
end
|
16
|
+
|
17
|
+
# Builds the attr_reader and attr_writer of `attrs` and registers
|
18
|
+
# the associated instance variable as inheritable.
|
19
|
+
def inheritable_attrs(*attrs)
|
20
|
+
attrs.each do |attr|
|
21
|
+
class_eval %(
|
22
|
+
class << self; attr_accessor :#{attr} end
|
23
|
+
), __FILE__, __LINE__ - 2
|
24
|
+
end
|
25
|
+
|
26
|
+
inheritable_class_vars(*attrs)
|
27
|
+
end
|
28
|
+
|
29
|
+
# This callback method is called whenever a subclass of the current class is created.
|
30
|
+
# @note
|
31
|
+
# - values of the instance variables are copied as they are (no dups or clones)
|
32
|
+
# - the above means: avoid methods that change the state of the mutable object on it
|
33
|
+
# - mutating methods would reflect the changes on other classes as well
|
34
|
+
# - therefore, `freeze` will be called on the values that are inherited.
|
35
|
+
def inherited(subclass)
|
36
|
+
super
|
37
|
+
|
38
|
+
inheritable_class_vars.each do |var|
|
39
|
+
instance_var = instance_variable_name(var)
|
40
|
+
value = instance_variable_get(instance_var)
|
41
|
+
subclass.instance_variable_set(instance_var, value.freeze)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Eco::Language::Klass
|
2
|
+
module Naming
|
3
|
+
# Helper to normalize `key` into a correct `ruby` **constant name**
|
4
|
+
# @param key [String, Symbol] to be normalized
|
5
|
+
# @return [String] a correct constant name
|
6
|
+
def to_constant(key)
|
7
|
+
key.to_s.strip.split(/[\-\_ ]/i).compact.map do |str|
|
8
|
+
str.slice(0).upcase + str.slice(1..-1).downcase
|
9
|
+
end.join
|
10
|
+
end
|
11
|
+
|
12
|
+
# Helper to create an instance variable `name`
|
13
|
+
# @param [String, Symbol] the name of the variable
|
14
|
+
# @reutrn [String] the name of the created instance variable
|
15
|
+
def instance_variable_name(name)
|
16
|
+
str = name.to_s
|
17
|
+
str = "@#{str}" unless str.start_with?("@")
|
18
|
+
str
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Eco::Language::Klass
|
2
|
+
module Resolver
|
3
|
+
# Creates a class and instance object methods with name `name` to resolve `klass` name
|
4
|
+
def class_resolver(name, klass)
|
5
|
+
define_singleton_method(name) { resolve_class(klass) }
|
6
|
+
define_method(name) { self.class.resolve_class(klass) }
|
7
|
+
end
|
8
|
+
|
9
|
+
# With given a `klass` name it resolves to an actual `Class`
|
10
|
+
# @return [Class] the class that was being searched by name `klass`.
|
11
|
+
def resolve_class(klass, exception: true)
|
12
|
+
@resolved ||= {}
|
13
|
+
@resolved[klass] ||=
|
14
|
+
case klass
|
15
|
+
when Class
|
16
|
+
klass
|
17
|
+
when String
|
18
|
+
begin
|
19
|
+
Kernel.const_get(klass)
|
20
|
+
rescue NameError
|
21
|
+
raise if exception
|
22
|
+
end
|
23
|
+
when Symbol
|
24
|
+
resolve_class(send(klass))
|
25
|
+
else
|
26
|
+
raise "Unknown class: #{klass}" if exception
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,18 +1,15 @@
|
|
1
|
-
module Eco
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
def inherited(subclass)
|
6
|
-
super
|
7
|
-
subclass.instance_exec(&when_inherited)
|
8
|
-
end
|
1
|
+
module Eco::Language::Klass
|
2
|
+
module WhenInherited
|
3
|
+
def inherited(subclass)
|
4
|
+
super
|
9
5
|
|
10
|
-
|
11
|
-
|
6
|
+
subclass.instance_exec(&when_inherited)
|
7
|
+
end
|
8
|
+
|
9
|
+
def when_inherited(&block)
|
10
|
+
return @when_inherited unless block_given?
|
12
11
|
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
12
|
+
@when_inherited = block
|
16
13
|
end
|
17
14
|
end
|
18
15
|
end
|
data/lib/eco/language/klass.rb
CHANGED
@@ -5,4 +5,10 @@ module Eco
|
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
+
require_relative 'klass/resolver'
|
9
|
+
require_relative 'klass/naming'
|
10
|
+
require_relative 'klass/builder'
|
11
|
+
require_relative 'klass/hierarchy'
|
8
12
|
require_relative 'klass/when_inherited'
|
13
|
+
require_relative 'klass/inheritable_class_vars'
|
14
|
+
require_relative 'klass/helpers_built'
|
data/lib/eco/language/methods.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Eco::Language::Strings
|
2
|
+
module Underscore
|
3
|
+
private
|
4
|
+
|
5
|
+
# @see https://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-underscore
|
6
|
+
def underscore(sym)
|
7
|
+
return super if defined?(super)
|
8
|
+
return sym.to_s.dup unless /[A-Z-]|::/.match?(sym)
|
9
|
+
|
10
|
+
word = sym.to_s.gsub('::', '/')
|
11
|
+
word.gsub!(/(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z\d])(?=[A-Z])/, '_')
|
12
|
+
word.tr!('-', '_')
|
13
|
+
word.downcase!
|
14
|
+
word
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/eco/language.rb
CHANGED
data/lib/eco/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eco-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-03-
|
11
|
+
date: 2025-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rake
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -898,6 +912,8 @@ files:
|
|
898
912
|
- lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb
|
899
913
|
- lib/eco/api/usecases/samples/drivers/sftp_sample.rb
|
900
914
|
- lib/eco/api/usecases/samples/drivers/url_pull_sample.rb
|
915
|
+
- lib/eco/api/usecases/service.rb
|
916
|
+
- lib/eco/api/usecases/service/sftp.rb
|
901
917
|
- lib/eco/api/usecases/use_case.rb
|
902
918
|
- lib/eco/api/usecases/use_case/chainer.rb
|
903
919
|
- lib/eco/api/usecases/use_case_chain.rb
|
@@ -987,18 +1003,29 @@ files:
|
|
987
1003
|
- lib/eco/language/basic_logger.rb
|
988
1004
|
- lib/eco/language/curry.rb
|
989
1005
|
- lib/eco/language/delegation.rb
|
990
|
-
- lib/eco/language/delegation/
|
991
|
-
- lib/eco/language/delegation/
|
992
|
-
- lib/eco/language/delegation/
|
1006
|
+
- lib/eco/language/delegation/chainable_delegator.rb
|
1007
|
+
- lib/eco/language/delegation/delegating_blank.rb
|
1008
|
+
- lib/eco/language/delegation/delegating_missing.rb
|
1009
|
+
- lib/eco/language/delegation/delegating_missing_const.rb
|
1010
|
+
- lib/eco/language/delegation/delegating_missing_on_class.rb
|
1011
|
+
- lib/eco/language/delegation/for_delegator.rb
|
1012
|
+
- lib/eco/language/delegation/for_delegator/const_delegator.rb
|
1013
|
+
- lib/eco/language/delegation/for_delegator/const_lookup_hooks.rb
|
1014
|
+
- lib/eco/language/delegation/for_delegator/delegated_class.rb
|
993
1015
|
- lib/eco/language/hash_transform.rb
|
994
1016
|
- lib/eco/language/hash_transform_modifier.rb
|
995
1017
|
- lib/eco/language/klass.rb
|
1018
|
+
- lib/eco/language/klass/builder.rb
|
1019
|
+
- lib/eco/language/klass/helpers_built.rb
|
1020
|
+
- lib/eco/language/klass/hierarchy.rb
|
1021
|
+
- lib/eco/language/klass/inheritable_class_vars.rb
|
1022
|
+
- lib/eco/language/klass/naming.rb
|
1023
|
+
- lib/eco/language/klass/resolver.rb
|
996
1024
|
- lib/eco/language/klass/when_inherited.rb
|
997
1025
|
- lib/eco/language/match.rb
|
998
1026
|
- lib/eco/language/match_modifier.rb
|
999
1027
|
- lib/eco/language/methods.rb
|
1000
1028
|
- lib/eco/language/methods/call_detector.rb
|
1001
|
-
- lib/eco/language/methods/delegate_missing.rb
|
1002
1029
|
- lib/eco/language/methods/dsl_able.rb
|
1003
1030
|
- lib/eco/language/models.rb
|
1004
1031
|
- lib/eco/language/models/class_helpers.rb
|
@@ -1006,6 +1033,8 @@ files:
|
|
1006
1033
|
- lib/eco/language/models/modifier.rb
|
1007
1034
|
- lib/eco/language/models/parser_serializer.rb
|
1008
1035
|
- lib/eco/language/models/wrap.rb
|
1036
|
+
- lib/eco/language/strings.rb
|
1037
|
+
- lib/eco/language/strings/underscore.rb
|
1009
1038
|
- lib/eco/language/values_at.rb
|
1010
1039
|
- lib/eco/version.rb
|
1011
1040
|
homepage: https://www.ecoportal.com
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Language
|
3
|
-
module Methods
|
4
|
-
module DelegateMissing
|
5
|
-
def delegate_missing_to(meth)
|
6
|
-
@delegate_missing_to = meth
|
7
|
-
end
|
8
|
-
|
9
|
-
def method_missing(method_name, *args, **kargs, &block)
|
10
|
-
super unless (receiver = object_missing_delegated_to)
|
11
|
-
|
12
|
-
receiver.send(method_name, *args, **kargs, &block)
|
13
|
-
end
|
14
|
-
|
15
|
-
def respond_to_missing?(method_name, include_private = false)
|
16
|
-
super
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
# retrieve the delegate_missing_to object
|
22
|
-
def object_missing_delegated_to
|
23
|
-
return unless @delegate_missing_to
|
24
|
-
|
25
|
-
method(@delegate_missing_to).call
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|