class Dragonfly::ScpDataStore::DataStore
Public Class Methods
new(options = {})
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 20 def initialize(options = {}) self.host = options[:host] self.username = options[:username] self.password = options[:password] self.folder = options[:folder] self.base_url = options[:base_url] end
Public Instance Methods
destroy(uid)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 47 def destroy(uid) true end
retrieve(uid)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 36 def retrieve(uid) uri = URI(base_url + uid) response = Net::HTTP.get_response(uri) if response.is_a? Net::HTTPSuccess [response.body, { }] else raise DataNotFound end end
store(temp_object, opts={})
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 28 def store(temp_object, opts={}) uid = generate_uid(temp_object.name || 'file') process_file(temp_object.file.path, uid) uid end
Private Instance Methods
chmod(file, mode = 755)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 75 def chmod(file, mode = 755) exec("chmod #{mode} #{file}") end
create_remote_folder(folder)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 71 def create_remote_folder(folder) exec("mkdir -m 777 -p #{folder}") end
exec(command)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 85 def exec(command) Net::SSH.start(host, username, password: password) do |ssh| ssh.exec!(command) end end
generate_uid(file)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 52 def generate_uid(file) name = File.basename(file, '.*').parameterize extension = File.extname(file).downcase time = Time.now.strftime '%Y/%m/%d/%H/%M' hash = SecureRandom.hex(5) "#{time}/#{hash}/#{name}#{extension}" end
process_file(file, uid)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 62 def process_file(file, uid) remote_file = folder + uid remote_folder = File.dirname(remote_file) create_remote_folder(remote_folder) upload_file(file, remote_file) chmod(remote_file) end
upload_file(path, remote_path)
click to toggle source
# File lib/dragonfly/scp_data_store.rb, line 79 def upload_file(path, remote_path) Net::SCP.start(host, username, password: password) do |scp| scp.upload!(path, remote_path) end end