class FileFM::Uploaders::Cloudfiles

Public Class Methods

upload(source, destination, options) { |size| ... } click to toggle source
# File lib/filefm/uploaders/cloudfiles.rb, line 5
def self.upload(source, destination, options)
  uri = URI.parse(destination)
  container = uri.host
  object = uri.path

  if (not options[:username] or not options[:password])
    raise "Invalid Credentials"
  end
  secure = options[:secure] == true 
  scheme = "https"
  username = options[:username]
  password = options[:password]

  #puts "#{scheme}://#{uri.host}/auth/v1.0"
  out = RestClient.get "#{scheme}://auth.api.rackspacecloud.com/v1.0", 'X-Auth-User' => username, 'X-Auth-Key' => password
  storage_url = out.headers[:x_storage_url]
  auth_token = out.headers[:x_auth_token]
  raise "Error authenticating" unless out.code == 204
  
  begin
    out = RestClient.get storage_url + "/#{container}", 'X-Auth-Token' => auth_token
  rescue
    raise "Error accessing the container: #{container}"  
  end

  if options[:progressbar]
    pbar = ProgressBar.new "Progress", 100
    fsize = File.size(source)
    count = 0
  end

  headers = { 'X-Auth-Token' => auth_token, 'Content-Type' => "application/json" }
  path = storage_url + "/#{container}#{object}"

  res = FileFM::StreamingUploader.put(
      path,
      :headers => { 'X-Auth-Token' => auth_token }, :file => File.open(source) 
  ) do |size|
      if block_given?
        yield size
      elsif options[:progressbar]
       count += size
       per = (100*count)/fsize 
       pbar.set per
      else
      end
    end
  if options[:progressbar]
    pbar.finish
  end
end