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 +4 -4
- data/CHANGELOG.md +11 -1
- data/eco-helpers.gemspec +2 -0
- data/lib/eco/api/common/class_helpers.rb +2 -1
- data/lib/eco/api/usecases/default_cases/samples/sftp.rb +3 -0
- data/lib/eco/api/usecases/default_cases/samples.rb +1 -1
- data/lib/eco/api/usecases/{default_cases/samples → samples/drivers}/cli/sftp_cli.rb +1 -1
- data/lib/eco/api/usecases/samples/drivers/cli/url_pull_cli.rb +15 -0
- data/lib/eco/api/usecases/{default_cases/samples/sftp_case.rb → samples/drivers/sftp_sample.rb} +8 -8
- data/lib/eco/api/usecases/samples/drivers/url_pull_sample.rb +110 -0
- data/lib/eco/api/usecases/samples/drivers.rb +13 -0
- data/lib/eco/api/usecases/samples.rb +11 -0
- data/lib/eco/api/usecases.rb +3 -2
- data/lib/eco/language/methods/dsl_able.rb +7 -0
- data/lib/eco/version.rb +1 -1
- metadata +23 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18bddd2602bd39dc28068e4a107a55a88d3d125edc9da7f103d1c55aca7fdc5a
|
4
|
+
data.tar.gz: 0dc6a9cbba0634f16c11334461dc769aebe58d79d8bdf638133f789269bdcb45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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(
|
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,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
|
data/lib/eco/api/usecases/{default_cases/samples/sftp_case.rb → samples/drivers/sftp_sample.rb}
RENAMED
@@ -1,17 +1,17 @@
|
|
1
1
|
# rubocop:disable Naming/AccessorMethodName
|
2
|
-
class Eco::API::UseCases::
|
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
|
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
|
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 <<
|
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:
|
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 <<
|
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
|
-
|
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
|
data/lib/eco/api/usecases.rb
CHANGED
@@ -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
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.
|
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-
|
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/
|
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
|