lib/eco/api/usecases/default_cases/samples/sftp_case.rb in eco-helpers-2.6.4 vs lib/eco/api/usecases/default_cases/samples/sftp_case.rb in eco-helpers-2.7.0
- old
+ new
@@ -1,18 +1,20 @@
+# rubocop:disable Naming/AccessorMethodName
class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase
class WrongConst < ArgumentError; end
class MissRemoteFolder < ArgumentError; end
require_relative 'cli/sftp_cli'
name "sftp"
type :other
- CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/
+ CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/.freeze
- def main(session, options, usecase)
+ def main(session, options, _usecase)
options[:end_get] = false
raise "The SFTP is not configured" unless session.sftp?
+
case options.dig(:sftp, :command)
when :list
list_folder
when :get
get_files
@@ -27,15 +29,19 @@
# Can't pass this via CLI option, as it breaks the regular expression
def file_pattern(require: true)
fpc = file_pattern_const
return fpc if fpc
- raise WrongConst, "(#{self.class}) You should redefine the file_pattern function as a RegEx expression that matches the target remote file" if require
+ return unless require
+
+ msg = "(#{self.class}) You should redefine the file_pattern function "
+ msg << "as a RegEx expression that matches the target remote file"
+ raise WrongConst, msg
end
def file_pattern_const
- if fpc = options.dig(:sftp, :file_pattern_const)
+ if (fpc = options.dig(:sftp, :file_pattern_const))
raise WrongConst, "(#{self.class}) Invalid file pattern const referral: #{fpc}" unless fpc.match(CONST_REFERRAL)
begin
self.eval(fpc)
rescue NameError
self.class.const_get(fpc)
@@ -47,40 +53,46 @@
# Ex: "/IN/Personnel"
def remote_subfolder(require: true)
rm_sf = options.dig(:sftp, :remote_subfolder)
return rm_sf if rm_sf
- raise MissRemoteFolder, "(#{self.class}) You should redefine remote_subfolder as the folder where the target file sits. Ex: /IN/Personnel" if require
+ return unless require
+
+ msg = "(#{self.class}) You should redefine remote_subfolder "
+ msg << "as the folder where the target file sits. Ex: /IN/Personnel"
+ raise MissRemoteFolder, msg
end
# `remote_target_folder` overrides `sftp_config.remote_folder` as well as `remote_subfolder`
# `remote_folder` overrides `sftp_config.remote_folder` but NOT `remote_subfolder`
def remote_folder
rm_tf = options.dig(:sftp, :remote_target_folder)
rm_fd = options.dig(:sftp, :remote_folder) || sftp_config.remote_folder
- rm_tf || File.join(rm_fd, remote_subfolder)
+ rm_tf || [rm_fd, remote_subfolder].compact.join('/')
end
def to_remote_path(file)
File.join(remote_folder, file)
end
def local_folder
options.dig(:sftp, :local_folder) || "."
end
- def with_remote_files
- begin
- sftp.files(remote_folder, pattern: file_pattern).each do |remote_file|
- yield(remote_file) if block_given?
- end
- rescue ArgumentError
- raise
- rescue ::Net::SFTP::StatusException => e
- logger.error("(#{self.class}) There was an error trying to access the remote folder '#{remote_folder}'")
- []
+ def with_remote_files(folder: self.remote_folder, pattern: self.file_pattern)
+ sftp.files(folder, pattern: pattern).each do |remote_file|
+ yield(remote_file) if block_given?
end
+ rescue ArgumentError
+ raise
+ rescue ::Net::SFTP::StatusException => err
+ log(:error) {
+ msg = "(#{self.class}) There was an error trying to access "
+ msg << "the remote folder '#{remote_folder}': #{err}"
+ msg
+ }
+ []
end
def list_folder
puts "Listing remote folder: '#{remote_folder}' (host: #{sftp.host}):"
with_remote_files {|file| puts file.longname}
@@ -137,5 +149,7 @@
def sftp
session.sftp
end
end
+
+# rubocop:enable Naming/AccessorMethodName