Class: RightAws::S3::Key
- Inherits:
-
Object
- Object
- RightAws::S3::Key
- Defined in:
- lib/s3/right_s3.rb
Instance Attribute Summary collapse
-
#bucket ⇒ Object
readonly
Returns the value of attribute bucket.
-
#data ⇒ Object
Return Key data.
-
#e_tag ⇒ Object
readonly
Returns the value of attribute e_tag.
-
#headers ⇒ Object
Returns the value of attribute headers.
-
#last_modified ⇒ Object
readonly
Returns the value of attribute last_modified.
-
#meta_headers ⇒ Object
Returns the value of attribute meta_headers.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#owner ⇒ Object
readonly
Returns the value of attribute owner.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#storage_class ⇒ Object
readonly
Returns the value of attribute storage_class.
Class Method Summary collapse
- .add_meta_prefix(meta_headers, prefix = S3Interface::AMAZON_METADATA_PREFIX) ⇒ Object
-
.create(bucket, name, data = nil, meta_headers = {}) ⇒ Object
Create a new Key instance, but do not create the actual key.
-
.split_meta(headers) ⇒ Object
Separate Amazon meta headers from other headers.
Instance Method Summary collapse
-
#content_type ⇒ Object
Getter for the ‘content-type’ metadata.
-
#copy(new_key_or_name) ⇒ Object
Create an object copy.
-
#decoded_meta_headers(key = nil) ⇒ Object
Helper to get and URI-decode a header metadata.
-
#delete ⇒ Object
Remove key from bucket.
-
#exists? ⇒ Boolean
Check for existence of the key in the given bucket.
-
#full_name(separator = '/') ⇒ Object
Return the full S3 path to this key (bucket/key).
-
#get(headers = {}) ⇒ Object
Retrieve object data and attributes from Amazon.
-
#grantees ⇒ Object
Return a list of grantees.
-
#head ⇒ Object
Updates headers and meta-headers from S3.
-
#initialize(bucket, name, data = nil, headers = {}, meta_headers = {}, last_modified = nil, e_tag = nil, size = nil, storage_class = nil, owner = nil) ⇒ Key
constructor
Create a new Key instance, but do not create the actual key.
-
#move(new_key_or_name) ⇒ Object
Move an object to other location.
-
#public_link ⇒ Object
Return a public link to a key.
-
#put(data = nil, perms = nil, headers = {}) ⇒ Object
Store object data on S3.
-
#refresh(head = true) ⇒ Object
Retrieve key info from bucket and update attributes.
-
#reload_meta ⇒ Object
Reload meta-headers only.
-
#rename(new_name) ⇒ Object
Rename an object.
-
#save_meta(meta_headers) ⇒ Object
Replace meta-headers by new hash at S3.
-
#to_s ⇒ Object
Return key name as a String.
Constructor Details
#initialize(bucket, name, data = nil, headers = {}, meta_headers = {}, last_modified = nil, e_tag = nil, size = nil, storage_class = nil, owner = nil) ⇒ Key
Create a new Key instance, but do not create the actual key. In normal use this method should not be called directly. Use RightAws::S3::Key.create or bucket.key() instead.
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
# File 'lib/s3/right_s3.rb', line 409 def initialize(bucket, name, data=nil, headers={}, ={}, last_modified=nil, e_tag=nil, size=nil, storage_class=nil, owner=nil) raise 'Bucket must be a Bucket instance.' unless bucket.is_a?(Bucket) @bucket = bucket @name = name @data = data @e_tag = e_tag @size = size.to_i @storage_class = storage_class @owner = owner @last_modified = last_modified if @last_modified && !@last_modified.is_a?(Time) @last_modified = Time.parse(@last_modified) end @headers, @meta_headers = self.class.(headers) @meta_headers.merge!() end |
Instance Attribute Details
#bucket ⇒ Object (readonly)
Returns the value of attribute bucket.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def bucket @bucket end |
#data ⇒ Object
Return Key data. Retrieve this data from Amazon if it is the first time call. TODO TRB 6/19/07 What does the above mean? Clarify.
456 457 458 459 |
# File 'lib/s3/right_s3.rb', line 456 def data get if !@data and exists? @data end |
#e_tag ⇒ Object (readonly)
Returns the value of attribute e_tag.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def e_tag @e_tag end |
#headers ⇒ Object
Returns the value of attribute headers.
363 364 365 |
# File 'lib/s3/right_s3.rb', line 363 def headers @headers end |
#last_modified ⇒ Object (readonly)
Returns the value of attribute last_modified.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def last_modified @last_modified end |
#meta_headers ⇒ Object
Returns the value of attribute meta_headers.
363 364 365 |
# File 'lib/s3/right_s3.rb', line 363 def @meta_headers end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def name @name end |
#owner ⇒ Object (readonly)
Returns the value of attribute owner.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def owner @owner end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def size @size end |
#storage_class ⇒ Object (readonly)
Returns the value of attribute storage_class.
362 363 364 |
# File 'lib/s3/right_s3.rb', line 362 def storage_class @storage_class end |
Class Method Details
.add_meta_prefix(meta_headers, prefix = S3Interface::AMAZON_METADATA_PREFIX) ⇒ Object
379 380 381 382 383 384 385 386 387 388 389 |
# File 'lib/s3/right_s3.rb', line 379 def self.(, prefix=S3Interface::AMAZON_METADATA_PREFIX) = {} .each do |, value| if [/#{prefix}/] [] = value else ["#{S3Interface::AMAZON_METADATA_PREFIX}#{}"] = value end end end |
.create(bucket, name, data = nil, meta_headers = {}) ⇒ Object
401 402 403 |
# File 'lib/s3/right_s3.rb', line 401 def self.create(bucket, name, data=nil, ={}) new(bucket, name, data, {}, ) end |
.split_meta(headers) ⇒ Object
Separate Amazon meta headers from other headers
367 368 369 370 371 372 373 374 375 376 377 |
# File 'lib/s3/right_s3.rb', line 367 def self.(headers) #:nodoc: hash = headers.dup = {} hash.each do |key, value| if key[/^#{S3Interface::AMAZON_METADATA_PREFIX}/] [key.gsub(S3Interface::AMAZON_METADATA_PREFIX,'')] = value hash.delete(key) end end [hash, ] end |
Instance Method Details
#content_type ⇒ Object
Getter for the ‘content-type’ metadata
462 463 464 |
# File 'lib/s3/right_s3.rb', line 462 def content_type @headers['content-type'] if @headers end |
#copy(new_key_or_name) ⇒ Object
Create an object copy. Returns a destination RightAws::S3::Key instance.
# Key instance as destination
key1 = RightAws::S3::Key.create(bucket, 'logs/today/1.log') #=> #<RightAws::S3::Key:0xb7b1e240 ... >
key2 = RightAws::S3::Key.create(bucket, 'logs/today/2.log') #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key1.put('Olala!') #=> true
key1.copy(key2) #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key1.exists? #=> true
key2.exists? #=> true
puts key2.data #=> 'Olala!'
# String as destination
key = RightAws::S3::Key.create(bucket, 'logs/today/777.log') #=> #<RightAws::S3::Key:0xb7b1e240 ... >
key.put('Olala!') #=> true
new_key = key.copy('logs/today/888.log') #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key.exists? #=> true
new_key.exists? #=> true
543 544 545 546 547 |
# File 'lib/s3/right_s3.rb', line 543 def copy(new_key_or_name) new_key_or_name = Key.create(@bucket, new_key_or_name.to_s) unless new_key_or_name.is_a?(Key) @bucket.s3.interface.copy(@bucket.name, @name, new_key_or_name.bucket.name, new_key_or_name.name) new_key_or_name end |
#decoded_meta_headers(key = nil) ⇒ Object
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 docs.amazonwebservices.com/AmazonS3/latest/index.html?UsingMetadata.html
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'lib/s3/right_s3.rb', line 469 def (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 = {} @meta_headers.each do |key, value| [key.to_sym] = URI.decode(value) end end end end |
#delete ⇒ Object
Remove key from bucket. Returns true
.
key.delete #=> true
649 650 651 652 |
# File 'lib/s3/right_s3.rb', line 649 def delete raise 'Key name must be specified.' if @name.right_blank? @bucket.s3.interface.delete(@bucket, @name) end |
#exists? ⇒ Boolean
640 641 642 |
# File 'lib/s3/right_s3.rb', line 640 def exists? @bucket.key(self).last_modified ? true : false end |
#full_name(separator = '/') ⇒ Object
Return the full S3 path to this key (bucket/key).
key.full_name #=> 'my_awesome_bucket/cool_key'
440 441 442 |
# File 'lib/s3/right_s3.rb', line 440 def full_name(separator='/') "#{@bucket.to_s}#{separator}#{@name}" end |
#get(headers = {}) ⇒ Object
Retrieve object data and attributes from Amazon. Returns a String
.
488 489 490 491 492 493 494 |
# File 'lib/s3/right_s3.rb', line 488 def get(headers={}) response = @bucket.s3.interface.get(@bucket.name, @name, headers) @data = response[:object] @headers, @meta_headers = self.class.(response[:headers]) refresh(false) @data end |
#grantees ⇒ Object
Return a list of grantees.
656 657 658 |
# File 'lib/s3/right_s3.rb', line 656 def grantees Grantee::grantees(self) end |
#head ⇒ Object
Updates headers and meta-headers from S3. Returns true
.
key. #=> {"family"=>"qwerty"}
key.head #=> true
key. #=> {"family"=>"qwerty", "name"=>"asdfg"}
607 608 609 610 |
# File 'lib/s3/right_s3.rb', line 607 def head @headers, @meta_headers = self.class.(@bucket.s3.interface.head(@bucket, @name)) true end |
#move(new_key_or_name) ⇒ Object
Move an object to other location. Returns a destination RightAws::S3::Key instance.
# Key instance as destination
key1 = RightAws::S3::Key.create(bucket, 'logs/today/1.log') #=> #<RightAws::S3::Key:0xb7b1e240 ... >
key2 = RightAws::S3::Key.create(bucket, 'logs/today/2.log') #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key1.put('Olala!') #=> true
key1.move(key2) #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key1.exists? #=> false
key2.exists? #=> true
puts key2.data #=> 'Olala!'
# String as destination
key = RightAws::S3::Key.create(bucket, 'logs/today/777.log') #=> #<RightAws::S3::Key:0xb7b1e240 ... >
key.put('Olala!') #=> true
new_key = key.move('logs/today/888.log') #=> #<RightAws::S3::Key:0xb7b5e240 ... >
key.exists? #=> false
new_key.exists? #=> true
567 568 569 570 571 |
# File 'lib/s3/right_s3.rb', line 567 def move(new_key_or_name) new_key_or_name = Key.create(@bucket, new_key_or_name.to_s) unless new_key_or_name.is_a?(Key) @bucket.s3.interface.move(@bucket.name, @name, new_key_or_name.bucket.name, new_key_or_name.name) new_key_or_name end |
#public_link ⇒ Object
Return a public link to a key.
key.public_link #=> 'https://s3.amazonaws.com:443/my_awesome_bucket/cool_key'
448 449 450 451 |
# File 'lib/s3/right_s3.rb', line 448 def public_link params = @bucket.s3.interface.params "#{params[:protocol]}://#{params[:server]}:#{params[:port]}/#{full_name('/')}" end |
#put(data = nil, perms = nil, headers = {}) ⇒ Object
506 507 508 509 510 511 |
# File 'lib/s3/right_s3.rb', line 506 def put(data=nil, perms=nil, headers={}) headers['x-amz-acl'] = perms if perms @data = data || @data = self.class.(@meta_headers) @bucket.s3.interface.put(@bucket.name, @name, @data, .merge(headers)) end |
#refresh(head = true) ⇒ Object
Retrieve key info from bucket and update attributes. Refresh meta-headers (by calling head
method) if head
is set. Returns true
if the key exists in bucket and false
otherwise.
key = RightAws::S3::Key.create(bucket, 'logs/today/1.log')
key.e_tag #=> nil
key. #=> {}
key.refresh #=> true
key.e_tag #=> '12345678901234567890bf11094484b6'
key. #=> {"family"=>"qwerty", "name"=>"asdfg"}
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
# File 'lib/s3/right_s3.rb', line 584 def refresh(head=true) new_key = @bucket.key(self) @last_modified = new_key.last_modified @e_tag = new_key.e_tag @size = new_key.size @storage_class = new_key.storage_class @owner = new_key.owner if @last_modified self.head true else @headers = @meta_headers = {} false end end |
#reload_meta ⇒ Object
Reload meta-headers only. Returns meta-headers hash.
key. #=> {"family"=>"qwerty", "name"=>"asdfg"}
616 617 618 |
# File 'lib/s3/right_s3.rb', line 616 def @meta_headers = self.class.(@bucket.s3.interface.head(@bucket, @name)).last end |
#rename(new_name) ⇒ Object
520 521 522 523 |
# File 'lib/s3/right_s3.rb', line 520 def rename(new_name) @bucket.s3.interface.rename(@bucket.name, @name, new_name) @name = new_name end |
#save_meta(meta_headers) ⇒ Object
Replace meta-headers by new hash at S3. Returns new meta-headers hash.
key. #=> {"family"=>"qwerty", "name"=>"asdfg"}
key. #=> {"family"=>"oops", "race" => "troll"}
key. #=> {"family"=>"oops", "race" => "troll"}
626 627 628 629 630 |
# File 'lib/s3/right_s3.rb', line 626 def () = self.class.() @bucket.s3.interface.copy(@bucket.name, @name, @bucket.name, @name, :replace, ) @meta_headers = self.class.()[1] end |