droplet_kit 1.3.2 → 1.3.3

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: 498588fe6a580fe13ea56c9b13cf1a14bb430cfd
4
- data.tar.gz: 0a167fa5f75673dd2a5ca1e9e7f4f97de18c75c8
3
+ metadata.gz: 9a86ff8a04cf0c309cc0664c732326179bb5c645
4
+ data.tar.gz: d38e878482a1ebe271bc139dc5a90a3f0b1d094b
5
5
  SHA512:
6
- metadata.gz: 92c2eba550487f433ada77fdf2580b1f86bd6a434020765056f2cee11d7779ce088d6339ebf31d2c775ed6b9ec4407fa741bfc156c1e34375ffc495ca6e11eda
7
- data.tar.gz: 2ca05aff1842097c8d12c037ffd7c6fc21a536362da2e44d51c80328239c66bd85e0c86ef464bad8795e034b5ad770fa6dd58f873d65430fb4c87b1e1207a72f
6
+ metadata.gz: ce73f66a82d4a2d08638c4e4af1a8e171fee5d0ae0c50ee10dfc40701c5a6aab5c536a11e68fca4fbc6160cb635d203d4a1c6c89c53ba08b762f0cbcb928ec70
7
+ data.tar.gz: af22eec48bfa4e8e159df286252db56da1de69247857933e6c35be9b559d600746920b328f6d87c2ba2510b1518afbb4a2eba9f5a30eaf155b10d21360ed979e
data/.travis.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
 
4
+ before_install:
5
+ - gem update bundler
6
+
4
7
  rvm:
5
8
  - "2.0.0"
6
9
  - "2.1.5"
data/README.md CHANGED
@@ -76,6 +76,7 @@ Actions supported:
76
76
  * `client.droplets.all()`
77
77
  * `client.droplets.find(id: 'id')`
78
78
  * `client.droplets.create(droplet)`
79
+ * `client.droplets.create_multiple(droplet)`
79
80
  * `client.droplets.delete(id: 'id')`
80
81
  * `client.droplets.kernels(id: 'id')`
81
82
  * `client.droplets.snapshots(id: 'id')`
data/droplet_kit.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "activesupport", '> 3.0', '< 5.0.0'
27
27
  spec.add_dependency "faraday", '~> 0.9.1'
28
28
 
29
- spec.add_development_dependency "bundler", "~> 1.6"
29
+ spec.add_development_dependency "bundler", "~> 1.11.0"
30
30
  spec.add_development_dependency "rake"
31
31
  spec.add_development_dependency "rspec", "~> 3.0.0"
32
32
  spec.add_development_dependency "pry"
@@ -26,7 +26,8 @@ module DropletKit
26
26
  property :kernel, scopes: [:read], include: KernelMapping
27
27
 
28
28
  # Create properties arent quite the same
29
- property :name, scopes: [:create]
29
+ property :name, scopes: [:create] # "Regular" create
30
+ property :names, scopes: [:create] # Multiple create
30
31
  property :region, scopes: [:create]
31
32
  property :size, scopes: [:create]
32
33
  property :image, scopes: [:create]
@@ -7,6 +7,7 @@ module DropletKit
7
7
  end
8
8
 
9
9
  # Used for creates
10
+ attribute :names
10
11
  attribute :ssh_keys
11
12
  attribute :backups
12
13
  attribute :size
@@ -18,6 +18,12 @@ module DropletKit
18
18
  handler(422) { |response| ErrorMapping.fail_with(FailedCreate, response.body) }
19
19
  end
20
20
 
21
+ action :create_multiple, 'POST /v2/droplets' do
22
+ body { |object| DropletMapping.representation_for(:create, object) }
23
+ handler(202) { |response| DropletMapping.extract_collection(response.body, :read) }
24
+ handler(422) { |response| ErrorMapping.fail_with(FailedCreate, response.body) }
25
+ end
26
+
21
27
  action :delete, 'DELETE /v2/droplets/:id' do
22
28
  handler(204) { |response| true }
23
29
  end
@@ -1,3 +1,3 @@
1
1
  module DropletKit
2
- VERSION = "1.3.2"
2
+ VERSION = "1.3.3"
3
3
  end
