lib/eco/api/usecases/default_cases/samples/sftp_case.rb in eco-helpers-2.5.8 vs lib/eco/api/usecases/default_cases/samples/sftp_case.rb in eco-helpers-2.5.9

- old
+ new

@@ -1,13 +1,12 @@ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase name "sftp-sample" type :other - attr_reader :session, :options + CONST_REFERRAL = /^(?:::)?(?:[A-Z][a-zA-Z0-9_]*(?:::[A-Z][a-zA-Z0-9_]*)*)$/ def main(session, options, usecase) - @session = session; @options = options options[:end_get] = false raise "The SFTP is not configured" unless session.sftp? case options.dig(:sftp, :command) when :list list_folder @@ -20,23 +19,47 @@ end end private + # Can't pass this via CLI option, as it breaks the regular expression def file_pattern + fpc = file_pattern_const + return fpc if fpc raise "You should redefine the file_pattern function as a RegEx expression that matches the target remote file" end + def file_pattern_const + if fpc = options.dig(:sftp, :file_pattern_const) + raise "Invalid file pattern const referral: #{fpc}" unless fpc.match(CONST_REFERRAL) + self.eval(fpc) + end + end + # Ex: "/IN/Personnel" def remote_subfolder + rm_sf = options.dig(:sftp, :remote_subfolder) + return rm_sf if rm_sf raise "You should redefine remote_subfolder as the folder where the target file sits. Ex: /IN/Personnel" end - def archive_subfolder - "Archive" + # `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) 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 @@ -90,19 +113,11 @@ puts "Could not move file #{source}" end end end - def to_remote_path(file) - remote_folder + "/" + file - end - - def local_folder - options.dig(:sftp, :local_folder) || "." - end - - def remote_folder - @remote_folder ||= sftp_config.remote_folder + remote_subfolder + def archive_subfolder + "Archive" end def sftp_config session.config.sftp end