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