@@ -0,0 +1,160 @@
1
+ {
2
+ "droplets": [
3
+ {
4
+ "id": 19,
5
+ "name": "test-01.example.com",
6
+ "memory": 1024,
7
+ "vcpus": 2,
8
+ "disk": 20,
9
+ "region": {
10
+ "slug": "nyc1",
11
+ "name": "New York",
12
+ "sizes": [
13
+ "1024mb",
14
+ "512mb"
15
+ ],
16
+ "available": true,
17
+ "features": [
18
+ "virtio",
19
+ "private_networking",
20
+ "backups",
21
+ "ipv6"
22
+ ]
23
+ },
24
+ "image": {
25
+ "id": 119192817,
26
+ "name": "Ubuntu 13.04",
27
+ "distribution": "ubuntu",
28
+ "slug": "ubuntu1304",
29
+ "public": true,
30
+ "regions": [
31
+ "nyc1"
32
+ ],
33
+ "created_at": "2014-07-29T14:35:37Z"
34
+ },
35
+ "size_slug": "1024mb",
36
+ "locked": false,
37
+ "status": "active",
38
+ "networks": {
39
+ "v4": [
40
+ {
41
+ "ip_address": "10.0.0.19",
42
+ "netmask": "255.255.0.0",
43
+ "gateway": "10.0.0.1",
44
+ "type": "private"
45
+ },
46
+ {
47
+ "ip_address": "127.0.0.19",
48
+ "netmask": "255.255.255.0",
49
+ "gateway": "127.0.0.20",
50
+ "type": "public"
51
+ }
52
+ ],
53
+ "v6": [
54
+ {
55
+ "ip_address": "2001::13",
56
+ "cidr": 124,
57
+ "gateway": "2400:6180:0000:00D0:0000:0000:0009:7000",
58
+ "type": "public"
59
+ }
60
+ ]
61
+ },
62
+ "kernel": {
63
+ "id": 485432985,
64
+ "name": "DO-recovery-static-fsck",
65
+ "version": "3.8.0-25-generic"
66
+ },
67
+ "created_at": "2014-07-29T14:35:37Z",
68
+ "features": [
69
+ "ipv6"
70
+ ],
71
+ "backup_ids": [
72
+ 449676382
73
+ ],
74
+ "snapshot_ids": [
75
+ 449676383
76
+ ],
77
+ "action_ids": [
78
+
79
+ ]
80
+ },
81
+ {
82
+ "id": 20,
83
+ "name": "test-02.example.com",
84
+ "memory": 1024,
85
+ "vcpus": 2,
86
+ "disk": 20,
87
+ "region": {
88
+ "slug": "nyc1",
89
+ "name": "New York",
90
+ "sizes": [
91
+ "1024mb",
92
+ "512mb"
93
+ ],
94
+ "available": true,
95
+ "features": [
96
+ "virtio",
97
+ "private_networking",
98
+ "backups",
99
+ "ipv6"
100
+ ]
101
+ },
102
+ "image": {
103
+ "id": 119192817,
104
+ "name": "Ubuntu 13.04",
105
+ "distribution": "ubuntu",
106
+ "slug": "ubuntu1304",
107
+ "public": true,
108
+ "regions": [
109
+ "nyc1"
110
+ ],
111
+ "created_at": "2014-07-29T14:35:37Z"
112
+ },
113
+ "size_slug": "1024mb",
114
+ "locked": false,
115
+ "status": "active",
116
+ "networks": {
117
+ "v4": [
118
+ {
119
+ "ip_address": "10.0.0.19",
120
+ "netmask": "255.255.0.0",
121
+ "gateway": "10.0.0.1",
122
+ "type": "private"
123
+ },
124
+ {
125
+ "ip_address": "127.0.0.19",
126
+ "netmask": "255.255.255.0",
127
+ "gateway": "127.0.0.20",
128
+ "type": "public"
129
+ }
130
+ ],
131
+ "v6": [
132
+ {
133
+ "ip_address": "2001::13",
134
+ "cidr": 124,
135
+ "gateway": "2400:6180:0000:00D0:0000:0000:0009:7000",
136
+ "type": "public"
137
+ }
138
+ ]
139
+ },
140
+ "kernel": {
141
+ "id": 485432985,
142
+ "name": "DO-recovery-static-fsck",
143
+ "version": "3.8.0-25-generic"
144
+ },
145
+ "created_at": "2014-07-29T14:35:37Z",
146
+ "features": [
147
+ "ipv6"
148
+ ],
149
+ "backup_ids": [
150
+ 449676382
151
+ ],
152
+ "snapshot_ids": [
153
+ 449676383
154
+ ],
155
+ "action_ids": [
156
+
157
+ ]
158
+ }
159
+ ]
160
+ }
@@ -4,15 +4,22 @@ RSpec.describe DropletKit::DropletResource do
4
4
  subject(:resource) { described_class.new(connection: connection) }
5
5
  include_context 'resources'
6
6
 
7
- # Theres a lot to check
8
- def check_droplet(droplet)
9
- expect(droplet.id).to eq(19)
10
- expect(droplet.name).to eq('test.example.com')
11
- expect(droplet.memory).to eq(1024)
12
- expect(droplet.vcpus).to eq(2)
13
- expect(droplet.disk).to eq(20)
14
- expect(droplet.locked).to eq(false)
15
- expect(droplet.status).to eq('active')
7
+ # There's a lot to check
8
+ def check_droplet(droplet, overrides = {})
9
+ attrs = {
10
+ id: 19,
11
+ name: 'test.example.com',
12
+ memory: 1024,
13
+ vcpus: 2,
14
+ disk: 20,
15
+ locked: false,
16
+ status: 'active'
17
+ }.merge(overrides)
18
+
19
+ attrs.each do |attr, val|
20
+ expect(droplet.send(attr)).to eq attrs[attr]
21
+ end
22
+
16
23
  expect(droplet.created_at).to be_present
17
24
  expect(droplet.backup_ids).to include(449676382)
