swift-storage 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da14f122449c3a28046bdde2a55627d9786063b5
4
- data.tar.gz: 7c3d4bbdb737640d475d0d5f23c9749db619abb3
3
+ metadata.gz: 77665fc3b1c075760f657ba0c9e192191c2d7f5c
4
+ data.tar.gz: 52089eaac7b7ca0f42b9c2bc1cdf0bd61e8daca6
5
5
  SHA512:
6
- metadata.gz: 445875d4a6c9b8a2bae8723ee8f181a8bf07bc4ad6fe81d6229ca6d69c756a12e893a1580c3a0069f899e6ef7428865d644f29c604b8dbe34c0ab4a03ff8b24b
7
- data.tar.gz: 472938b6204624e0ba9797b150f39025ce56a625d2f3e94be781ca51e8f2cbef7f568591c96a0dc123ba212001749b7701cfbc33c4e1d68d26231ac978070670
6
+ metadata.gz: 735a05bc0ca64009df31ec04dc41702d3b17eb030dfdbb8fd2d23824e9e93423c0f9e528252f39b251b246f0e959affc91411cdd548be820c0bc189b2cb600e2
7
+ data.tar.gz: a6076078bd7adbed2dbf0bb82fb32428ac356715241859c21b63bfcb64fd2a2422152c615046351729fb40b993ef1b414739b416a5c2634572f0e82789e6137c
data/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  This file is written in reverse chronological order, newer releases will
4
4
  appear at the top.
5
5
 
