eco-helpers 3.0.22 → 3.0.23

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: c24fea5e80af03052ddec1ce701651a61e7575d812161ff4f62f8f70c29da1d1
4
- data.tar.gz: 2c72186bf780afd1b706eb0fbf44669cd68ac1239e0ba95f923462190a08d85d
3
+ metadata.gz: 18bddd2602bd39dc28068e4a107a55a88d3d125edc9da7f103d1c55aca7fdc5a
4
+ data.tar.gz: 0dc6a9cbba0634f16c11334461dc769aebe58d79d8bdf638133f789269bdcb45
5
5
  SHA512:
6
- metadata.gz: 4bf253ab9cc07090b25ffcec1ff853422e292ce4fe1dcddab026bead5ef48d5a4710d55f79b4a16477c6671d764296938374c6f18521e27ac808529eb1435fa7
7
- data.tar.gz: 28da9eaed628e6e37c22b5dc3c703867c9941eac6ea2d364142823ffa3e00e86ed54d45648b75231b4e93f86aff666f5a69892cc9255260af4c2c6953b6483bd
6
+ metadata.gz: bae5d14a1360c8659d26d2fa6289112256c535a831a6390d302034d7536bb6a52e87861faf35a3bf24baf117576cfd8b1fd2c17ceed65f0369a93bb313446f80
7
+ data.tar.gz: 9b6ce31b296d103763366613958dc1a9a5a7744d8f4c8bf87c6560223ad6adf6cb5863af9d5f9d47e45fd801cf20e62d3815e4c0a12eb0a8e6d95ad191d35f80
data/CHANGELOG.md CHANGED
@@ -2,7 +2,17 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [3.0.22] - 2024-12-xx
5
+ ## [3.0.23] - 2025-02-xx
6
+
7
+ ### Added
8
+
9
+ ### Changed
10
+
11
+ - Moved SFTP sample to **new** space `Samples`
12
+
13
+ ### Fixed
14
+
15
+ ## [3.0.22] - 2025-02-23
6
16
 
7
17
  ### Added
8
18
 
data/eco-helpers.gemspec CHANGED
@@ -48,6 +48,7 @@ Gem::Specification.new do |spec|
48
48
  spec.add_dependency 'fuzzy_match', '>= 2.1.0', '< 2.2'
49
49
  spec.add_dependency 'hashdiff', '>= 1.1.0', '< 1.2'
50
50
  spec.add_dependency 'jaro_winkler', '>= 1.5.6', '< 1.6'
51
+ spec.add_dependency 'net-http', '~> 0.6.0'
51
52
  spec.add_dependency 'net-sftp', '>= 4.0.0', '< 5'
52
53
  spec.add_dependency 'net-ssh', '>= 7.2.1', '< 8'
53
54
  spec.add_dependency 'nokogiri', '>= 1.13', '< 1.17'
@@ -55,6 +56,7 @@ Gem::Specification.new do |spec|
55
56
  spec.add_dependency 'roo-xls', '>= 1.2.0', '< 1.3'
56
57
  spec.add_dependency 'rubyzip', '>= 2.3.2', '< 2.4'
57
58
  spec.add_dependency 'sendgrid-ruby', '~> 6.7.0'
59
+ # spec.add_dependency 'uri', '~> 1.0', '>= 1.0.3'
58
60
  end
59
61
 
60
62
  # rubocop:enable Gemspec/DevelopmentDependencies
@@ -23,7 +23,7 @@ module Eco
23
23
  raise if exception
24
24
  end
25
25
  when Symbol
26
- resolve_class(self.send(klass))
26
+ resolve_class(send(klass))
27
27
  else
28
28
  raise "Unknown class: #{klass}" if exception
29
29
  end
@@ -120,6 +120,7 @@ module Eco
120
120
  class << self; attr_accessor :#{attr} end
121
121
  ), __FILE__, __LINE__ - 2
