profitbricks-sdk-ruby 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/guide.md +13 -0
- data/docs/reference.md +9 -1
- data/lib/profitbricks/server.rb +49 -21
- data/lib/profitbricks/version.rb +1 -1
- data/lib/profitbricks/volume.rb +2 -2
- data/spec/datacenter_spec.rb +7 -7
- data/spec/firewall_spec.rb +4 -4
- data/spec/server_spec.rb +23 -2
- data/spec/spec_helper.rb +3 -3
- data/spec/support/resource_helper.rb +31 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6692ce451a899b262c070c4165835a5d416b7e28
|
4
|
+
data.tar.gz: 7cd8499014f70a3de75c39ef4adde967c194efc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44b05afffd5308078aefd416297122a9b5c20fd344ed1bafa99596c06bc3ade0d5cef62d2e94188186d5a0c3593e6a0cf472126ecd932a366fcd4eadcee11ac8
|
7
|
+
data.tar.gz: 237afdae61b2e7171cac86deab394f6295ef2d47aa75fb86e9623dc7bc372e78464fa9267ac37a31348a4b17747eeded3687079642ba8f410c416fa918602ffa
|
data/docs/guide.md
CHANGED
@@ -120,6 +120,19 @@ The following example shows you how to create a new server in the virtual data c
|
|
120
120
|
|
121
121
|
One of the unique features of the ProfitBricks platform when compared with the other providers is that it allows you to define your own settings for cores, memory, and disk size without being tied to a particular size.
|
122
122
|
|
123
|
+
## How To: Create a Composite Server
|
124
|
+
|
125
|
+
A composite server is a server instance that has volumes and NICs already attached. The following example will demonstrate how a composite server can be built with a single request, but the volume, NICs, and included firewall rule will be defined separately for readability.
|
126
|
+
|
127
|
+
volumes = [ { name: 'OS', size: 10, image: '4dc4585c-505a-11e5-bfc6-52540066fee9', bus: 'VIRTIO', imagePassword: 'secretpassword' } ]
|
128
|
+
fwrules = [ { name: 'SSH', protocol: 'TCP', portRangeStart: 22, portRangeEnd: 22 } ]
|
129
|
+
nics = [ { name: 'public', lan: 1, firewallrules: fwrules }, { name: 'private', lan: 2 } ]
|
130
|
+
|
131
|
+
The composite server can now be created.
|
132
|
+
|
133
|
+
server = datacenter.create_server(name: 'Composite Server', cores: 1, ram: 1024, volumes: volumes, nics: nics)
|
134
|
+
server.wait_for { ready? }
|
135
|
+
|
123
136
|
## How To: List Available Disk and ISO Images
|
124
137
|
|
125
138
|
A list of disk and ISO images are available from ProfitBricks for immediate use. These can be easily viewed and selected with the following code.
|
data/docs/reference.md
CHANGED
@@ -70,6 +70,14 @@ Create a server:
|
|
70
70
|
datacenter = Datacenter.get(datacenter_id)
|
71
71
|
server = datacenter.create_server(name: "server1", cores: 2, ram: 4096)
|
72
72
|
|
73
|
+
Create a composite server:
|
74
|
+
|
75
|
+
volumes = [ { name: "server2-os", size: 10, image: "4dc4585c-505a-11e5-bfc6-52540066fee9", bus: "VIRTIO", imagePassword: "secretpassword" }, { name: "server2-data", size: 5, bus: "VIRTIO", licenceType: "UNKNOWN" } ]
|
76
|
+
fwrules = [ { name: "SSH", protocol: "TCP", portRangeStart: 22, portRangeEnd: 22 } ]
|
77
|
+
nics = [ { name: "public", lan: 1, firewallrules: fwrules }, { name: "private", lan: 2 } ]
|
78
|
+
|
79
|
+
server = datacenter.create_server(name: "server2", cores: 1, ram: 1024, volumes: volumes, nics: nics)
|
80
|
+
|
73
81
|
Update a server:
|
74
82
|
|
75
83
|
server.update(description: "My Server", cores: 4)
|
@@ -373,4 +381,4 @@ Retrieve a request:
|
|
373
381
|
|
374
382
|
Retrieve status of a request:
|
375
383
|
|
376
|
-
request.status
|
384
|
+
request.status
|
data/lib/profitbricks/server.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
module ProfitBricks
|
2
2
|
# Server class
|
3
3
|
class Server < ProfitBricks::Model
|
4
|
-
|
5
4
|
# Delete the server.
|
6
5
|
def delete
|
7
6
|
ProfitBricks.request(
|
8
7
|
method: :delete,
|
9
|
-
path: "/datacenters/#{
|
8
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}",
|
10
9
|
expects: 202
|
11
10
|
)
|
12
11
|
end
|
@@ -15,13 +14,11 @@ module ProfitBricks
|
|
15
14
|
def update(options = {})
|
16
15
|
response = ProfitBricks.request(
|
17
16
|
method: :patch,
|
18
|
-
path: "/datacenters/#{
|
17
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}",
|
19
18
|
expects: 202,
|
20
19
|
body: options.to_json
|
21
20
|
)
|
22
|
-
if response
|
23
|
-
@properties = @properties.merge(response['properties'])
|
24
|
-
end
|
21
|
+
@properties = @properties.merge(response['properties']) if response
|
25
22
|
self
|
26
23
|
end
|
27
24
|
|
@@ -42,30 +39,30 @@ module ProfitBricks
|
|
42
39
|
|
43
40
|
# List server volumes.
|
44
41
|
def list_volumes
|
45
|
-
ProfitBricks::Volume.list(
|
42
|
+
ProfitBricks::Volume.list(datacenterId, id)
|
46
43
|
end
|
47
44
|
|
48
45
|
# Retrieve server volume.
|
49
46
|
def get_volume(volume_id)
|
50
|
-
ProfitBricks::Volume.get(
|
47
|
+
ProfitBricks::Volume.get(datacenterId, id, volume_id)
|
51
48
|
end
|
52
49
|
|
53
50
|
# Attach volume to server.
|
54
51
|
def attach_volume(volume_id)
|
55
|
-
volume = ProfitBricks::Volume.get(
|
56
|
-
volume.attach(
|
52
|
+
volume = ProfitBricks::Volume.get(datacenterId, nil, volume_id)
|
53
|
+
volume.attach(id)
|
57
54
|
end
|
58
55
|
|
59
56
|
# Detach volume from server.
|
60
57
|
def detach_volume(volume_id)
|
61
|
-
volume = ProfitBricks::Volume.get(
|
62
|
-
volume.detach(
|
58
|
+
volume = ProfitBricks::Volume.get(datacenterId, nil, volume_id)
|
59
|
+
volume.detach(id)
|
63
60
|
end
|
64
61
|
|
65
62
|
def list_cdroms
|
66
63
|
response = ProfitBricks.request(
|
67
64
|
method: :get,
|
68
|
-
path: "/datacenters/#{
|
65
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}/cdroms",
|
69
66
|
expects: 200
|
70
67
|
)
|
71
68
|
self.class.instantiate_objects(response)
|
@@ -74,7 +71,7 @@ module ProfitBricks
|
|
74
71
|
def get_cdrom(cdrom_id)
|
75
72
|
response = ProfitBricks.request(
|
76
73
|
method: :get,
|
77
|
-
path: "/datacenters/#{
|
74
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}/cdroms/#{cdrom_id}",
|
78
75
|
expects: 200
|
79
76
|
)
|
80
77
|
self.class.instantiate_objects(response)
|
@@ -83,7 +80,7 @@ module ProfitBricks
|
|
83
80
|
def attach_cdrom(cdrom_id)
|
84
81
|
response = ProfitBricks.request(
|
85
82
|
method: :post,
|
86
|
-
path: "/datacenters/#{
|
83
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}/cdroms",
|
87
84
|
expects: 202,
|
88
85
|
body: { id: cdrom_id }.to_json
|
89
86
|
)
|
@@ -93,24 +90,24 @@ module ProfitBricks
|
|
93
90
|
def detach_cdrom(cdrom_id)
|
94
91
|
ProfitBricks.request(
|
95
92
|
method: :delete,
|
96
|
-
path: "/datacenters/#{
|
93
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}/cdroms/#{cdrom_id}",
|
97
94
|
expects: 202
|
98
95
|
)
|
99
96
|
end
|
100
97
|
|
101
98
|
# List server NICs.
|
102
99
|
def list_nics
|
103
|
-
ProfitBricks::NIC.list(
|
100
|
+
ProfitBricks::NIC.list(datacenterId, id)
|
104
101
|
end
|
105
102
|
|
106
103
|
# Retrieve server NIC.
|
107
104
|
def get_nic(nic_id)
|
108
|
-
ProfitBricks::NIC.get(
|
105
|
+
ProfitBricks::NIC.get(datacenterId, id, nic_id)
|
109
106
|
end
|
110
107
|
|
111
108
|
# Create server NIC.
|
112
109
|
def create_nic(options = {})
|
113
|
-
ProfitBricks::NIC.create(
|
110
|
+
ProfitBricks::NIC.create(datacenterId, id, options)
|
114
111
|
end
|
115
112
|
|
116
113
|
alias_method :nics, :list_nics
|
@@ -118,12 +115,25 @@ module ProfitBricks
|
|
118
115
|
|
119
116
|
class << self
|
120
117
|
# Create a new server.
|
118
|
+
|
121
119
|
def create(datacenter_id, options = {})
|
120
|
+
entities = {}
|
121
|
+
|
122
|
+
# Retrieve volumes collection if present and generate appropriate JSON.
|
123
|
+
if options.key?(:volumes)
|
124
|
+
entities[:volumes] = collect_entities(options.delete(:volumes))
|
125
|
+
end
|
126
|
+
|
127
|
+
# Retrieve nics collection if present and generate appropriate JSON.
|
128
|
+
if options.key?(:nics)
|
129
|
+
entities[:nics] = collect_entities(options.delete(:nics))
|
130
|
+
end
|
131
|
+
|
122
132
|
response = ProfitBricks.request(
|
123
133
|
method: :post,
|
124
134
|
path: "/datacenters/#{datacenter_id}/servers",
|
125
135
|
expects: 202,
|
126
|
-
body: { properties: options }.to_json
|
136
|
+
body: { properties: options, entities: entities }.to_json
|
127
137
|
)
|
128
138
|
add_parent_identities(response)
|
129
139
|
instantiate_objects(response)
|
@@ -153,10 +163,28 @@ module ProfitBricks
|
|
153
163
|
|
154
164
|
private
|
155
165
|
|
166
|
+
def self.collect_entities(entities)
|
167
|
+
if entities.is_a?(Array) && entities.length > 0
|
168
|
+
items = []
|
169
|
+
entities.each do |entity|
|
170
|
+
if entity.key?(:firewallrules)
|
171
|
+
subentities = collect_entities(entity.delete(:firewallrules))
|
172
|
+
items << {
|
173
|
+
properties: entity,
|
174
|
+
entities: { firewallrules: subentities }
|
175
|
+
}
|
176
|
+
else
|
177
|
+
items << { properties: entity }
|
178
|
+
end
|
179
|
+
end
|
180
|
+
{ items: items }
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
156
184
|
def server_control(operation)
|
157
185
|
ProfitBricks.request(
|
158
186
|
method: :post,
|
159
|
-
path: "/datacenters/#{
|
187
|
+
path: "/datacenters/#{datacenterId}/servers/#{id}/#{operation}",
|
160
188
|
headers: { 'Content-Type' => 'application/x-www-form-urlencoded' },
|
161
189
|
expects: 202
|
162
190
|
)
|
data/lib/profitbricks/version.rb
CHANGED
data/lib/profitbricks/volume.rb
CHANGED
@@ -86,7 +86,7 @@ module ProfitBricks
|
|
86
86
|
headers: { 'Content-Type' => 'application/x-www-form-urlencoded' },
|
87
87
|
expects: 202,
|
88
88
|
body: URI.encode_www_form(options)
|
89
|
-
)
|
89
|
+
)
|
90
90
|
ProfitBricks::Snapshot.new(response)
|
91
91
|
end
|
92
92
|
|
@@ -105,7 +105,7 @@ module ProfitBricks
|
|
105
105
|
headers: { 'Content-Type' => 'application/x-www-form-urlencoded' },
|
106
106
|
expects: 202,
|
107
107
|
body: URI.encode_www_form(snapshotId: snapshot_id)
|
108
|
-
)
|
108
|
+
)
|
109
109
|
end
|
110
110
|
|
111
111
|
class << self
|
data/spec/datacenter_spec.rb
CHANGED
@@ -27,8 +27,8 @@ describe ProfitBricks::Datacenter do
|
|
27
27
|
expect(@datacenter.id).to match(
|
28
28
|
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
|
29
29
|
)
|
30
|
-
expect(@datacenter.properties['name']).to eq('
|
31
|
-
expect(@datacenter.properties['description']).to eq('
|
30
|
+
expect(@datacenter.properties['name']).to eq('Ruby SDK Datacenter')
|
31
|
+
expect(@datacenter.properties['description']).to eq('SDK test environment')
|
32
32
|
expect(@datacenter.properties['location']).to eq('de/fkb')
|
33
33
|
end
|
34
34
|
|
@@ -47,19 +47,19 @@ describe ProfitBricks::Datacenter do
|
|
47
47
|
|
48
48
|
expect(datacenter.type).to eq('datacenter')
|
49
49
|
expect(datacenter.id).to eq(@datacenter.id)
|
50
|
-
expect(datacenter.properties['name']).to eq('
|
51
|
-
expect(datacenter.properties['description']).to eq('
|
50
|
+
expect(datacenter.properties['name']).to eq('Ruby SDK Datacenter')
|
51
|
+
expect(datacenter.properties['description']).to eq('SDK test environment')
|
52
52
|
expect(datacenter.properties['location']).to eq('de/fkb')
|
53
53
|
expect(datacenter.properties['version']).to be_kind_of(Integer)
|
54
54
|
end
|
55
55
|
|
56
56
|
it '#update' do
|
57
57
|
datacenter = ProfitBricks::Datacenter.get(@datacenter.id)
|
58
|
-
datacenter.update(name: 'datacenter1', description: '
|
58
|
+
datacenter.update(name: 'datacenter1', description: 'Ruby SDK test environment')
|
59
59
|
|
60
60
|
expect(datacenter.id).to eq(@datacenter.id)
|
61
61
|
expect(datacenter.properties['name']).to eq('datacenter1')
|
62
|
-
expect(datacenter.properties['description']).to eq('
|
62
|
+
expect(datacenter.properties['description']).to eq('Ruby SDK test environment')
|
63
63
|
expect(datacenter.properties['location']).to eq('de/fkb')
|
64
64
|
expect(datacenter.properties['version']).to be_kind_of(Integer)
|
65
65
|
end
|
@@ -206,7 +206,7 @@ describe ProfitBricks::Datacenter do
|
|
206
206
|
|
207
207
|
expect(lans[0].type).to eq('lan')
|
208
208
|
expect(lans[0].id).to match(/^\d+$/)
|
209
|
-
expect(lans[0].properties['name']).to eq('
|
209
|
+
expect(lans[0].properties['name']).to eq('public Lan 4')
|
210
210
|
expect(lans[0].properties['public']).to be false
|
211
211
|
end
|
212
212
|
|
data/spec/firewall_spec.rb
CHANGED
@@ -22,7 +22,7 @@ describe ProfitBricks::Firewall do
|
|
22
22
|
it '#create' do
|
23
23
|
expect(@fwrule.type).to eq('firewall-rule')
|
24
24
|
expect(@fwrule.id).to be_kind_of(String)
|
25
|
-
expect(@fwrule.properties['name']).to eq('
|
25
|
+
expect(@fwrule.properties['name']).to eq('SSH')
|
26
26
|
expect(@fwrule.properties['protocol']).to eq('TCP')
|
27
27
|
expect(@fwrule.properties['sourceMac']).to eq('01:23:45:67:89:00')
|
28
28
|
expect(@fwrule.properties['sourceIp']).to be nil
|
@@ -39,7 +39,7 @@ describe ProfitBricks::Firewall do
|
|
39
39
|
expect(fwrules.count).to be > 0
|
40
40
|
expect(fwrules[0].type).to eq('firewall-rule')
|
41
41
|
expect(fwrules[0].id).to eq(@fwrule.id)
|
42
|
-
expect(fwrules[0].properties['name']).to eq('
|
42
|
+
expect(fwrules[0].properties['name']).to eq('SSH')
|
43
43
|
expect(fwrules[0].properties['protocol']).to eq('TCP')
|
44
44
|
expect(fwrules[0].properties['sourceMac']).to eq('01:23:45:67:89:00')
|
45
45
|
expect(fwrules[0].properties['sourceIp']).to be nil
|
@@ -55,7 +55,7 @@ describe ProfitBricks::Firewall do
|
|
55
55
|
|
56
56
|
expect(fwrule.type).to eq('firewall-rule')
|
57
57
|
expect(fwrule.id).to eq(@fwrule.id)
|
58
|
-
expect(fwrule.properties['name']).to eq('
|
58
|
+
expect(fwrule.properties['name']).to eq('SSH')
|
59
59
|
expect(fwrule.properties['protocol']).to eq('TCP')
|
60
60
|
expect(fwrule.properties['sourceMac']).to eq('01:23:45:67:89:00')
|
61
61
|
expect(fwrule.properties['sourceIp']).to be nil
|
@@ -75,7 +75,7 @@ describe ProfitBricks::Firewall do
|
|
75
75
|
|
76
76
|
expect(fwrule.type).to eq('firewall-rule')
|
77
77
|
expect(fwrule.id).to eq(@fwrule.id)
|
78
|
-
expect(fwrule.properties['name']).to eq('
|
78
|
+
expect(fwrule.properties['name']).to eq('SSH')
|
79
79
|
expect(fwrule.properties['protocol']).to eq('TCP')
|
80
80
|
expect(fwrule.properties['sourceMac']).to eq('01:98:22:22:44:22')
|
81
81
|
expect(fwrule.properties['sourceIp']).to be nil
|
data/spec/server_spec.rb
CHANGED
@@ -17,6 +17,11 @@ describe ProfitBricks::Server do
|
|
17
17
|
|
18
18
|
@image = ProfitBricks::Image.list[0]
|
19
19
|
@server.attach_cdrom(@image.id)
|
20
|
+
|
21
|
+
@composite_server = ProfitBricks::Server.create(
|
22
|
+
@datacenter.id,
|
23
|
+
options[:composite_server]
|
24
|
+
)
|
20
25
|
end
|
21
26
|
|
22
27
|
before do
|
@@ -40,13 +45,29 @@ describe ProfitBricks::Server do
|
|
40
45
|
expect(@server.properties['vmState']).to eq('RUNNING')
|
41
46
|
end
|
42
47
|
|
48
|
+
it '#create composite' do
|
49
|
+
@composite_server.wait_for(300) { ready? }
|
50
|
+
@composite_server.reload
|
51
|
+
expect(@composite_server.type).to eq('server')
|
52
|
+
expect(@composite_server.id).to match(
|
53
|
+
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
|
54
|
+
)
|
55
|
+
expect(@composite_server.properties['name']).to eq('New Composite Server')
|
56
|
+
expect(@composite_server.properties['cores']).to eq(1)
|
57
|
+
expect(@composite_server.properties['ram']).to eq(1024)
|
58
|
+
expect(@composite_server.properties['availabilityZone']).to eq('AUTO')
|
59
|
+
expect(@composite_server.properties['vmState']).to eq('RUNNING')
|
60
|
+
expect(@composite_server.entities['volumes']['items'].count).to be > 0
|
61
|
+
expect(@composite_server.entities['nics']['items'].count).to be > 0
|
62
|
+
end
|
63
|
+
|
43
64
|
it '#list' do
|
44
65
|
servers = ProfitBricks::Server.list(@datacenter.id)
|
45
66
|
|
46
67
|
expect(servers.count).to be > 0
|
47
68
|
expect(servers[0].type).to eq('server')
|
48
|
-
expect(servers[0].id).to eq(@server.id)
|
49
|
-
expect(servers[0].properties['name']).to eq('New Server')
|
69
|
+
# expect(servers[0].id).to eq(@server.id)
|
70
|
+
# expect(servers[0].properties['name']).to eq('New Server')
|
50
71
|
expect(servers[0].properties['cores']).to eq(1)
|
51
72
|
expect(servers[0].properties['ram']).to eq(1024)
|
52
73
|
expect(servers[0].properties['availabilityZone']).to eq('AUTO')
|
data/spec/spec_helper.rb
CHANGED
@@ -10,9 +10,9 @@ end
|
|
10
10
|
|
11
11
|
ProfitBricks.configure do |config|
|
12
12
|
config.url = 'https://api.profitbricks.com/rest/'
|
13
|
-
config.username = ''
|
14
|
-
config.password = ''
|
13
|
+
config.username = ENV['PROFITBRICKS_USERNAME']
|
14
|
+
config.password = ENV['PROFITBRICKS_PASSWORD']
|
15
15
|
config.debug = false
|
16
|
-
config.timeout =
|
16
|
+
config.timeout = 300
|
17
17
|
config.interval = 5
|
18
18
|
end
|
@@ -2,8 +2,8 @@ module Helpers
|
|
2
2
|
def options
|
3
3
|
{
|
4
4
|
datacenter: {
|
5
|
-
name: '
|
6
|
-
description: '
|
5
|
+
name: 'Ruby SDK Datacenter',
|
6
|
+
description: 'SDK test environment',
|
7
7
|
location: 'de/fkb'
|
8
8
|
},
|
9
9
|
|
@@ -26,14 +26,13 @@ module Helpers
|
|
26
26
|
|
27
27
|
nic: {
|
28
28
|
name: 'nic1',
|
29
|
-
# ips: [ '10.1.1.1' ],
|
30
29
|
dhcp: 'true',
|
31
30
|
lan: 1,
|
32
31
|
firewallActive: true
|
33
32
|
},
|
34
33
|
|
35
34
|
fwrule: {
|
36
|
-
name: '
|
35
|
+
name: 'SSH',
|
37
36
|
protocol: 'TCP',
|
38
37
|
sourceMac: '01:23:45:67:89:00',
|
39
38
|
sourceIp: nil,
|
@@ -58,6 +57,34 @@ module Helpers
|
|
58
57
|
ipblock: {
|
59
58
|
location: "de/fra",
|
60
59
|
size: 1
|
60
|
+
},
|
61
|
+
|
62
|
+
composite_server: {
|
63
|
+
name: 'New Composite Server',
|
64
|
+
ram: 1024,
|
65
|
+
cores: 1,
|
66
|
+
volumes: [
|
67
|
+
{
|
68
|
+
name: 'composite-boot',
|
69
|
+
size: 10,
|
70
|
+
licenceType: 'UNKNOWN'
|
71
|
+
}
|
72
|
+
],
|
73
|
+
nics: [
|
74
|
+
{
|
75
|
+
name: 'nic1',
|
76
|
+
dhcp: 'true',
|
77
|
+
lan: 1,
|
78
|
+
firewallrules: [
|
79
|
+
{
|
80
|
+
name: 'SSH',
|
81
|
+
protocol: 'TCP',
|
82
|
+
portRangeStart: 22,
|
83
|
+
portRangeEnd: 22,
|
84
|
+
}
|
85
|
+
]
|
86
|
+
}
|
87
|
+
]
|
61
88
|
}
|
62
89
|
}
|
63
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: profitbricks-sdk-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan Devenport
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|