lib/s3/right_s3.rb in icehouse-right_aws-1.11.0 vs lib/s3/right_s3.rb in icehouse-right_aws-2.2.0
- old
+ new
@@ -57,11 +57,10 @@
# Params is a hash:
#
# {:server => 's3.amazonaws.com' # Amazon service host: 's3.amazonaws.com'(default)
# :port => 443 # Amazon service port: 80 or 443(default)
# :protocol => 'https' # Amazon service protocol: 'http' or 'https'(default)
- # :multi_thread => true|false # Multi-threaded (connection per each thread): true or false(default)
# :logger => Logger Object} # Logger instance: logs to STDOUT if omitted }
def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
@interface = S3Interface.new(aws_access_key_id, aws_secret_access_key, params)
end
@@ -215,29 +214,26 @@
# Same as +keys+ method but return an array of [keys, service_data].
# where +service_data+ is a hash with additional output information.
#
# keys, service = bucket.keys_and_service({'max-keys'=> 2, 'prefix' => 'logs'})
# p keys #=> # 2 keys array
- # p service #=> {"max-keys"=>"2", "prefix"=>"logs", "name"=>"my_awesome_bucket", "marker"=>"", "is_truncated"=>true}
+ # p service #=> {"max-keys"=>"2", "prefix"=>"logs", "name"=>"my_awesome_bucket", "marker"=>"", "is_truncated"=>true, :common_prefixes=>[]}
#
def keys_and_service(options={}, head=false)
opt = {}; options.each{ |key, value| opt[key.to_s] = value }
- service_data = {}
thislist = {}
list = []
@s3.interface.incrementally_list_bucket(@name, opt) do |thislist|
thislist[:contents].each do |entry|
owner = Owner.new(entry[:owner_id], entry[:owner_display_name])
key = Key.new(self, entry[:key], nil, {}, {}, entry[:last_modified], entry[:e_tag], entry[:size], entry[:storage_class], owner)
key.head if head
list << key
end
end
- thislist.each_key do |key|
- service_data[key] = thislist[key] unless (key == :contents || key == :common_prefixes)
- end
- [list, service_data]
+ thislist.delete(:contents)
+ [list, thislist]
end
# Retrieve key information from Amazon.
# The +key_name+ is a +String+ or Key instance.
# Retrieves meta-header information if +head+ is +true+.
@@ -247,11 +243,11 @@
# # is the same as:
# key = RightAws::S3::Key.create(bucket, 'logs/today/1.log')
# key.head
#
def key(key_name, head=false)
- raise 'Key name can not be empty.' if key_name.blank?
+ raise 'Key name can not be empty.' if key_name.right_blank?
key_instance = nil
# if this key exists - find it ....
keys({'prefix'=>key_name}, head).each do |key|
if key.name == key_name.to_s
key_instance = key
@@ -344,13 +340,14 @@
# Delete a bucket. Bucket must be empty.
# If +force+ is set, clears and deletes the bucket.
# Returns +true+.
#
- # bucket.delete(true) #=> true
+ # bucket.delete(:force => true) #=> true
#
- def delete(force=false)
+ def delete(options={})
+ force = options.is_a?(Hash) && options[:force]==true
force ? @s3.interface.force_delete_bucket(@name) : @s3.interface.delete_bucket(@name)
end
# Return a list of grantees.
#
@@ -458,11 +455,35 @@
#
def data
get if !@data and exists?
@data
end
+
+ # Getter for the 'content-type' metadata
+ def content_type
+ @headers['content-type'] if @headers
+ end
+ # Helper to get and URI-decode a header metadata.
+ # Metadata have to be HTTP encoded (rfc2616) as we use the Amazon S3 REST api
+ # see http://docs.amazonwebservices.com/AmazonS3/latest/index.html?UsingMetadata.html
+ def decoded_meta_headers(key = nil)
+ if key
+ # Get one metadata value by its key
+ URI.decode(@meta_headers[key.to_s])
+ else
+ # Get a hash of all metadata with a decoded value
+ @decoded_meta_headers ||= begin
+ metadata = {}
+ @meta_headers.each do |key, value|
+ metadata[key.to_sym] = URI.decode(value)
+ end
+ metadata
+ end
+ end
+ end
+
# Retrieve object data and attributes from Amazon.
# Returns a +String+.
#
def get(headers={})
response = @bucket.s3.interface.get(@bucket.name, @name, headers)
@@ -624,11 +645,11 @@
# Returns +true+.
#
# key.delete #=> true
#
def delete
- raise 'Key name must be specified.' if @name.blank?
+ raise 'Key name must be specified.' if @name.right_blank?
@bucket.s3.interface.delete(@bucket, @name)
end
# Return a list of grantees.
#
@@ -757,11 +778,11 @@
#
def initialize(thing, id, perms=[], action=:refresh, name=nil)
@thing = thing
@id = id
@name = name
- @perms = perms.to_a
+ @perms = Array(perms)
case action
when :apply then apply
when :refresh then refresh
when :apply_and_refresh then apply; refresh
end
@@ -1060,10 +1081,10 @@
def initialize(bucket, name, meta_headers={})
@bucket = bucket
@name = name.to_s
@meta_headers = meta_headers
- raise 'Key name can not be empty.' if @name.blank?
+ raise 'Key name can not be empty.' if @name.right_blank?
end
# Generate link to PUT key data.
#
# puts bucket.put('logs/today/1.log', '123', 2.hour) #=> https://s3.amazonaws.com:443/my_awesome_bucket/logs%2Ftoday%2F1.log?Signature=B...D&Expires=1180820032&AWSAccessKeyId=1...2