class FileLoaders::Adapters::Sftp
Public Instance Methods
each() { |filename, entry| ... }
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 6 def each tempdir = make_tempdir Net::SFTP.start settings.host, settings.user do |sftp| entries(sftp).each do |entry| filename = download!(sftp, entry, tempdir) move_to_processed(sftp, entry) if yield(filename, entry) end end ensure FileUtils.remove_dir(tempdir, true) end
Private Instance Methods
download!(sftp, entry, tempdir)
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 34 def download!(sftp, entry, tempdir) ::File.join(tempdir, ::File.basename(entry)).tap do |filename| sftp.download!(entry, filename) end end
entries(sftp)
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 20 def entries(sftp) dir = sftp.dir patterns.flat_map do |mask| dir.entries(settings.source_dir) .select { |e| match? e, mask } .map { |e| ::File.join(settings.source_dir, e.name) } end end
make_tempdir()
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 46 def make_tempdir "/tmp/#{Dir::Tmpname.make_tmpname('sftp', nil)}".tap do |name| FileUtils.mkdir_p name end end
match?(entry, mask)
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 30 def match?(entry, mask) !entry.directory? && ::File.fnmatch?(mask, entry.name, ::File::FNM_PATHNAME) end
move_to_processed(sftp, entry)
click to toggle source
# File lib/file_loaders/adapters/sftp.rb, line 40 def move_to_processed(sftp, entry) processed_path = ::File.join(settings.processed_dir, ::File.basename(entry)) sftp.remove(processed_path) sftp.rename!(entry, processed_path) end