Class: Kurosawa::Filesystems::S3

Inherits:
Base
  • Object
show all
Defined in:
lib/kurosawa/filesystems/s3.rb

Instance Method Summary collapse

Constructor Details

#initialize(access_key_id:, secret_access_key:, region:, endpoint:, bucket:, force_path_style: false) ⇒ S3

Returns a new instance of S3.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/kurosawa/filesystems/s3.rb', line 8

def initialize(access_key_id:,secret_access_key:,region:,endpoint:,bucket:,force_path_style:false)

	options = {
		:access_key_id => URI.encode(access_key_id),
		:secret_access_key => URI.decode(secret_access_key),
		:region => region,
		:force_path_style => force_path_style
	}
	options[:endpoint] = endpoint if endpoint

	@s3 = Aws::S3::Client.new(options)
	@bucket_name = bucket
	@bucket = Aws::S3::Bucket.new(bucket, client: @s3)
end

Instance Method Details

#cleanup!Object



69
70
# File 'lib/kurosawa/filesystems/s3.rb', line 69

def cleanup!
end

#del(key) ⇒ Object



57
58
59
60
61
# File 'lib/kurosawa/filesystems/s3.rb', line 57

def del(key)
	key.gsub!(/^\/+/, "")
	puts "s3:del #{key}"
	@s3.delete_object(bucket: @bucket_name, key: key)
end

#exists(key) ⇒ Object



63
64
65
66
67
# File 'lib/kurosawa/filesystems/s3.rb', line 63

def exists(key)
	key.gsub!(/^\/+/, "")
	puts "s3:exists #{key}"
	@bucket.objects[key].exists?
end

#get(key) ⇒ Object



44
45
46
47
48
49
# File 'lib/kurosawa/filesystems/s3.rb', line 44

def get(key)
	key.gsub!(/^\/+/, "")
	puts "s3:get #{key}"
	resp = @s3.get_object(bucket: @bucket_name, key: key)
	resp.body.read
end

#ls(prefix) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/kurosawa/filesystems/s3.rb', line 23

def ls(prefix)
	prefix.gsub!(/^\/+/, "")
	puts "s3:ls #{prefix}"
	result = []
	next_marker = nil
	loop do
		options = {
			bucket: @bucket_name,
			marker: next_marker
		}

		options[:prefix] = prefix if prefix.length != 0

		resp = @s3.list_objects(options);
		result += resp.contents.map { |x| "/#{x.key}" }
		break if resp.next_marker == nil
		next_marker = resp.next_marker
	end
	result
end

#put(key, value) ⇒ Object



51
52
53
54
55
# File 'lib/kurosawa/filesystems/s3.rb', line 51

def put(key, value)
	key.gsub!(/^\/+/, "")
	puts "s3:put #{key}"
	@s3.put_object(bucket: @bucket_name, key: key, body: value)
end