swift_client 0.1.6 → 0.1.7

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
- SHA1:
3
- metadata.gz: fccb39365e39660b890e410ee46cf56f7b7bcbe5
4
- data.tar.gz: d2aad7789aed1011afcdea3f986c30499254bf06
2
+ SHA256:
3
+ metadata.gz: 49eedca7f2dcfc8e50c6d43042dd3783d756e310ceb57a3a186437f4069dab1f
4
+ data.tar.gz: 11e6e5fa5e5526aa27534f83fe775d223a3af101aa9a25df1101513e6f388faa
5
5
  SHA512:
6
- metadata.gz: d7b6aaf0e442f0a1f594333e86c6850d94c3e934746c98e588d5714fdbedaa72e92eae795e0df4389d7d8c5a739830f9be71272e9e73dff562c399f9f575383d
7
- data.tar.gz: 27c8cbceabbb49bf1a000f80af014e0b22117e2813829d26dc22ef30cd3a63c4280fd7516cb0f1111ff75f36a80f4f402cd65c112385440c3e5b97ed99bf66e9
6
+ metadata.gz: cc9489387e34d0f90f0e3af89dd52fe542b2af932bca75cf4144216f881d390e7856287d78c261860396c5df3fdad32d9f076a48b259a1d0c2f1e18e612093ed
7
+ data.tar.gz: 5385bdf725dd8979ae20d2b4a0018a62099c5991b60b5101b1e86d693779c426491f997268379630a80f9447adec03f72168e23ff782e1c7299fd315b5b2d9d9
data/README.md CHANGED
@@ -101,7 +101,8 @@ swift_client = SwiftClient.new(
101
101
  :auth_url => "https://auth.example.com/v3",
102
102
  :storage_url => "https://storage.example.com/v1/AUTH_account",
103
103
  :user_id => "user id",
104
- :password => "password"
104
+ :password => "password",
105
+ :interface => "internal"
105
106
  )
106
107
 
107
108
  # OR
@@ -126,28 +127,29 @@ access the response body and JSON response. Checkout the
126
127
 
127
128
  SwiftClient offers the following requests:
128
129
 
129
- * head_account(options = {}) -> HTTParty::Response
130
- * post_account(headers = {}, options = {}) -> HTTParty::Response
131
- * head_containers(options = {}) -> HTTParty::Response
132
- * get_containers(query = {}, options = {}) -> HTTParty::Response
133
- * paginate_containers(query = {}, options = {}) -> Enumerator
134
- * get_container(container_name, query = {}, options = {}) -> HTTParty::Response
135
- * paginate_container(container_name, query = {}, options = {}) -> Enumerator
136
- * head_container(container_name, options = {}) -> HTTParty::Response
137
- * put_container(container_name, headers = {}, options = {}) -> HTTParty::Response
138
- * post_container(container_name, headers = {}, options = {}) -> HTTParty::Response
139
- * delete_container(container_name, options = {}) -> HTTParty::Response
140
- * put_object(object_name, data_or_io, container_name, headers = {}, options = {}) -> HTTParty::Response
141
- * post_object(object_name, container_name, headers = {}, options = {}) -> HTTParty::Response
142
- * get_object(object_name, container_name, options = {}) -> HTTParty::Response
143
- * get_object(object_name, container_name, options = {}) { |chunk| save chunk } -> HTTParty::Response
144
- * head_object(object_name, container_name, options = {}) -> HTTParty::Response
145
- * delete_object(object_name, container_name, options = {}) -> HTTParty::Response
146
- * get_objects(container_name, query = {}, options = {}) -> HTTParty::Response
147
- * paginate_objects(container_name, query = {}, options = {}) -> Enumerator
148
- * public_url(object_name, container_name) -> HTTParty::Response
149
- * temp_url(object_name, container_name, options = {}) -> HTTParty::Response
150
- * bulk_delete(entries, options = {}) -> entries
130
+ * `head_account(options = {}) # => HTTParty::Response`
131
+ * `post_account(headers = {}, options = {}) # => HTTParty::Response`
132
+ * `head_containers(options = {}) # => HTTParty::Response`
133
+ * `get_containers(query = {}, options = {}) # => HTTParty::Response`
134
+ * `paginate_containers(query = {}, options = {}) # => Enumerator`
135
+ * `get_container(container_name, query = {}, options = {}) # => HTTParty::Response`
136
+ * `paginate_container(container_name, query = {}, options = {}) # => Enumerator`
137
+ * `head_container(container_name, options = {}) # => HTTParty::Response`
138
+ * `put_container(container_name, headers = {}, options = {}) # => HTTParty::Response`
139
+ * `post_container(container_name, headers = {}, options = {}) # => HTTParty::Response`
140
+ * `delete_container(container_name, options = {}) # => HTTParty::Response`
141
+ * `put_object(object_name, data_or_io, container_name, headers = {}, options = {}) # => HTTParty::Response`
142
+ * `post_object(object_name, container_name, headers = {}, options = {}) # => HTTParty::Response`
143
+ * `get_object(object_name, container_name, options = {}) -> HTTParty::Response`
144
+ * `get_object(object_name, container_name, options = {}) { |chunk| save chunk } # => HTTParty::Response`
145
+ * `head_object(object_name, container_name, options = {}) # => HTTParty::Response`
146
+ * `delete_object(object_name, container_name, options = {}) # => HTTParty::Response`
147
+ * `get_objects(container_name, query = {}, options = {}) # => HTTParty::Response`
148
+ * `paginate_objects(container_name, query = {}, options = {}) # => Enumerator`
149
+ * `public_url(object_name, container_name) # => HTTParty::Response`
150
+ * `temp_url(object_name, container_name, options = {}) # => HTTParty::Response`
151
+ * `bulk_delete(entries, options = {}) # => entries`
152
+ * `post_head(object_name, container_name, _headers = {}, options = {}) # => HTTParty::Response`
151
153
 
