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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -1
  3. data/eco-helpers.gemspec +1 -0
  4. data/lib/eco/api/common/class_helpers.rb +1 -136
  5. data/lib/eco/api/common/loaders/config/cli.rb +1 -1
  6. data/lib/eco/api/common/loaders/config/session.rb +1 -1
  7. data/lib/eco/api/common/loaders/config/workflow.rb +1 -1
  8. data/lib/eco/api/common/loaders/config.rb +2 -5
  9. data/lib/eco/api/common/loaders/use_case/target_model.rb +1 -1
  10. data/lib/eco/api/common/loaders/use_case/type.rb +1 -1
  11. data/lib/eco/api/common/people/supervisor_helpers.rb +3 -1
  12. data/lib/eco/api/common/session/helpers/prompt_user.rb +3 -1
  13. data/lib/eco/api/common/session/logger/channels.rb +1 -0
  14. data/lib/eco/api/common/session/sftp.rb +9 -2
  15. data/lib/eco/api/session/batch/job/sets.rb +1 -0
  16. data/lib/eco/api/session/batch/job/type.rb +1 -0
  17. data/lib/eco/api/session/batch/launcher/valid_methods.rb +3 -2
  18. data/lib/eco/api/usecases/base_case/model.rb +2 -1
  19. data/lib/eco/api/usecases/base_case/type.rb +2 -1
  20. data/lib/eco/api/usecases/base_io/validations.rb +2 -1
  21. data/lib/eco/api/usecases/graphql/helpers/location/command/diffs/stages/commandable.rb +3 -2
  22. data/lib/eco/api/usecases/lib/files/file_pattern.rb +0 -2
  23. data/lib/eco/api/usecases/lib/files/sftp.rb +9 -6
  24. data/lib/eco/api/usecases/samples/drivers/sftp_sample.rb +3 -1
  25. data/lib/eco/api/usecases/service/sftp.rb +36 -0
  26. data/lib/eco/api/usecases/service.rb +15 -0
  27. data/lib/eco/api/usecases.rb +1 -0
  28. data/lib/eco/data/files/helpers.rb +4 -2
  29. data/lib/eco/data/fuzzy_match.rb +4 -2
  30. data/lib/eco/data/hashes/diff_result/meta.rb +2 -1
  31. data/lib/eco/data/locations/node_diff/accessors.rb +2 -1
  32. data/lib/eco/language/delegation/chainable_delegator.rb +18 -0
  33. data/lib/eco/language/delegation/delegating_blank.rb +162 -0
  34. data/lib/eco/language/delegation/delegating_missing.rb +104 -0
  35. data/lib/eco/language/delegation/delegating_missing_const.rb +53 -0
  36. data/lib/eco/language/delegation/delegating_missing_on_class.rb +53 -0
  37. data/lib/eco/language/delegation/{const_delegator.rb → for_delegator/const_delegator.rb} +8 -6
  38. data/lib/eco/language/delegation/{const_lookup_hooks.rb → for_delegator/const_lookup_hooks.rb} +37 -19
  39. data/lib/eco/language/delegation/{delegated_class.rb → for_delegator/delegated_class.rb} +6 -19
  40. data/lib/eco/language/delegation/for_delegator.rb +11 -0
  41. data/lib/eco/language/delegation.rb +6 -3
  42. data/lib/eco/language/klass/builder.rb +29 -0
  43. data/lib/eco/language/klass/helpers_built.rb +9 -0
  44. data/lib/eco/language/klass/hierarchy.rb +34 -0
  45. data/lib/eco/language/klass/inheritable_class_vars.rb +45 -0
  46. data/lib/eco/language/klass/naming.rb +21 -0
  47. data/lib/eco/language/klass/resolver.rb +30 -0
  48. data/lib/eco/language/klass/when_inherited.rb +10 -13
  49. data/lib/eco/language/klass.rb +6 -0
  50. data/lib/eco/language/methods.rb +0 -1
  51. data/lib/eco/language/strings/underscore.rb +17 -0
  52. data/lib/eco/language/strings.rb +8 -0
  53. data/lib/eco/language.rb +1 -0
  54. data/lib/eco/version.rb +1 -1
  55. metadata +35 -6
  56. 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 Language
3
- module Klass
4
- module WhenInherited
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
- def when_inherited(&block)
11
- return @when_inherited unless block_given?
6
+ subclass.instance_exec(&when_inherited)
7
+ end
8
+
9
+ def when_inherited(&block)
10
+ return @when_inherited unless block_given?
12
11
 
13
- @when_inherited = block
14
- end
15
- end
12
+ @when_inherited = block
16
13
  end
17
14
  end
18
15
  end
@@ -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'
@@ -6,5 +6,4 @@ module Eco
6
6
  end
7
7
 
8
8
  require_relative 'methods/call_detector'
9
- require_relative 'methods/delegate_missing'
10
9
  require_relative 'methods/dsl_able'
@@ -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
@@ -0,0 +1,8 @@
1
+ module Eco
2
+ module Language
3
+ module Strings
4
+ end
5
+ end
6
+ end
7
+
8
+ require_relative 'strings/underscore'
data/lib/eco/language.rb CHANGED
@@ -3,6 +3,7 @@ module Eco
3
3
  end
4
4
  end
5
5
 
6
+ require_relative 'language/strings'
6
7
  require_relative 'language/klass'
7
8
  require_relative 'language/methods'
8
9
  require_relative 'language/models'
data/lib/eco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = '3.0.27'.freeze
2
+ VERSION = '3.0.29'.freeze
3
3
  end
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.27
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-28 00:00:00.000000000 Z
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/const_delegator.rb
991
- - lib/eco/language/delegation/const_lookup_hooks.rb
992
- - lib/eco/language/delegation/delegated_class.rb
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