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