122
122
  end
123
+
123
124
  inheritable_class_vars(*attrs)
124
125
  end
125
126
 
@@ -0,0 +1,3 @@
1
+ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::UseCases::Samples::Drivers::Sftp
2
+ end
3
+
@@ -9,4 +9,4 @@ module Eco
9
9
  end
10
10
  end
11
11
 
12
- require_relative 'samples/sftp_case'
12
+ require_relative 'samples/sftp'
@@ -1,4 +1,4 @@
1
- class Eco::API::UseCases::DefaultCases::Samples::Sftp
1
+ class Eco::API::UseCases::Samples::Drivers::Sftp
2
2
  class Cli < Eco::API::UseCases::Cli
3
3
  desc "SFTP case: manages remote files that match a file pattern"
4
4
 
@@ -0,0 +1,15 @@
1
+ class Eco::API::UseCases::Samples::Drivers::UrlPull
2
+ class Cli < Eco::API::UseCases::Cli
3
+ desc "Url Pull sample: pull the file from a specific URL"
4
+
5
+ add_option("-target-url-const", "Constant that should be used as a pattern") do |options|
6
+ url_const = SCR.get_arg("-target-url-const", with_param: true)
7
+ options.deep_merge!(url_pull: {target_url_const: url_const})
8
+ end
9
+
10
+ add_option("-local-folder", "Local folder to pull the remote files to.") do |options|
11
+ local_folder = SCR.get_file("-local-folder", required: true, should_exist: true)
12
+ options.deep_merge!(url_pull: {local_folder: local_folder})
13
+ end
14
+ end
15
+ end
@@ -1,17 +1,17 @@
1
1
  # rubocop:disable Naming/AccessorMethodName
2
- class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase
2
+ class Eco::API::UseCases::Samples::Drivers::Sftp < Eco::API::Common::Loaders::UseCase
3
3
  class WrongConst < ArgumentError; end
4
4
  class MissRemoteFolder < ArgumentError; end
5
5
 
6
6
  require_relative 'cli/sftp_cli'
7
- name "sftp"
7
+ name 'sftp'
8
8
  type :other
9
9
 
10
10
  CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/
11
11
 
12
12
  def main(session, options, _usecase)
13
13
  options[:end_get] = false
14
- raise "The SFTP is not configured" unless session.sftp?
14
+ raise 'The SFTP is not configured' unless session.sftp?
15
15
 
16
16
  case options.dig(:sftp, :command)
17
17
  when :list
@@ -34,7 +34,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
34
34
  return unless require
35
35
 
36
36
  msg = "(#{self.class}) You should redefine the file_pattern function "
37
- msg << "as a RegEx expression that matches the target remote file"
37
+ msg << 'as a RegEx expression that matches the target remote file'
38
38
  raise WrongConst, msg
39
39
  end
40
40
 
@@ -52,7 +52,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
52
52
  raise WrongConst, "(#{self.class}) Unknown constant: #{fpc}"
53
53
  end
54
54
 
55
- # Ex: "/IN/Personnel"
55
+ # Ex: '/IN/Personnel'
56
56
  def remote_subfolder(require: true)
57
57
  rm_sf = options.dig(:sftp, :remote_subfolder)
58
58
 
@@ -60,7 +60,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
60
60
  return unless require
61
61
 
62
62
  msg = "(#{self.class}) You should redefine remote_subfolder "
63
- msg << "as the folder where the target file sits. Ex: /IN/Personnel"
63
+ msg << 'as the folder where the target file sits. Ex: /IN/Personnel'
64
64
  raise MissRemoteFolder, msg
65
65
  end
66
66
 
@@ -77,7 +77,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
77
77
  end
78
78
 
79
79
  def local_folder
80
- options.dig(:sftp, :local_folder) || "."
80
+ options.dig(:sftp, :local_folder) || '.'
81
81
  end
82
82
 
