· 7 years ago · Nov 28, 2018, 07:26 PM
1require 'fog'
2
3module AWS
4 class Client
5 def initialize( options={} )
6 @access_key = options.delete( :access_key ) or raise "AWS::Client requires an :access_key"
7 @secret_key = options.delete( :secret_key ) or raise "AWS::Client requires a :secret_key"
8 @bucket_name = options.delete( :bucket_name ) or raise "AWS::Client requires a :bucket_name"
9 @aws_region = options.delete( :aws_region )
10 end
11
12 def get( filename )
13 bucket.files.get filename
14 end
15
16 def read( filename )
17 get( filename ).body rescue "Can't read file at #{filename}"
18 end
19
20 def write( filename, body )
21 if file = get( filename )
22 file.body = body
23 file.save
24 else
25 storage.put_object @bucket_name, filename, body, headers
26 end
27 end
28
29 protected
30
31 def headers
32 { 'x-amz-acl' => 'public-read' }
33 end
34
35 def bucket
36 @bucket ||= storage.directories.get @bucket_name
37 end
38
39 def storage
40 @storage ||= begin
41 storage = Fog::Storage.new :provider => 'AWS',
42 :aws_access_key_id => @access_key,
43 :aws_secret_access_key => @secret_key,
44 :region => @aws_region
45 storage.sync_clock
46 storage
47 end
48 end
49 end
50end