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