Class: AWS::S3::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/aws/s3/connection.rb

Overview

:nodoc:

Defined Under Namespace

Modules: Management Classes: Options

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Connection

Creates a new connection. Connections make the actual requests to S3, though these requests are usually called from subclasses of Base.

For details on establishing connections, check the Connection::Management::ClassMethods.



21
22
23
24
# File 'lib/aws/s3/connection.rb', line 21

def initialize(options = {})
  @options = Options.new(options)
  connect
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object (private)



143
144
145
# File 'lib/aws/s3/connection.rb', line 143

def method_missing(method, *args, &block)
  options[method] || super
end

Instance Attribute Details

#access_key_idObject (readonly)

Returns the value of attribute access_key_id.



15
16
17
# File 'lib/aws/s3/connection.rb', line 15

def access_key_id
  @access_key_id
end

#httpObject (readonly)

Returns the value of attribute http.



15
16
17
# File 'lib/aws/s3/connection.rb', line 15

def http
  @http
end

#optionsObject (readonly)

Returns the value of attribute options.



15
16
17
# File 'lib/aws/s3/connection.rb', line 15

def options
  @options
end

#secret_access_keyObject (readonly)

Returns the value of attribute secret_access_key.



15
16
17
# File 'lib/aws/s3/connection.rb', line 15

def secret_access_key
  @secret_access_key
end

Class Method Details

.connect(options = {}) ⇒ Object



5
6
7
# File 'lib/aws/s3/connection.rb', line 5

def connect(options = {})
  new(options)
end

.prepare_path(path) ⇒ Object



9
10
11
12
# File 'lib/aws/s3/connection.rb', line 9

def prepare_path(path)
  path = path.remove_extended unless path.utf8?
  URI.escape(path)
end

Instance Method Details

#persistent?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/aws/s3/connection.rb', line 76

def persistent?
  options[:persistent]
end

#protocol(options = {}) ⇒ Object



80
81
82
# File 'lib/aws/s3/connection.rb', line 80

def protocol(options = {})
  (options[:use_ssl] || http.use_ssl?) ? 'https://' : 'http://'
end

#request(verb, path, headers = {}, body = nil, attempts = 0, current_host = nil, &block) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/aws/s3/connection.rb', line 26

def request(verb, path, headers = {}, body = nil, attempts = 0, current_host = nil, &block)
  body.rewind if body.respond_to?(:rewind) unless attempts.zero?      
  
  requester = Proc.new do 
    path    = self.class.prepare_path(path)
    request = request_method(verb).new(path, headers)
    ensure_content_type!(request)
    add_user_agent!(request)
    set_host!(request, current_host)
    authenticate!(request, current_host)
    if body
      if body.respond_to?(:read)                                                                
        request.body_stream    = body                                                           
        request.content_length = body.respond_to?(:lstat) ? body.lstat.size : body.size         
      else                                                                                      
        request.body = body                                                                     
      end                                                                                       
    end

    http.request(request, &block)
  end
  
  if persistent?
    http.start unless http.started?
    requester.call
  else
    http.start(&requester)
  end
rescue Errno::EPIPE, Timeout::Error, Errno::EPIPE, Errno::EINVAL
  @http = create_connection
  attempts == 3 ? raise : (attempts += 1; retry)
end

#subdomainObject



71
72
73
74
# File 'lib/aws/s3/connection.rb', line 71

def subdomain
  subdomain = http.address.gsub("#{DEFAULT_HOST}", "").gsub(/.$/,'')
  subdomain.empty? ? nil : subdomain
end

#url_for(path, options = {}) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/aws/s3/connection.rb', line 59

def url_for(path, options = {})
  authenticate = options.delete(:authenticated)
  # Default to true unless explicitly false
  authenticate = true if authenticate.nil? 
  path         = self.class.prepare_path(path)
  request      = request_method(:get).new(path, {})
  query_string = query_string_authentication(request, options)
  returning "#{protocol(options)}#{http.address}#{port_string}#{path}" do |url|
    url << "?#{query_string}" if authenticate
  end
end