droplet_kit 2.3.0 → 2.4.0
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 +4 -4
- data/.travis.yml +4 -3
- data/CHANGELOG.md +4 -1
- data/README.md +23 -2
- data/lib/droplet_kit.rb +3 -0
- data/lib/droplet_kit/client.rb +1 -0
- data/lib/droplet_kit/mappings/cdn_mapping.rb +31 -0
- data/lib/droplet_kit/models/cdn.rb +9 -0
- data/lib/droplet_kit/resources/cdn_resource.rb +42 -0
- data/lib/droplet_kit/version.rb +1 -1
- data/spec/fixtures/cdns/all.json +16 -0
- data/spec/fixtures/cdns/create.json +9 -0
- data/spec/fixtures/cdns/find.json +9 -0
- data/spec/fixtures/cdns/update_ttl.json +9 -0
- data/spec/lib/droplet_kit/resources/cdn_resource_spec.rb +124 -0
- data/spec/lib/droplet_kit/resources/certificate_resource_spec.rb +0 -1
- metadata +16 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84d6ad636a505caf049b0c9bcf8c38ff0aedda28
|
4
|
+
data.tar.gz: a447e68783fce91d0eeaa1ecbefaf1ce1752ed57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d592ec69dd61e597c02a7ab9e737b42b58fa62189024ee745f27fa77d22e8fb99de448d7c09eae4d98325d813b7e5d2671ff669ef8b1b4721fb00b65f746afed
|
7
|
+
data.tar.gz: 7ab6c9ae7ea96cabdc6b03be3abae4e4f559039bba48f4062dbce3f9763c153f9953b5dd77ce36a96783314622585c0fa3cae38e8514de2c8764609f1a2b46b6
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
### Version 2.4.0
|
2
|
+
* Added CDN resource.
|
3
|
+
|
1
4
|
### Version 2.3.0
|
2
5
|
* Added support for Let's Encrypt certificates.
|
3
6
|
|
@@ -11,7 +14,7 @@
|
|
11
14
|
* Added Firewall resource.
|
12
15
|
* Added support for updating TTLs for DomainRecord resource.
|
13
16
|
* Added support of all Rails 5 releases.
|
14
|
-
* Added
|
17
|
+
* Added deprecation for Tag resource rename.
|
15
18
|
|
16
19
|
### Version 2.1.0
|
17
20
|
* Added monitoring to the Droplet resource.
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# DropletKit
|
2
|
+
[](https://travis-ci.org/digitalocean/droplet_kit)
|
3
|
+
[](https://badge.fury.io/rb/droplet_kit)
|
2
4
|
|
3
5
|
DropletKit is the official [DigitalOcean V2 API](https://developers.digitalocean.com/v2/) client. It supports everything the API can do with a simple interface written in Ruby.
|
4
6
|
|
5
|
-
[](https://travis-ci.org/digitalocean/droplet_kit)
|
6
|
-
|
7
7
|
## Installation
|
8
8
|
|
9
9
|
Add this line to your application's Gemfile:
|
@@ -25,6 +25,7 @@ You'll need to generate an access token in Digital Ocean's control panel at http
|
|
25
25
|
With your access token, retrieve a client instance with it.
|
26
26
|
|
27
27
|
```ruby
|
28
|
+
require 'droplet_kit'
|
28
29
|
client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')
|
29
30
|
```
|
30
31
|
|
@@ -64,6 +65,26 @@ droplet = client.droplets.find(id: 123)
|
|
64
65
|
|
65
66
|
# All Resources and actions.
|
66
67
|
|
68
|
+
## CDN resource
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
client = DropletKit::Client.new(access_token: 'TOKEN')
|
72
|
+
client.cdns #=> DropletKit::CertificateResource
|
73
|
+
cdn = DropletKit::CDN.new(
|
74
|
+
origin: 'myspace.nyc3.digitaloceanspaces.com',
|
75
|
+
ttl: 1800
|
76
|
+
)
|
77
|
+
```
|
78
|
+
|
79
|
+
Actions supported:
|
80
|
+
|
81
|
+
* `client.cdns.find(id: 'id')`
|
82
|
+
* `client.cdns.all()`
|
83
|
+
* `client.cdns.create(cdn)`
|
84
|
+
* `client.cdns.update_ttl(id: 'id', ttl: 3600)`
|
85
|
+
* `client.cdns.flush_cache(id: 'id', files: ['*', 'path/to/css/*'])`
|
86
|
+
* `client.cdns.delete(id: 'id')`
|
87
|
+
|
67
88
|
## Certificate resource
|
68
89
|
|
69
90
|
```ruby
|
data/lib/droplet_kit.rb
CHANGED
@@ -38,6 +38,7 @@ module DropletKit
|
|
38
38
|
autoload :FirewallInboundRule, 'droplet_kit/models/firewall_inbound_rule'
|
39
39
|
autoload :FirewallOutboundRule, 'droplet_kit/models/firewall_outbound_rule'
|
40
40
|
autoload :FirewallPendingChange, 'droplet_kit/models/firewall_pending_change'
|
41
|
+
autoload :CDN, 'droplet_kit/models/cdn'
|
41
42
|
|
42
43
|
# Resources
|
43
44
|
autoload :DropletResource, 'droplet_kit/resources/droplet_resource'
|
@@ -61,6 +62,7 @@ module DropletKit
|
|
61
62
|
autoload :LoadBalancerResource, 'droplet_kit/resources/load_balancer_resource'
|
62
63
|
autoload :CertificateResource, 'droplet_kit/resources/certificate_resource'
|
63
64
|
autoload :FirewallResource, 'droplet_kit/resources/firewall_resource'
|
65
|
+
autoload :CDNResource, 'droplet_kit/resources/cdn_resource'
|
64
66
|
|
65
67
|
# JSON Maps
|
66
68
|
autoload :DropletMapping, 'droplet_kit/mappings/droplet_mapping'
|
@@ -94,6 +96,7 @@ module DropletKit
|
|
94
96
|
autoload :FirewallInboundRuleMapping, 'droplet_kit/mappings/firewall_inbound_rule_mapping'
|
95
97
|
autoload :FirewallOutboundRuleMapping, 'droplet_kit/mappings/firewall_outbound_rule_mapping'
|
96
98
|
autoload :FirewallPendingChangeMapping, 'droplet_kit/mappings/firewall_pending_change_mapping'
|
99
|
+
autoload :CDNMapping, 'droplet_kit/mappings/cdn_mapping'
|
97
100
|
|
98
101
|
# Utils
|
99
102
|
autoload :PaginatedResource, 'droplet_kit/paginated_resource'
|
data/lib/droplet_kit/client.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module DropletKit
|
2
|
+
class CDNMapping
|
3
|
+
include Kartograph::DSL
|
4
|
+
|
5
|
+
kartograph do
|
6
|
+
mapping CDN
|
7
|
+
root_key singular: 'endpoint', plural: 'endpoints', scopes: [:read]
|
8
|
+
|
9
|
+
scoped :read do
|
10
|
+
property :id
|
11
|
+
property :ttl
|
12
|
+
property :origin
|
13
|
+
property :endpoint
|
14
|
+
property :created_at
|
15
|
+
end
|
16
|
+
|
17
|
+
scoped :create do
|
18
|
+
property :origin
|
19
|
+
property :ttl
|
20
|
+
end
|
21
|
+
|
22
|
+
scoped :update do
|
23
|
+
property :ttl
|
24
|
+
end
|
25
|
+
|
26
|
+
scoped :delete_cache do
|
27
|
+
property :files
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module DropletKit
|
2
|
+
class CDNResource < ResourceKit::Resource
|
3
|
+
include ErrorHandlingResourcable
|
4
|
+
|
5
|
+
resources do
|
6
|
+
action :find, 'GET /v2/cdn/endpoints/:id' do
|
7
|
+
handler(200) { |response| CDNMapping.extract_single(response.body, :read) }
|
8
|
+
end
|
9
|
+
|
10
|
+
action :all, 'GET /v2/cdn/endpoints' do
|
11
|
+
query_keys :per_page, :page
|
12
|
+
handler(200) { |response| CDNMapping.extract_collection(response.body, :read) }
|
13
|
+
end
|
14
|
+
|
15
|
+
action :create, 'POST /v2/cdn/endpoints' do
|
16
|
+
body { |cdn| CDNMapping.representation_for(:create, cdn) }
|
17
|
+
handler(201) { |response| CDNMapping.extract_single(response.body, :read) }
|
18
|
+
handler(422) { |response| ErrorMapping.fail_with(FailedCreate, response.body) }
|
19
|
+
end
|
20
|
+
|
21
|
+
action :update_ttl, 'PUT /v2/cdn/endpoints/:id' do
|
22
|
+
body { |hash| { ttl: hash[:ttl] }.to_json }
|
23
|
+
handler(200) { |response| CDNMapping.extract_single(response.body, :read) }
|
24
|
+
handler(422) { |response| ErrorMapping.fail_with(FailedUpdate, response.body) }
|
25
|
+
end
|
26
|
+
|
27
|
+
action :flush_cache, 'DELETE /v2/cdn/endpoints/:id/cache' do
|
28
|
+
body { |hash| { files: hash[:files] }.to_json }
|
29
|
+
handler(204) { |_| true }
|
30
|
+
handler(422) { |response| ErrorMapping.fail_with(FailedUpdate, response.body) }
|
31
|
+
end
|
32
|
+
|
33
|
+
action :delete, 'DELETE /v2/cdn/endpoints/:id' do
|
34
|
+
handler(204) { |_| true }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def all(*args)
|
39
|
+
PaginatedResource.new(action(:all), self, *args)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/droplet_kit/version.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"endpoints": [
|
3
|
+
{
|
4
|
+
"id": "7724db7c-e098-11e5-b522-000f53304e51",
|
5
|
+
"origin": "my-space-cdn.nyc3.digitaloceanspaces.com",
|
6
|
+
"endpoint": "my-space-cdn.nyc3.cdn.digitaloceanspaces.com",
|
7
|
+
"ttl": 3600,
|
8
|
+
"created_at": "2016-03-02T17:00:49Z"
|
9
|
+
}
|
10
|
+
],
|
11
|
+
"links": {
|
12
|
+
},
|
13
|
+
"meta": {
|
14
|
+
"total": 1
|
15
|
+
}
|
16
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe DropletKit::CDNResource do
|
4
|
+
subject(:resource) { described_class.new(connection: connection) }
|
5
|
+
include_context 'resources'
|
6
|
+
|
7
|
+
let(:id) { '7724db7c-e098-11e5-b522-000f53304e51' }
|
8
|
+
let(:origin) { 'my-space-cdn.nyc3.digitaloceanspaces.com' }
|
9
|
+
let(:endpoint) { 'my-space-cdn.nyc3.cdn.digitaloceanspaces.com' }
|
10
|
+
let(:ttl) { 3600 }
|
11
|
+
let(:created_at) { '2016-03-02T17:00:49Z' }
|
12
|
+
|
13
|
+
let(:path) { '/v2/cdn/endpoints' }
|
14
|
+
let(:path_with_id) { "#{path}/#{id}" }
|
15
|
+
|
16
|
+
RSpec::Matchers.define :match_cdn_fixture do
|
17
|
+
match do |cdn|
|
18
|
+
expect(cdn).to be_kind_of(DropletKit::CDN)
|
19
|
+
|
20
|
+
expect(cdn.id).to eq(id)
|
21
|
+
expect(cdn.origin).to eq(origin)
|
22
|
+
expect(cdn.endpoint).to eq(endpoint)
|
23
|
+
expect(cdn.ttl).to eq(ttl)
|
24
|
+
expect(cdn.created_at).to eq(created_at)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#all' do
|
29
|
+
it 'returns all of the cdns' do
|
30
|
+
stub_do_api(path, :get).to_return(body: api_fixture('cdns/all'))
|
31
|
+
cdns = resource.all
|
32
|
+
|
33
|
+
expect(cdns).to all(be_kind_of(DropletKit::CDN))
|
34
|
+
expect(cdns.first).to match_cdn_fixture
|
35
|
+
end
|
36
|
+
|
37
|
+
it_behaves_like 'a paginated index' do
|
38
|
+
let(:fixture_path) { 'cdns/all' }
|
39
|
+
let(:api_path) { '/v2/cdn/endpoints' }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#find' do
|
44
|
+
it 'returns a singular cdn' do
|
45
|
+
stub_do_api(path_with_id, :get).to_return(body: api_fixture('cdns/find'))
|
46
|
+
cdn = resource.find(id: id)
|
47
|
+
|
48
|
+
expect(cdn).to match_cdn_fixture
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#create' do
|
53
|
+
it 'returns the created cdn' do
|
54
|
+
cdn = DropletKit::CDN.new(
|
55
|
+
origin: origin,
|
56
|
+
ttl: ttl
|
57
|
+
)
|
58
|
+
|
59
|
+
as_string = DropletKit::CDNMapping.representation_for(:create, cdn)
|
60
|
+
stub_do_api(path, :post).with(body: as_string).to_return(body: api_fixture('cdns/create'), status: 201)
|
61
|
+
created_cdn = resource.create(cdn)
|
62
|
+
|
63
|
+
expect(created_cdn).to match_cdn_fixture
|
64
|
+
end
|
65
|
+
|
66
|
+
it_behaves_like 'an action that handles invalid parameters' do
|
67
|
+
let(:action) { 'create' }
|
68
|
+
let(:arguments) { DropletKit::CDN.new }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#update_ttl' do
|
73
|
+
let(:exception) { DropletKit::FailedUpdate }
|
74
|
+
|
75
|
+
it 'returns the updated cdn' do
|
76
|
+
as_string = { ttl: 60 }.to_json
|
77
|
+
stub_do_api(path_with_id, :put).with(body: as_string).to_return(body: api_fixture('cdns/update_ttl'))
|
78
|
+
updated_cdn = resource.update_ttl(id: id, ttl: 60)
|
79
|
+
|
80
|
+
expect(updated_cdn).to be_kind_of(DropletKit::CDN)
|
81
|
+
|
82
|
+
expect(updated_cdn.id).to eq(id)
|
83
|
+
expect(updated_cdn.ttl).to eq(60)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "fails if ttl is invalid" do
|
87
|
+
as_string = { ttl: 0 }.to_json
|
88
|
+
response_body = { id: :unprocessable_entity, message: 'invalid ttl' }
|
89
|
+
stub_do_api(path_with_id, :put).with(body: as_string).to_return(body: response_body.to_json, status: 422)
|
90
|
+
|
91
|
+
expect { resource.update_ttl(id: id, ttl: 0) }.to raise_exception(exception).with_message(response_body[:message])
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '#flush_cache' do
|
96
|
+
let(:cache_path) { "/v2/cdn/endpoints/#{id}/cache" }
|
97
|
+
let(:exception) { DropletKit::FailedUpdate }
|
98
|
+
|
99
|
+
it 'sends a delete request to cdn cache' do
|
100
|
+
as_string = { files: ["*"] }.to_json
|
101
|
+
request = stub_do_api(cache_path, :delete).with(body: as_string)
|
102
|
+
resource.flush_cache(id: id, files: ["*"])
|
103
|
+
|
104
|
+
expect(request).to have_been_made
|
105
|
+
end
|
106
|
+
|
107
|
+
it "fails if files are not passed in" do
|
108
|
+
as_string = { files: [] }.to_json
|
109
|
+
response_body = { id: :unprocessable_entity, message: 'invalid request body' }
|
110
|
+
stub_do_api(cache_path, :delete).with(body: as_string).to_return(body: response_body.to_json, status: 422)
|
111
|
+
|
112
|
+
expect { resource.flush_cache(id: id, files: []) }.to raise_exception(exception).with_message(response_body[:message])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe '#delete' do
|
117
|
+
it 'sends a delete request for the cdn' do
|
118
|
+
request = stub_do_api(path_with_id, :delete)
|
119
|
+
resource.delete(id: id)
|
120
|
+
|
121
|
+
expect(request).to have_been_made
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: droplet_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Ross
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -205,6 +205,7 @@ files:
|
|
205
205
|
- lib/droplet_kit/error_handling_resourcable.rb
|
206
206
|
- lib/droplet_kit/mappings/account_mapping.rb
|
207
207
|
- lib/droplet_kit/mappings/action_mapping.rb
|
208
|
+
- lib/droplet_kit/mappings/cdn_mapping.rb
|
208
209
|
- lib/droplet_kit/mappings/certificate_mapping.rb
|
209
210
|
- lib/droplet_kit/mappings/domain_mapping.rb
|
210
211
|
- lib/droplet_kit/mappings/domain_record_mapping.rb
|
@@ -236,6 +237,7 @@ files:
|
|
236
237
|
- lib/droplet_kit/models/account.rb
|
237
238
|
- lib/droplet_kit/models/action.rb
|
238
239
|
- lib/droplet_kit/models/base_model.rb
|
240
|
+
- lib/droplet_kit/models/cdn.rb
|
239
241
|
- lib/droplet_kit/models/certificate.rb
|
240
242
|
- lib/droplet_kit/models/domain.rb
|
241
243
|
- lib/droplet_kit/models/domain_record.rb
|
@@ -268,6 +270,7 @@ files:
|
|
268
270
|
- lib/droplet_kit/paginated_resource.rb
|
269
271
|
- lib/droplet_kit/resources/account_resource.rb
|
270
272
|
- lib/droplet_kit/resources/action_resource.rb
|
273
|
+
- lib/droplet_kit/resources/cdn_resource.rb
|
271
274
|
- lib/droplet_kit/resources/certificate_resource.rb
|
272
275
|
- lib/droplet_kit/resources/domain_record_resource.rb
|
273
276
|
- lib/droplet_kit/resources/domain_resource.rb
|
@@ -292,6 +295,10 @@ files:
|
|
292
295
|
- spec/fixtures/account/info.json
|
293
296
|
- spec/fixtures/actions/all.json
|
294
297
|
- spec/fixtures/actions/find.json
|
298
|
+
- spec/fixtures/cdns/all.json
|
299
|
+
- spec/fixtures/cdns/create.json
|
300
|
+
- spec/fixtures/cdns/find.json
|
301
|
+
- spec/fixtures/cdns/update_ttl.json
|
295
302
|
- spec/fixtures/certificates/all.json
|
296
303
|
- spec/fixtures/certificates/find.json
|
297
304
|
- spec/fixtures/certificates/lets_encrypt.json
|
@@ -379,6 +386,7 @@ files:
|
|
379
386
|
- spec/lib/droplet_kit/paginated_resource_spec.rb
|
380
387
|
- spec/lib/droplet_kit/resources/account_resource_spec.rb
|
381
388
|
- spec/lib/droplet_kit/resources/action_resource_spec.rb
|
389
|
+
- spec/lib/droplet_kit/resources/cdn_resource_spec.rb
|
382
390
|
- spec/lib/droplet_kit/resources/certificate_resource_spec.rb
|
383
391
|
- spec/lib/droplet_kit/resources/domain_record_resource_spec.rb
|
384
392
|
- spec/lib/droplet_kit/resources/domain_resource_spec.rb
|
@@ -425,7 +433,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
425
433
|
version: '0'
|
426
434
|
requirements: []
|
427
435
|
rubyforge_project:
|
428
|
-
rubygems_version: 2.6.
|
436
|
+
rubygems_version: 2.6.11
|
429
437
|
signing_key:
|
430
438
|
specification_version: 4
|
431
439
|
summary: Droplet Kit is the official Ruby library for DigitalOcean's API
|
@@ -433,6 +441,10 @@ test_files:
|
|
433
441
|
- spec/fixtures/account/info.json
|
434
442
|
- spec/fixtures/actions/all.json
|
435
443
|
- spec/fixtures/actions/find.json
|
444
|
+
- spec/fixtures/cdns/all.json
|
445
|
+
- spec/fixtures/cdns/create.json
|
446
|
+
- spec/fixtures/cdns/find.json
|
447
|
+
- spec/fixtures/cdns/update_ttl.json
|
436
448
|
- spec/fixtures/certificates/all.json
|
437
449
|
- spec/fixtures/certificates/find.json
|
438
450
|
- spec/fixtures/certificates/lets_encrypt.json
|
@@ -520,6 +532,7 @@ test_files:
|
|
520
532
|
- spec/lib/droplet_kit/paginated_resource_spec.rb
|
521
533
|
- spec/lib/droplet_kit/resources/account_resource_spec.rb
|
522
534
|
- spec/lib/droplet_kit/resources/action_resource_spec.rb
|
535
|
+
- spec/lib/droplet_kit/resources/cdn_resource_spec.rb
|
523
536
|
- spec/lib/droplet_kit/resources/certificate_resource_spec.rb
|
524
537
|
- spec/lib/droplet_kit/resources/domain_record_resource_spec.rb
|
525
538
|
- spec/lib/droplet_kit/resources/domain_resource_spec.rb
|