6
+ ## 0.0.11
7
+
8
+ * Some refactoring
9
+ [#11](https://github.com/PredicSis/swift-ruby/pull/1)
10
+ @ArmandPredicSis
11
+
6
12
  ## 0.0.10
7
13
 
8
14
  * Retry on connection error before giving up
@@ -1,7 +1,5 @@
1
1
  class SwiftStorage::Account < SwiftStorage::Node
2
-
3
- parent_node :service
4
-
2
+ parent_node :service
5
3
 
6
4
  # Write account meta data
7
5
  #
@@ -12,7 +10,7 @@ class SwiftStorage::Account < SwiftStorage::Node
12
10
  #
13
11
  def write(temp_url_key: nil)
14
12
  h = {}
15
- h[H::ACCOUNT_TEMP_URL_KEY] = temp_url_key if temp_url_key
13
+ h[ACCOUNT_TEMP_URL_KEY] = temp_url_key if temp_url_key
16
14
 
17
15
  request(relative_path, :method => :post, :headers => h)
18
16
  end
@@ -1,16 +1,11 @@
1
1
  class SwiftStorage::Container < SwiftStorage::Node
2
-
3
- parent_node :service
4
-
2
+ parent_node :service
3
+ header_attributes :bytes_used, :object_count
5
4
 
6
5
  def relative_path
7
6
  name
8
7
  end
9
8
 
10
- header_attributes :bytes_used,
11
- :object_count
12
-
13
-
14
9
  # Returns the object collection for this container
15
10
  #
16
11
  # @return [SwiftStorage::ObjectCollection]
@@ -45,8 +40,8 @@ class SwiftStorage::Container < SwiftStorage::Node
45
40
  read_acl = read_acl.join(',') if read_acl.respond_to?(:to_ary)
46
41
  write_acl = write_acl.join(',') if write_acl.respond_to?(:to_ary)
47
42
 
48
- h[H::CONTAINER_READ] = read_acl
49
- h[H::CONTAINER_WRITE] = write_acl
43
+ h[CONTAINER_READ] = read_acl
44
+ h[CONTAINER_WRITE] = write_acl
50
45
 
51
46
  request(relative_path, :method => :post, :headers => h)
52
47
  end
@@ -61,7 +56,4 @@ class SwiftStorage::Container < SwiftStorage::Node
61
56
  w = headers.write.split(',') rescue nil
62
57
  struct(:read => r, :write => w)
63
58
  end
64
-
65
-
66
59
  end
67
-
@@ -1,7 +1,5 @@
1
1
  class SwiftStorage::ContainerCollection < SwiftStorage::Node
2
-
3
- parent_node :service
4
-
2
+ parent_node :service
5
3
 
6
4
  # Return all containers
7
5
  #
@@ -28,7 +26,4 @@ class SwiftStorage::ContainerCollection < SwiftStorage::Node
28
26
  def [](name)
29
27
  SwiftStorage::Container.new(service, name) if name
30
28
  end
31
-
32
29
  end
33
-
34
-
@@ -1,5 +1,4 @@
1
1
  module SwiftStorage::Errors
2
-
3
2
  class AuthError < StandardError
4
3
  end
5
4
 
@@ -11,5 +10,4 @@ module SwiftStorage::Errors
11
10
 
12
11
  class ForbiddenError < StandardError
13
12
  end
14
-
15
13
  end
@@ -1,5 +1,4 @@
1
1
  module SwiftStorage
2
-
3
2
  module Headers
4
3
  STORAGE_URL = 'X-Storage-Url'.freeze
5
4
  AUTH_TOKEN = 'X-Auth-Token'.freeze
@@ -20,5 +19,4 @@ module SwiftStorage
20
19
  ACCOUNT_TEMP_URL_KEY = 'X-Account-Meta-Temp-URL-Key'.freeze
21
20
  DESTINATION = 'Destination'.freeze
22
21
  end
23
-
24
22
  end
@@ -1,9 +1,8 @@
1
1
  class SwiftStorage::Node
2
-
3
2
  include SwiftStorage::Utils
3
+ include SwiftStorage::Headers
4
4
 
5
- attr_accessor :parent,
6
- :name
5
+ attr_accessor :parent, :name
7
6
 
8
7
  def initialize(parent, name=nil)
9
8
  @parent = parent
@@ -90,14 +89,7 @@ class SwiftStorage::Node
90
89
  end
91
90
 
92
91
  def delete
93
- # We try a few times, as the swift cluster might need time to get ready
94
- 3.times do |i|
95
- begin
96
- return request(relative_path, :method => :delete)
97
- rescue SwiftStorage::Errors::ServerError
98
- sleep(i**2)
99
- end
100
- end
92
+ request(relative_path, :method => :delete)
101
93
  end
102
94
 
103
95
  def delete_if_exists
@@ -106,7 +98,6 @@ class SwiftStorage::Node
106
98
  false
107
99
  end
108
100
 
109
-
110
101
  private
111
102
 
112
103
  def self.header_name
@@ -138,10 +129,4 @@ class SwiftStorage::Node
138
129
  headers[full_key] = v.to_s
139
130
  end
140
131
  end
141
-
142
- private
143
- H = SwiftStorage::Headers
144
-
145
132
  end
146
-
147
-
@@ -13,15 +13,11 @@ require "time"
13
13
  # Object cache control header.
14
14
  #
15
15
  class SwiftStorage::Object < SwiftStorage::Node
16
-
17
-
18
- parent_node :container
19
-
20
-
21
- header_attributes :content_length,
22
- :content_type,
23
- :expires,
24
- :cache_control
16
+ parent_node :container
17
+ header_attributes :content_length,
18
+ :content_type,
19
+ :expires,
20
+ :cache_control
25
21
 
26
22
  # Read the object data
27
23
  #
@@ -130,16 +126,16 @@ class SwiftStorage::Object < SwiftStorage::Node
130
126
  cache_control = "public, max_age=4000000000"
131
127
  end
132
128
 
133
- h[H::CONTENT_DISPOSITION] = attachment ? 'attachment' : 'inline'
134
- h[H::OBJECT_MANIFEST] = object_manifest if object_manifest
135
- h[H::CONTENT_TYPE] = content_type if content_type
136
- h[H::EXPIRES] = expires.httpdate if expires
137
- h[H::CACHE_CONTROL] = cache_control if cache_control
129
+ h[CONTENT_DISPOSITION] = attachment ? 'attachment' : 'inline'
130
+ h[OBJECT_MANIFEST] = object_manifest if object_manifest
131
+ h[CONTENT_TYPE] = content_type if content_type
132
+ h[EXPIRES] = expires.httpdate if expires
133
+ h[CACHE_CONTROL] = cache_control if cache_control
138
134
 
139
135
  if delete_at
140
- h[H::DELETE_AT] = delete_at.to_i.to_s
136
+ h[DELETE_AT] = delete_at.to_i.to_s
141
137
  elsif delete_after
142
- h[H::DELETE_AFTER] = delete_after.to_i.to_s
138
+ h[DELETE_AFTER] = delete_after.to_i.to_s
143
139
  end
144
140
 
145
141
  merge_metadata(h, metadata)
@@ -175,7 +171,7 @@ class SwiftStorage::Object < SwiftStorage::Node
175
171
  raise ArgumentError.new('Invalid source type')
176
172
  end
177
173
 
178
- request(path + '?multipart-manifest=get', method: :copy, headers: optional_headers.merge(H::DESTINATION => relative_path))
174
+ request(path + '?multipart-manifest=get', method: :copy, headers: optional_headers.merge(DESTINATION => relative_path))
179
175
  self
180
176
  end
181
177
 
@@ -191,9 +187,9 @@ class SwiftStorage::Object < SwiftStorage::Node
191
187
  # A temporary URL to the object.
192
188
  #
193
189
  # @!parse def temp_url(expires=Time.now + 3600, method: :get);end
194
- def temp_url(expires=nil, method: :get)
190
+ def temp_url(expires = nil, ssl: true, method: :get, params: {})
195
191
  expires ||= Time.now + 3600
196
- service.create_temp_url(container.name, name, expires, method)
192
+ service.create_temp_url(container.name, name, expires, method, ssl, params)
197
193
  end
198
194
 
199
195
  # Returns the object's URL
@@ -1,7 +1,5 @@
1
1
  class SwiftStorage::ObjectCollection < SwiftStorage::Node
2
-
3
- parent_node :container
4
-
2
+ parent_node :container
5
3
 
6
4
  # Return all objects
7
5
  #
@@ -37,7 +35,4 @@ class SwiftStorage::ObjectCollection < SwiftStorage::Node
37
35
  def get_objects(prefix=nil)
38
36
  get_lines(container.name, :prefix => prefix).map { |name| SwiftStorage::Object.new(container, name)}
39
37
  end
40
-
41
38
  end
42
-
43
-
@@ -9,19 +9,19 @@ class SwiftStorage::Service
9
9
  extend Forwardable
10
10
  def_delegators SwiftStorage, :configuration
11
11
 
12
- attr_reader :tenant,
13
- :endpoint,
14
- :storage_url,
15
- :auth_token,
16
- :auth_at,
17
- :expires,
18
- :storage_token,
19
- :storage_scheme,
20
- :storage_host,
21
- :storage_port,
22
- :storage_path,
23
- :temp_url_key,
24
- :retries
12
+ attr_reader :tenant,
13
+ :endpoint,
14
+ :storage_url,
15
+ :auth_token,
16
+ :auth_at,
17
+ :expires,
18
+ :storage_token,
19
+ :storage_scheme,
20
+ :storage_host,
21
+ :storage_port,
22
+ :storage_path,
23
+ :temp_url_key,
24
+ :retries
25
25
 
26
26
  def initialize(tenant: configuration.tenant,
27
27
  username: configuration.username,
@@ -69,13 +69,12 @@ class SwiftStorage::Service
69
69
  @storage_path = uri.path
70
70
  end
71
71
 
72
- def create_temp_url(container, object, expires, method, options = {})
73
-
74
- scheme = options[:scheme] || storage_scheme
72
+ def create_temp_url(container, object, expires, method, ssl = true, params = {})
73
+ scheme = ssl ? 'https' : 'http'
75
74
 
76
75
  method = method.to_s.upcase
77
76
  # Limit methods
78
- %w{GET PUT HEAD}.include?(method) or raise ArgumentError, 'Only GET, PUT, HEAD supported'
77
+ %w{GET POST PUT HEAD}.include?(method) or raise ArgumentError, 'Only GET, POST, PUT, HEAD supported'
79
78
 
80
79
  expires = expires.to_i
81
80
  object_path_escaped = File.join(storage_path, escape(container), escape(object, '/'))
@@ -85,7 +84,7 @@ class SwiftStorage::Service
85
84
 
86
85
  sig = sig_to_hex(hmac('sha1', temp_url_key, string_to_sign))
87
86
 
88
- klass = scheme == 'http' ? URI::HTTP : URI::HTTPS
87
+ klass = (scheme == 'http') ? URI::HTTP : URI::HTTPS
89
88
 
90
89
  temp_url_options = {
91
90
  scheme: scheme,
@@ -93,8 +92,9 @@ class SwiftStorage::Service
93
92
  port: storage_port,
94
93
  path: object_path_escaped,
95
94
  query: URI.encode_www_form(
96
- temp_url_sig: sig,
97
- temp_url_expires: expires
95
+ params.merge(
96
+ temp_url_sig: sig,
97
+ temp_url_expires: expires)
98
98
  )
99
99
  }
100
100
  klass.build(temp_url_options).to_s
@@ -113,12 +113,12 @@ class SwiftStorage::Service
113
113
  end
114
114
 
115
115
  def request(path_or_url,
116
- method: :get,
117
- headers: nil,
118
- params: nil,
119
- json_data: nil,
120
- input_stream: nil,
121
- output_stream: nil)
116
+ method: :get,
117
+ headers: nil,
118
+ params: nil,
119
+ json_data: nil,
120
+ input_stream: nil,
121
+ output_stream: nil)
122
122
 
123
123
  tries = retries
124
124
 
@@ -189,34 +189,24 @@ class SwiftStorage::Service
189
189
  end
190
190
  end
191
191
 
192
- begin
193
- response = s.request(req, &output_proc)
194
- rescue Errno::EPIPE, Errno::EAGAIN, Errno::EWOULDBLOCK, Timeout::Error, Errno::EINVAL, EOFError
195
- # Server closed the connection, retry
196
- sleep 5
197
- retry unless (tries -= 1) <= 0
198
- raise OpenStack::Exception::Connection, "Unable to connect to OpenStack::Swift after #{retries} retries"
199
- end
200
-
201
- begin
202
- check_response!(response)
203
- rescue AuthError
204
- # If token is at least 60 second old, we try to get a new one
205
- if @auth_at && (Time.now - @auth_at).to_i > 60
206
- authenticate!
207
- response = s.request(req, &output_proc)
208
- else
209
- raise
210
- end
211
- end
192
+ response = s.request(req, &output_proc)
193
+ check_response!(response)
212
194
  response
195
+ rescue AuthError => e
196
+ # If token is at least 60 second old, we try to get a new one
197
+ raise e unless @auth_at && (Time.now - @auth_at).to_i > 60
198
+ authenticate!
199
+ retry
200
+ rescue ServerError, Errno::EPIPE, Timeout::Error, Errno::EINVAL, EOFError
201
+ # Server closed the connection, retry
202
+ sleep 5
203
+ retry unless (tries -= 1) <= 0
204
+ raise SwiftStorage::Errors::ServerError, "Unable to connect to OpenStack::Swift after #{retries} retries"
213
205
  end
214
206
 
215
207
  private
216
208
 
217
- attr_reader :sessions,
218
- :username,
219
- :password
209
+ attr_reader :sessions, :username, :password
220
210
 
221
211
  def check_response!(response)
222
212
  case response.code
@@ -232,5 +222,4 @@ class SwiftStorage::Service
232
222
  raise ServerError, response.body
233
223
  end
234
224
  end
235
-
236
225
  end
@@ -1,3 +1,3 @@
1
1
  module SwiftStorage
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
@@ -12,7 +12,7 @@ RSpec.describe 'Temporary URL' do
12
12
 
13
13
  # This has been computed manually and checked with openstack
14
14
  # Only server port vary, not actual host
15
- url = "http://127.0.0.1:#{server.port}/v1/AUTH_test/testbucket/test.html?temp_url_sig=4db4c16c859fdddca2e629a0a1e6b81c15a42cbd&temp_url_expires=50000"
15
+ url = "https://127.0.0.1:#{server.port}/v1/AUTH_test/testbucket/test.html?temp_url_sig=4db4c16c859fdddca2e629a0a1e6b81c15a42cbd&temp_url_expires=50000"
16
16
  expect(subject.create_temp_url('testbucket', 'test.html', 50000, 'GET')).to eq(url)
17
17
  end
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swift-storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Goy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2016-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.4.5.1
183
+ rubygems_version: 2.4.7
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: Swift storage client.