152
154
  ### Getting large objects
153
155
  The `get_object` method with out a block is suitable for small objects that easily fit in memory. For larger objects, specify a block to process chunked data as it comes in.
@@ -126,6 +126,12 @@ class SwiftClient
126
126
  request :head, "/#{container_name}/#{object_name}", options
127
127
  end
128
128
 
129
+ def post_head(object_name, container_name, _headers = {}, options = {})
130
+ raise(EmptyNameError) if object_name.empty? || container_name.empty?
131
+
132
+ request :post, "/#{container_name}/#{object_name}", options.merge(headers: _headers)
133
+ end
134
+
129
135
  def delete_object(object_name, container_name, options = {})
130
136
  raise(EmptyNameError) if object_name.empty? || container_name.empty?
131
137
 
@@ -333,7 +339,8 @@ class SwiftClient
333
339
 
334
340
  return unless swift_services.size == 1
335
341
 
336
- swift_endpoints = swift_service["endpoints"].select { |endpoint| endpoint["interface"] == "public" }
342
+ interface = options[:interface] || "public"
343
+ swift_endpoints = swift_service["endpoints"].select { |endpoint| endpoint["interface"] == interface }
337
344
  swift_endpoint = swift_endpoints.first
338
345
 
339
346
  return unless swift_endpoints.size == 1
@@ -1,4 +1,4 @@
1
1
 
2
2
  class SwiftClient
3
- VERSION = "0.1.6"
3
+ VERSION = "0.1.7"
4
4
  end
@@ -77,6 +77,15 @@ class SwiftClientTest < MiniTest::Test
77
77
  assert_equal "https://example.com/v1/AUTH_account", @swift_client.storage_url
78
78
  end
79
79
 
80
+ def test_v3_authentication_storage_url_from_catalog_with_multiple_endpoints
81
+ stub_request(:post, "https://auth.example.com/v3/auth/tokens").with(:body => JSON.dump("auth" => { "identity" => { "methods" => ["password"], "password" => { "user" => { "name" => "username", "password" => "secret", "domain" => { "name" => "example.com" }}}}})).to_return(:status => 200, :body => JSON.dump("token" => { "catalog"=> [{ "type" => "object-store", "endpoints" => [{ "interface"=>"public", "url"=> "https://example.com/v1/AUTH_account" }, { "interface"=>"internal", "url"=> "https://example.com/v2/AUTH_account" }] }] }), :headers => { "X-Subject-Token" => "Token", "Content-Type" => "application/json" })
82
+
83
+ @swift_client = SwiftClient.new(:auth_url => "https://auth.example.com/v3", :username => "username", :user_domain => "example.com", :password => "secret", :interface => "internal")
84
+
85
+ assert_equal "Token", @swift_client.auth_token
86
+ assert_equal "https://example.com/v2/AUTH_account", @swift_client.storage_url
87
+ end
88
+
80
89
  def test_v3_authentication_without_storage_url_and_multiple_swifts
81
90
  stub_request(:post, "https://auth.example.com/v3/auth/tokens").with(:body => JSON.dump("auth" => { "identity" => { "methods" => ["password"], "password" => { "user" => { "name" => "username", "password" => "secret", "domain" => { "name" => "example.com" }}}}})).to_return(:status => 200, :body => JSON.dump("token" => { "catalog"=> [{ "type" => "object-store", "endpoints" => [{ "interface"=>"public", "url"=> "https://example.com/v1/AUTH_account" }] }, { "type" => "object-store", "endpoints" => [{ "interface"=>"public", "url"=> "https://example.com/v1/AUTH_account" }] }] }), :headers => { "X-Subject-Token" => "Token", "Content-Type" => "application/json" })
82
91
 
@@ -275,6 +284,12 @@ class SwiftClientTest < MiniTest::Test
275
284
  assert_equal 201, @swift_client.post_object("object", "container", "X-Object-Meta-Test" => "Test").code
276
285
  end
277
286
 
287
+ def test_post_head
288
+ stub_request(:post, 'https://example.com/v1/AUTH_account/container/object').with(headers: { 'Accept' => 'application/json', 'X-Auth-Token' => 'Token', 'X-Delete-At' => '1553524860' }).to_return(status: 201, body: '', headers: {})
289
+
290
+ assert_equal 201, @swift_client.post_head('object', 'container', 'X-Delete-At' => '1553524860').code
291
+ end
292
+
278
293
  def test_get_object
279
294
  stub_request(:get, "https://example.com/v1/AUTH_account/container/object").with(:headers => { "Accept" => "application/json", "X-Auth-Token" => "Token" }).to_return(:status => 200, :body => "Body", :headers => {})
280
295
  block_res = 0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swift_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Vetter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-19 00:00:00.000000000 Z
11
+ date: 2019-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  version: '0'
148
148
  requirements: []
149
149
  rubyforge_project:
150
- rubygems_version: 2.2.2
150
+ rubygems_version: 2.7.3
151
151
  signing_key:
152
152
  specification_version: 4
153
153
  summary: Small but powerful client to interact with OpenStack Swift