lib/stockboy/providers/ftp/sftp_adapter.rb
require 'net/sftp'
module Stockboy::Providers
class FTP::SFTPAdapter
attr_reader :client
def initialize(provider)
@provider = provider
@file_dir = "."
end
def open
result = nil
Net::SFTP.start(@provider.host, @provider.username, password: @provider.password) do |sftp|
@client = sftp
result = yield self
end
result
end
def chdir(directory)
@file_dir = ::File.join(directory, '')
end
def list_files
client.dir.entries(@file_dir).map(&:name).sort
end
def delete(file_name)
client.remove!(full_path(file_name))
end
def download(file_name)
client.download!(full_path(file_name))
end
def modification_time(file_name)
(mtime = stat(file_name).mtime) && Time.at(mtime)
end
def size(file_name)
stat(file_name).size
end
private
def full_path(file_name)
::File.join(@file_dir, file_name)
end
def stat(file_name)
client.file.open(full_path(file_name)).stat
end
def self.exception_class
Net::SFTP::Exception
end
end
end