Class: S3FTP::Driver
- Inherits:
-
Object
- Object
- S3FTP::Driver
- Defined in:
- lib/s3ftp/driver.rb
Constant Summary collapse
- USER =
0
- PASS =
1
- ADMIN =
2
Instance Method Summary collapse
- #authenticate(user, pass, &block) ⇒ Object
- #bytes(path, &block) ⇒ Object
- #change_dir(path, &block) ⇒ Object
- #delete_dir(path, &block) ⇒ Object
- #delete_file(path, &block) ⇒ Object
- #dir_contents(path, &block) ⇒ Object
- #get_file(path, &block) ⇒ Object
-
#initialize(key, secret, bucket) ⇒ Driver
constructor
A new instance of Driver.
- #make_dir(path, &block) ⇒ Object
- #put_file(path, tmp_path, &block) ⇒ Object
- #rename(from, to, &block) ⇒ Object
Constructor Details
#initialize(key, secret, bucket) ⇒ Driver
Returns a new instance of Driver.
12 13 14 |
# File 'lib/s3ftp/driver.rb', line 12 def initialize(key, secret, bucket) @aws_key, @aws_secret, @aws_bucket = key, secret, bucket end |
Instance Method Details
#authenticate(user, pass, &block) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/s3ftp/driver.rb', line 37 def authenticate(user, pass, &block) download_passwd_file do |passwd| @users = extract_users(passwd) if @users[user] && @users[user][:pass] == pass @user = user yield true else yield false end end end |
#bytes(path, &block) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/s3ftp/driver.rb', line 50 def bytes(path, &block) key = scoped_path(path) on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield response.response_header["CONTENT_LENGTH"].to_i } item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.head(:retry_count => 0, :on_success => on_success, :on_error => on_error) end |
#change_dir(path, &block) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/s3ftp/driver.rb', line 16 def change_dir(path, &block) prefix = scoped_path(path) item = Happening::S3::Bucket.new(@aws_bucket, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret, :prefix => prefix, :delimiter => "/") item.get do |response| yield contains_directory?(response.response, prefix) end end |
#delete_dir(path, &block) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/s3ftp/driver.rb', line 101 def delete_dir(path, &block) prefix = scoped_path(path) on_error = Proc.new {|response| yield false } item = Happening::S3::Bucket.new(@aws_bucket, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret, :prefix => prefix) item.get(:on_error => on_error) do |response| keys = bucket_list_to_full_keys(response.response) delete_object = Proc.new { |key, iter| item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.delete(:retry_count => 1, :on_error => on_error) do |response| iter.next end } on_complete = Proc.new { yield true } EM::Iterator.new(keys, 5).each(delete_object, on_complete) end end |
#delete_file(path, &block) ⇒ Object
91 92 93 94 95 96 97 98 99 |
# File 'lib/s3ftp/driver.rb', line 91 def delete_file(path, &block) key = scoped_path(path) on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield true } item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.delete(:retry_count => 1, :on_success => on_success, :on_error => on_error) end |
#dir_contents(path, &block) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/s3ftp/driver.rb', line 25 def dir_contents(path, &block) prefix = scoped_path_with_trailing_slash(path) on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield response.response_header["CONTENT_LENGTH"].to_i } item = Happening::S3::Bucket.new(@aws_bucket, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret, :prefix => prefix, :delimiter => "/") item.get do |response| yield parse_bucket_list(response.response) end end |
#get_file(path, &block) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/s3ftp/driver.rb', line 60 def get_file(path, &block) key = scoped_path(path) # open a tempfile to store the file as it's downloaded from S3. # em-ftpd will close it for us tmpfile = Tempfile.new("s3ftp") on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| tmpfile.flush tmpfile.seek(0) yield tmpfile } item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.get(:retry_count => 1, :on_success => on_success, :on_error => on_error).stream do |chunk| tmpfile.write chunk end end |
#make_dir(path, &block) ⇒ Object
136 137 138 139 140 141 142 143 144 |
# File 'lib/s3ftp/driver.rb', line 136 def make_dir(path, &block) key = scoped_path(path) + "/.dir" on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield true } item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.put("", :retry_count => 0, :on_success => on_success, :on_error => on_error) end |
#put_file(path, tmp_path, &block) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/s3ftp/driver.rb', line 80 def put_file(path, tmp_path, &block) key = scoped_path(path) bytes = File.size(tmp_path) on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield bytes } item = Happening::S3::Item.new(@aws_bucket, key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.put(File.binread(tmp_path), :retry_count => 0, :on_success => on_success, :on_error => on_error) end |
#rename(from, to, &block) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/s3ftp/driver.rb', line 121 def rename(from, to, &block) source_key = scoped_path(from) source_obj = @aws_bucket + "/" + source_key dest_key = scoped_path(to) on_error = Proc.new {|response| yield false } on_success = Proc.new {|response| yield true } item = Happening::S3::Item.new(@aws_bucket, dest_key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.put(nil, :retry_count => 1, :on_error => on_error, :headers => {"x-amz-copy-source" => source_obj}) do |response| item = Happening::S3::Item.new(@aws_bucket, source_key, :aws_access_key_id => @aws_key, :aws_secret_access_key => @aws_secret) item.delete(:retry_count => 1, :on_success => on_success, :on_error => on_error) end end |