18
25
  expect(droplet.snapshot_ids).to include(449676383)
@@ -153,6 +160,64 @@ RSpec.describe DropletKit::DropletResource do
153
160
  end
154
161
  end
155
162
 
163
+ describe '#create_multiple' do
164
+ let(:path) { '/v2/droplets' }
165
+
166
+ context 'for a successful multiple create' do
167
+ it 'returns the created droplets' do
168
+ droplet = DropletKit::Droplet.new(
169
+ names: ['test-01.example.com', 'test-02.example.com'],
170
+ region: 'nyc1',
171
+ size: '512mb',
172
+ image: 'ubuntu-14-04-x86',
173
+ ssh_keys: [123],
174
+ backups: true,
175
+ ipv6: true,
176
+ private_networking: true,
177
+ user_data: "#cloud-config\nruncmd\n\t- echo 'Hello!'"
178
+ )
179
+
180
+ as_hash = DropletKit::DropletMapping.hash_for(:create, droplet)
181
+ expect(as_hash['names']).to eq(droplet.names)
182
+ expect(as_hash['region']).to eq(droplet.region)
183
+ expect(as_hash['size']).to eq(droplet.size)
184
+ expect(as_hash['image']).to eq(droplet.image)
185
+ expect(as_hash['ssh_keys']).to eq(droplet.ssh_keys)
186
+ expect(as_hash['backups']).to eq(droplet.backups)
187
+ expect(as_hash['ipv6']).to eq(droplet.ipv6)
188
+ expect(as_hash['private_networking']).to eq(droplet.private_networking)
189
+ expect(as_hash['user_data']).to eq(droplet.user_data)
190
+
191
+ as_string = DropletKit::DropletMapping.representation_for(:create, droplet)
192
+ stub_do_api(path, :post).with(body: as_string).to_return(body: api_fixture('droplets/create_multiple'), status: 202)
193
+
194
+ created_droplets = resource.create_multiple(droplet)
195
+ check_droplet(created_droplets[0], name: 'test-01.example.com')
196
+ check_droplet(created_droplets[1], id: 20, name: 'test-02.example.com')
197
+ end
198
+
199
+ it 'reuses the same object' do
200
+ droplet = DropletKit::Droplet.new(
201
+ names: ['test-01.example.com', 'test-02.example.com'],
202
+ region: 'nyc1',
203
+ size: '512mb',
204
+ image: 'ubuntu-14-04-x86'
205
+ )
206
+
207
+ json = DropletKit::DropletMapping.representation_for(:create, droplet)
208
+ stub_do_api(path, :post).with(body: json).to_return(body: api_fixture('droplets/create_multiple'), status: 202)
209
+ created_droplets = resource.create_multiple(droplet)
210
+ check_droplet(created_droplets[0], name: 'test-01.example.com')
211
+ check_droplet(created_droplets[1], id: 20, name: 'test-02.example.com')
212
+ end
213
+ end
214
+
215
+ it_behaves_like 'an action that handles invalid parameters' do
216
+ let(:action) { 'create' }
217
+ let(:arguments) { DropletKit::Droplet.new }
218
+ end
219
+ end
220
+
156
221
  describe '#kernels' do
157
222
  it 'returns a list of kernels for a droplet' do
158
223
  stub_do_api('/v2/droplets/1066/kernels', :get).to_return(body: api_fixture('droplets/list_kernels'))
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: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Ross
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -92,14 +92,14 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '1.6'
95
+ version: 1.11.0
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '1.6'
102
+ version: 1.11.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rake
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -276,6 +276,7 @@ files:
276
276
  - spec/fixtures/droplets/all.json
277
277
  - spec/fixtures/droplets/all_empty.json
278
278
  - spec/fixtures/droplets/create.json
279
+ - spec/fixtures/droplets/create_multiple.json
279
280
  - spec/fixtures/droplets/find.json
280
281
  - spec/fixtures/droplets/list_actions.json
281
282
  - spec/fixtures/droplets/list_backups.json
@@ -349,7 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
349
350
  version: '0'
350
351
  requirements: []
351
352
  rubyforge_project:
352
- rubygems_version: 2.4.5
353
+ rubygems_version: 2.4.6
353
354
  signing_key:
354
355
  specification_version: 4
355
356
  summary: Droplet Kit is the official Ruby library for DigitalOcean's API
@@ -386,6 +387,7 @@ test_files:
386
387
  - spec/fixtures/droplets/all.json
387
388
  - spec/fixtures/droplets/all_empty.json
388
389
  - spec/fixtures/droplets/create.json
390
+ - spec/fixtures/droplets/create_multiple.json
389
391
  - spec/fixtures/droplets/find.json
390
392
  - spec/fixtures/droplets/list_actions.json
391
393
  - spec/fixtures/droplets/list_backups.json
@@ -439,4 +441,3 @@ test_files:
439
441
  - spec/support/shared_examples/common_errors.rb
440
442
  - spec/support/shared_examples/paginated_endpoint.rb
441
443
  - spec/support/shared_examples/unsuccessful_create.rb
442
- has_rdoc: