Class: SwiftClient

Inherits:
Object
  • Object
show all
Defined in:
lib/swift_client.rb,
lib/swift_client/version.rb

Defined Under Namespace

Classes: AuthenticationError, EmptyNameError, OptionError, ResponseError, TempUrlKeyMissing

Constant Summary collapse

VERSION =
"0.0.5"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ SwiftClient



29
30
31
32
33
34
35
36
37
# File 'lib/swift_client.rb', line 29

def initialize(options = {})
  [:auth_url, :username, :api_key].each do |key|
    raise(OptionError, "#{key} is missing") unless options.key?(key)
  end

  self.options = options

  authenticate
end

Instance Attribute Details

#auth_tokenObject

Returns the value of attribute auth_token.



27
28
29
# File 'lib/swift_client.rb', line 27

def auth_token
  @auth_token
end

#optionsObject

Returns the value of attribute options.



27
28
29
# File 'lib/swift_client.rb', line 27

def options
  @options
end

#storage_urlObject

Returns the value of attribute storage_url.



27
28
29
# File 'lib/swift_client.rb', line 27

def storage_url
  @storage_url
end

Instance Method Details

#delete_container(container) ⇒ Object

Raises:



79
80
81
82
83
# File 'lib/swift_client.rb', line 79

def delete_container(container)
  raise(EmptyNameError) if container.empty?

  request :delete, "/#{container}"
end

#delete_object(object, container) ⇒ Object

Raises:



114
115
116
117
118
# File 'lib/swift_client.rb', line 114

def delete_object(object, container)
  raise(EmptyNameError) if object.empty? || container.empty?

  request :delete, "/#{container}/#{object}"
end

#get_container(container, query = {}) ⇒ Object

Raises:



55
56
57
58
59
# File 'lib/swift_client.rb', line 55

def get_container(container, query = {})
  raise(EmptyNameError) if container.empty?

  request :get, "/#{container}", :query => query
end

#get_containers(query = {}) ⇒ Object



51
52
53
# File 'lib/swift_client.rb', line 51

def get_containers(query = {})
  request :get, "/", :query => query
end

#get_object(object, container) ⇒ Object

Raises:



102
103
104
105
106
# File 'lib/swift_client.rb', line 102

def get_object(object, container)
  raise(EmptyNameError) if object.empty? || container.empty?

  request :get, "/#{container}/#{object}"
end

#get_objects(container, query = {}) ⇒ Object

Raises:



120
121
122
123
124
# File 'lib/swift_client.rb', line 120

def get_objects(container, query = {})
  raise(EmptyNameError) if container.empty?

  request :get, "/#{container}", :query => query
end

#head_accountObject



39
40
41
# File 'lib/swift_client.rb', line 39

def 
  request :head, "/"
end

#head_container(container) ⇒ Object

Raises:



61
62
63
64
65
# File 'lib/swift_client.rb', line 61

def head_container(container)
  raise(EmptyNameError) if container.empty?

  request :head, "/#{container}"
end

#head_containersObject



47
48
49
# File 'lib/swift_client.rb', line 47

def head_containers
  request :head, "/"
end

#head_object(object, container) ⇒ Object

Raises:



108
109
110
111
112
# File 'lib/swift_client.rb', line 108

def head_object(object, container)
  raise(EmptyNameError) if object.empty? || container.empty?

  request :head, "/#{container}/#{object}"
end

#post_account(headers = {}) ⇒ Object



43
44
45
# File 'lib/swift_client.rb', line 43

def (headers = {})
  request :post, "/", :headers => headers
end

#post_container(container, headers = {}) ⇒ Object

Raises:



73
74
75
76
77
# File 'lib/swift_client.rb', line 73

def post_container(container, headers = {})
  raise(EmptyNameError) if container.empty?

  request :post, "/#{container}", :headers => headers
end

#post_object(object, container, headers = {}) ⇒ Object

Raises:



96
97
98
99
100
# File 'lib/swift_client.rb', line 96

def post_object(object, container, headers = {})
  raise(EmptyNameError) if object.empty? || container.empty?

  request :post, "/#{container}/#{object}", :headers => headers
end

#public_url(object, container) ⇒ Object

Raises:



126
127
128
129
130
# File 'lib/swift_client.rb', line 126

def public_url(object, container)
  raise(EmptyNameError) if object.empty? || container.empty?

  "#{storage_url}/#{container}/#{object}"
end

#put_container(container, headers = {}) ⇒ Object

Raises:



67
68
69
70
71
# File 'lib/swift_client.rb', line 67

def put_container(container, headers = {})
  raise(EmptyNameError) if container.empty?

  request :put, "/#{container}", :headers => headers
end

#put_object(object, data_or_io, container, headers = {}) ⇒ Object

Raises:



85
86
87
88
89
90
91
92
93
94
# File 'lib/swift_client.rb', line 85

def put_object(object, data_or_io, container, headers = {})
  raise(EmptyNameError) if object.empty? || container.empty?

  mime_type = MIME::Types.of(object).first

  extended_headers = headers.dup
  extended_headers["Content-Type"] ||= mime_type.content_type if mime_type

  request :put, "/#{container}/#{object}", :body => data_or_io.respond_to?(:read) ? data_or_io.read : data_or_io, :headers => extended_headers
end

#temp_url(object, container, opts = {}) ⇒ Object

Raises:



132
133
134
135
136
137
138
139
140
141
142
# File 'lib/swift_client.rb', line 132

def temp_url(object, container, opts = {})
  raise(EmptyNameError) if object.empty? || container.empty?
  raise(TempUrlKeyMissing) unless options[:temp_url_key]

  expires = (Time.now + (options[:expires_in] || 3600).to_i).to_i
  path = URI.parse("#{storage_url}/#{container}/#{object}").path

  signature = OpenSSL::HMAC.hexdigest("sha1", options[:temp_url_key], "GET\n#{expires}\n#{path}")

  "#{storage_url}/#{container}/#{object}?temp_url_sig=#{signature}&temp_url_expires=#{expires}"
end