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