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)



162
163
164
# File 'lib/aws/s3/connection.rb', line 162

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.valid_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
83
84
85
86
87
88
89
# File 'lib/aws/s3/connection.rb', line 80

def protocol(options = {})
  # This always trumps http.use_ssl?
  if options[:use_ssl] == false 
    'http://'
  elsif options[:use_ssl] || http.use_ssl?
    'https://'
  else
    'http://'
  end
end

#request(verb, path, headers = {}, body = nil, attempts = 0, &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, &block)
  body.rewind if body.respond_to?(:rewind) unless attempts.zero?      
  
  requester = Proc.new do 
    path    = self.class.prepare_path(path) if attempts.zero? # Only escape the path once
    request = request_method(verb).new(path, headers)
    ensure_content_type!(request)
    add_user_agent!(request)
    authenticate!(request)
    if body
      if body.respond_to?(:read)                                                                
        request.body_stream = body                                                           
      else                                                                                      
        request.body = body                                                                     
      end
      request.content_length = body.respond_to?(:lstat) ? body.stat.size : body.size         
    else
      request.content_length = 0                                                                                       
    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::EINVAL, EOFError, Errno::ECONNRESET
  @http = create_connection
  attempts == 3 ? raise : (attempts += 1; retry)
end

#subdomainObject



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

def subdomain
  http.address[/^([^.]+).#{DEFAULT_HOST}$/, 1]
end

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



59
60
61
62
63
64
65
66
67
68
69
70
# 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_segments = permissible_request_parameters(options)
  query_segments << query_string_authentication(request, options) if authenticate
  url = "#{protocol(options)}#{http.address}#{port_string}#{path}"
  url << (url['?'] ? '&' : '?') << query_segments.join('&') unless query_segments.empty?
  url
end