83
83
  def with_remote_files(folder: remote_folder, pattern: file_pattern)
@@ -147,7 +147,7 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loader
147
147
  end
148
148
 
149
149
  def archive_subfolder
150
- "Archive"
150
+ 'Archive'
151
151
  end
152
152
 
153
153
  def sftp_config
@@ -0,0 +1,110 @@
1
+ class Eco::API::UseCases::Samples::Drivers::UrlPull < Eco::API::Common::Loaders::UseCase
2
+ class WrongConst < ArgumentError; end
3
+ # class MissRemoteFolder < ArgumentError; end
4
+
5
+ require_relative 'cli/url_pull_cli'
6
+ name 'url-pull'
7
+ type :other
8
+
9
+ CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/
10
+
11
+ def main(*_args)
12
+ options[:end_get] = false
13
+ require_dependencies
14
+
15
+ if (response = get(URI(target_url), **auth_params))
16
+ to_csv(response.body, out_filename)
17
+ else
18
+ log(:error) { "Could not pull from url: #{target_url}" }
19
+ exit 1
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def require_dependencies
26
+ require 'net/http'
27
+ require 'uri'
28
+ require 'csv'
29
+ # require 'dotenv/load'
30
+ end
31
+
32
+ # Override this method to obtain authentication
33
+ # i.e. { user: ENV['KEY']}
34
+ def auth_params
35
+ {}
36
+ end
37
+
38
+ def get(uri, **kargs)
39
+ base_request(uri, **kargs) do |request|
40
+ http_start(uri) do |http|
41
+ puts "Pulling from url: #{uri}"
42
+ return http.request(request)
43
+ end
44
+ end
45
+ end
46
+
47
+ def to_csv(plain_data, filename)
48
+ data = CSV.parse(plain_data)
49
+
50
+ CSV.open(filename, 'w') do |csv|
51
+ data.each do |line|
52
+ csv << line
53
+ end
54
+ end
55
+
56
+ log(:info) { "Generated output file: #{filename}" }
57
+ end
58
+
59
+ def request_options(uri)
60
+ {
61
+ use_ssl: uri.scheme == 'https'
62
+ }
63
+ end
64
+
65
+ def http_start(uri, &block)
66
+ Net::HTTP.start(uri.hostname, uri.port, request_options(uri), &block)
67
+ end
68
+
69
+ def base_request(uri, user: nil, pass: '')
70
+ Net::HTTP::Get.new(uri).tap do |request|
71
+ request.basic_auth(user, pass) unless user.nil?
72
+ yield(request)
73
+ end
74
+ end
75
+
76
+ def out_filename
77
+ File.join(local_folder, "#{file_basename}.csv")
78
+ end
79
+
80
+ def file_basename
81
+ config.active_enviro
82
+ end
83
+
84
+ def local_folder
85
+ options.dig(:url_pull, :local_folder) || '.'
86
+ end
87
+
88
+ def target_url(required: true)
89
+ fpc = target_url_const
90
+ return fpc if fpc
91
+ return unless required
92
+
93
+ msg = "(#{self.class}) You should redefine the target_url method "
94
+ raise WrongConst, msg
95
+ end
96
+
97
+ def target_url_const
98
+ if (fpc = options.dig(:url_pull, :target_url_const))
99
+ raise WrongConst, "(#{self.class}) Invalid file pattern const referral: #{fpc}" unless fpc.match(CONST_REFERRAL)
100
+
101
+ begin
102
+ self.eval(fpc)
103
+ rescue NameError
104
+ self.class.const_get(fpc)
105
+ end
106
+ end
107
+ rescue NameError
108
+ raise WrongConst, "(#{self.class}) Unknown constant: #{fpc}"
109
+ end
110
+ end
@@ -0,0 +1,13 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class Samples
5
+ module Drivers
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'drivers/sftp_sample'
13
+ require_relative 'drivers/url_pull_sample'
@@ -0,0 +1,11 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class Samples < Eco::API::UseCases
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'samples/drivers'
11
+
@@ -176,8 +176,9 @@ require_relative 'usecases/use_case_chain'
176
176
  require_relative 'usecases/base_io'
