Class: Stree::Connection

Inherits:
Object
  • Object
show all
Includes:
Parser
Defined in:
lib/stree/connection.rb

Overview

Class responsible for handling connections to amazon hosts

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Parser

#parse_copy_object_result, #parse_error, #parse_list_all_my_buckets_result, #parse_list_bucket_result, #parse_location_constraint, #rexml_document

Constructor Details

#initialize(options = {}) ⇒ Connection

Parameters:

options

Hash of options

Options:

access_key_id

access key id

secret_access_key

secret access key

use_ssl

optional, defaults to false

debug

optional, defaults to false

timeout

optional, for Net::HTTP



19
20
21
22
23
24
25
# File 'lib/stree/connection.rb', line 19

def initialize(options = {})
  @access_key_id = options[:access_key_id]
  @secret_access_key = options[:secret_access_key]
  @use_ssl = options[:use_ssl] || false
  @debug = options[:debug]
  @timeout = options[:timeout]
end

Instance Attribute Details

#access_key_idObject

Returns the value of attribute access_key_id.



7
8
9
# File 'lib/stree/connection.rb', line 7

def access_key_id
  @access_key_id
end

#debugObject

Returns the value of attribute debug.



7
8
9
# File 'lib/stree/connection.rb', line 7

def debug
  @debug
end

#secret_access_keyObject

Returns the value of attribute secret_access_key.



7
8
9
# File 'lib/stree/connection.rb', line 7

def secret_access_key
  @secret_access_key
end

#timeoutObject

Returns the value of attribute timeout.



7
8
9
# File 'lib/stree/connection.rb', line 7

def timeout
  @timeout
end

#use_sslObject Also known as: use_ssl?

Returns the value of attribute use_ssl.



7
8
9
# File 'lib/stree/connection.rb', line 7

def use_ssl
  @use_ssl
end

Class Method Details

.parse_headers(headers) ⇒ Object

Helper function to change headers from symbols, to in correct form (i.e. with ‘-’ instead of ‘_’)

Parameters:

headers

Hash of pairs headername => value, where value can be Range (for Range header) or any other value which can be translated to string

Returns:

Hash of headers translated from symbol to string, containing only interesting headers



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/stree/connection.rb', line 107

def self.parse_headers(headers)
  interesting_keys = [:content_type, :x_amz_acl, :range,
                      :if_modified_since, :if_unmodified_since,
                      :if_match, :if_none_match,
                      :content_disposition, :content_encoding,
                      :x_amz_copy_source, :x_amz_metadata_directive,
                      :x_amz_copy_source_if_match,
                      :x_amz_copy_source_if_none_match,
                      :x_amz_copy_source_if_unmodified_since,
                      :x_amz_copy_source_if_modified_since]

  parsed_headers = {}
  if headers
    headers.each do |key, value|
      if interesting_keys.include?(key)
        parsed_key = key.to_s.gsub("_", "-")
        parsed_value = value
        case value
        when Range
          parsed_value = "bytes=#{value.first}-#{value.last}"
        end
        parsed_headers[parsed_key] = parsed_value
      end
    end
  end
  parsed_headers
end

.parse_params(params) ⇒ Object

Helper function to parser parameters and create single string of params added to questy string

Parameters:

params: Hash of parameters if form key => value|nil

Returns:

String – containing all parameters joined in one params string, i.e. param1=val&param2&param3=0



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/stree/connection.rb', line 78

def self.parse_params(params)
  interesting_keys = [:max_keys, :prefix, :marker, :delimiter, :location]

  result = []
  params.each do |key, value|
    if interesting_keys.include?(key)
      parsed_key = key.to_s.gsub("_", "-")
      case value
      when nil
        result << parsed_key
      else
        result << "#{parsed_key}=#{value}"
      end
    end
  end
  result.join("&")
end

Instance Method Details

#request(method, options) ⇒ Object

Makes request with given HTTP method, sets missing parameters, adds signature to request header and returns response object (Net::HTTPResponse)

Parameters:

method

HTTP Method symbol, can be :get, :put, :delete

options

hash of options

Options:

host

hostname to connecto to, optional, defaults to s3.amazonaws.com

path

path to send request to, required, throws ArgumentError if not given

body

request body, only meaningful for :put request

params

parameters to add to query string for request, can be String or Hash

headers

Hash of headers fields to add to request header

Returns:

Net::HTTPResponse object – response from remote server



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/stree/connection.rb', line 44

def request(method, options)
  host = options[:host] || HOST
  path = options[:path] or raise ArgumentError.new("no path given")
  body = options[:body]
  params = options[:params]
  headers = options[:headers]

  if params
    params = params.is_a?(String) ? params : self.class.parse_params(params)
    path << "?#{params}"
  end

  path = URI.escape(path)
  request = request_class(method).new(path)

  headers = self.class.parse_headers(headers)
  headers.each do |key, value|
    request[key] = value
  end

  request.body = body

  send_request(host, request)
end