177
177
  require_relative 'usecases/use_case_io'
178
178
  require_relative 'usecases/cli'
179
- require_relative 'usecases/default_cases'
180
179
  require_relative 'usecases/graphql'
180
+ require_relative 'usecases/default'
181
+ require_relative 'usecases/samples'
182
+ require_relative 'usecases/default_cases' # legacy
181
183
  require_relative 'usecases/ooze_samples'
182
184
  require_relative 'usecases/ooze_cases'
183
- require_relative 'usecases/default'
@@ -1,6 +1,13 @@
1
1
  module Eco
2
2
  module Language
3
3
  module Methods
4
+ # Adds #evaluate, which will run `&block` where `DslAble` has been included.
5
+ # @note
6
+ # 1. If a method is missing on the evaluation object, it will re-try it on
7
+ # on the block context.
8
+ # 2. **Override behaviour**: the above gives precedence to
9
+ # methods defined in the context of the object that evaluates,
10
+ # over those in the block context.
4
11
  module DslAble
5
12
  # It runs the `block` within this object context
6
13
  # @note if the object misses any method, redirects the method to the
data/lib/eco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = '3.0.22'.freeze
2
+ VERSION = '3.0.23'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eco-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.22
4
+ version: 3.0.23
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-02-24 00:00:00.000000000 Z
11
+ date: 2025-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -374,6 +374,20 @@ dependencies:
374
374
  - - "<"
375
375
  - !ruby/object:Gem::Version
376
376
  version: '1.6'
377
+ - !ruby/object:Gem::Dependency
378
+ name: net-http
379
+ requirement: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - "~>"
382
+ - !ruby/object:Gem::Version
383
+ version: 0.6.0
384
+ type: :runtime
385
+ prerelease: false
386
+ version_requirements: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - "~>"
389
+ - !ruby/object:Gem::Version
390
+ version: 0.6.0
377
391
  - !ruby/object:Gem::Dependency
378
392
  name: net-sftp
379
393
  requirement: !ruby/object:Gem::Requirement
@@ -784,8 +798,7 @@ files:
784
798
  - lib/eco/api/usecases/default_cases/entries_to_csv_case.rb
785
799
  - lib/eco/api/usecases/default_cases/hris_case.rb
786
800
  - lib/eco/api/usecases/default_cases/samples.rb
787
- - lib/eco/api/usecases/default_cases/samples/cli/sftp_cli.rb
788
- - lib/eco/api/usecases/default_cases/samples/sftp_case.rb
801
+ - lib/eco/api/usecases/default_cases/samples/sftp.rb
789
802
  - lib/eco/api/usecases/default_cases/to_csv_case.rb
790
803
  - lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb
791
804
  - lib/eco/api/usecases/default_cases/update_case.rb
@@ -873,6 +886,12 @@ files:
873
886
  - lib/eco/api/usecases/ooze_samples/register_migration_case.rb
874
887
  - lib/eco/api/usecases/ooze_samples/register_update_case.rb
875
888
  - lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb
889
+ - lib/eco/api/usecases/samples.rb
890
+ - lib/eco/api/usecases/samples/drivers.rb
891
+ - lib/eco/api/usecases/samples/drivers/cli/sftp_cli.rb
892
+ - lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb
893
+ - lib/eco/api/usecases/samples/drivers/sftp_sample.rb
894
+ - lib/eco/api/usecases/samples/drivers/url_pull_sample.rb
876
895
  - lib/eco/api/usecases/use_case.rb
877
896
  - lib/eco/api/usecases/use_case/chainer.rb
878
897
  - lib/eco/api/usecases/use_case_chain.rb