colombo 0.0.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.
- data.tar.gz.sig +1 -0
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/README.md +132 -0
- data/Rakefile +15 -0
- data/colombo.gemspec +36 -0
- data/gem-public_cert.pem +20 -0
- data/lib/colombo.rb +31 -0
- data/lib/colombo/client.rb +40 -0
- data/lib/colombo/configuration.rb +44 -0
- data/lib/colombo/droplet.rb +84 -0
- data/lib/colombo/droplets.rb +48 -0
- data/lib/colombo/exception.rb +6 -0
- data/lib/colombo/image.rb +22 -0
- data/lib/colombo/images.rb +32 -0
- data/lib/colombo/region.rb +16 -0
- data/lib/colombo/regions.rb +32 -0
- data/lib/colombo/request.rb +48 -0
- data/lib/colombo/size.rb +16 -0
- data/lib/colombo/sizes.rb +22 -0
- data/lib/colombo/ssh_key.rb +32 -0
- data/lib/colombo/ssh_keys.rb +48 -0
- data/lib/colombo/version.rb +5 -0
- data/test/colombo/colombo_test.rb +22 -0
- data/test/colombo/configuration_test.rb +44 -0
- data/test/colombo/droplets_test.rb +47 -0
- data/test/colombo/images_test.rb +37 -0
- data/test/colombo/regions_test.rb +27 -0
- data/test/colombo/request_test.rb +8 -0
- data/test/colombo/sizes_test.rb +27 -0
- data/test/colombo/ssh_keys_test.rb +115 -0
- data/test/colombo/test_helper.rb +22 -0
- metadata +179 -0
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
8=gP�;� CNr�Kıe���+��BF�m��Px�D�C�ce��~&��ۄ1샽&I�����K[GP��3H��W/x�L�#`l�Ǐ���������2��W�ԯ�ɑ��q�xϚd3��}�T�m�c�����v�������epl��,� ?|^��X�g�iI�1��4�y�]/!��`y�`�w��f?l/�Vݓ&<�D?�C�v��g_�;z���+^e��A� �nׂ��m �:sQ��yR�
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
# colombo [](https://codeclimate.com/github/lmmendes/colombo)
|
2
|
+
|
3
|
+
|
4
|
+
A simple Digital Ocean (http://digitalocean.com) API wrapper
|
5
|
+
|
6
|
+
NOTE: This version is an experimental version not ready for usage.
|
7
|
+
|
8
|
+
## Install
|
9
|
+
|
10
|
+
```
|
11
|
+
gem install columbus
|
12
|
+
```
|
13
|
+
|
14
|
+
## Examples
|
15
|
+
|
16
|
+
### Configuration
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
# You can set Columbus configuration at class level like so
|
20
|
+
Colombo.configure do |c|
|
21
|
+
c.api_key = ENV['DO_API_KEY']
|
22
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
23
|
+
end
|
24
|
+
|
25
|
+
# Or configure each instance independently
|
26
|
+
@client = Colombo.new(
|
27
|
+
:api_key => ENV['DO_API_KEY'],
|
28
|
+
:client_id => ENV['DO_CLIENT_ID']
|
29
|
+
)
|
30
|
+
```
|
31
|
+
|
32
|
+
### Droplets
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
# This method returns all active droplets that are currently running in your account
|
36
|
+
@client.droplets()
|
37
|
+
|
38
|
+
# This method returns full information for a specific droplet ID
|
39
|
+
@client.droplets.find( droplet_id )
|
40
|
+
|
41
|
+
# This method allows you to create a new droplet.
|
42
|
+
new_droplet = droplets.create({
|
43
|
+
:name => COLOMBO_DROPLET_NAME ,
|
44
|
+
:image_id => COLOMBO_IMAGE_ID ,
|
45
|
+
:region_id => COLOMBO_REGION_ID ,
|
46
|
+
:size_id => COLOMBO_SIZE_ID
|
47
|
+
})
|
48
|
+
|
49
|
+
# This method allows you to reboot a droplet.
|
50
|
+
# This is the preferred method to use if a server is not responding.
|
51
|
+
@client.droplets.find( droplet_id ).reboot()
|
52
|
+
|
53
|
+
# This method allows you to power cycle a droplet.
|
54
|
+
# This will turn off the droplet and then turn it back on.
|
55
|
+
@client.droplets.find( droplet_id ).power_cycle()
|
56
|
+
|
57
|
+
# This method allows you to shutdown a running droplet.
|
58
|
+
# The droplet will remain in your account.
|
59
|
+
@client.droplets.find( droplet_id ).shutdown()
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
### Regions
|
64
|
+
```ruby
|
65
|
+
# Return all the available regions within the Digital Ocean cloud.
|
66
|
+
@client.regions
|
67
|
+
```
|
68
|
+
|
69
|
+
### Images
|
70
|
+
```ruby
|
71
|
+
# This method returns all the available images that can be accessed by your
|
72
|
+
# client ID. You will have access to all public images by default, and any
|
73
|
+
# snapshots or backups that you have created in your own account.
|
74
|
+
@client.images
|
75
|
+
|
76
|
+
# This method displays the attributes of an image.
|
77
|
+
@client.images.find(image_id)
|
78
|
+
|
79
|
+
# This method allows you to destroy an image. There is no way to restore a
|
80
|
+
# deleted image so be careful and ensure your data is properly backed up.
|
81
|
+
@client.images.find( image_id ).destroy
|
82
|
+
```
|
83
|
+
|
84
|
+
### SSH Keys
|
85
|
+
```ruby
|
86
|
+
# This method lists all the available public SSH keys in your account
|
87
|
+
# that can be added to a droplet.
|
88
|
+
@client.ssh_keys
|
89
|
+
|
90
|
+
# Shows a specific public SSH key in your account that can be added to a droplet.
|
91
|
+
@client.find( ssh_key_id )
|
92
|
+
|
93
|
+
# This method allows you to add a new public SSH key to your account.
|
94
|
+
ssh_key = @client.ssh_keys.create({
|
95
|
+
:name => 'my ssh key name',
|
96
|
+
:ssh_pub_key => 'my ssh key ...'
|
97
|
+
})
|
98
|
+
|
99
|
+
# This method allows you to modify an existing public SSH key in your account.
|
100
|
+
ssh_key.update(:ssh_pub_key => 'my new ssh key')
|
101
|
+
|
102
|
+
# This method will delete the SSH key from your account.
|
103
|
+
ssh_key.destroy
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
### Sizes
|
108
|
+
```ruby
|
109
|
+
# This method returns all the available sizes that can be used to create a droplet.
|
110
|
+
@client.sizes
|
111
|
+
```
|
112
|
+
|
113
|
+
|
114
|
+
## Bug reports and other issues
|
115
|
+
|
116
|
+
* https://github.com/lmmendes/colombo/issues
|
117
|
+
|
118
|
+
## Help and Docs
|
119
|
+
|
120
|
+
* https://github.com/lmmendes/colombo/wiki
|
121
|
+
|
122
|
+
## Contributing
|
123
|
+
|
124
|
+
* Fork the project.
|
125
|
+
* Make your feature addition or bug fix.
|
126
|
+
* Add tests for it. This is important so I don't break it in a future version unintentionally.
|
127
|
+
* Send me a pull request. Bonus points for topic branches.
|
128
|
+
|
129
|
+
## License
|
130
|
+
|
131
|
+
Colombo is free software distributed under the terms of the MIT license reproduced [here](http://opensource.org/licenses/mit-license.html).
|
132
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
require 'rake/testtask'
|
7
|
+
|
8
|
+
Rake::TestTask.new do |test|
|
9
|
+
test.libs << 'lib' << 'test'
|
10
|
+
test.ruby_opts << '-rubygems'
|
11
|
+
test.pattern = 'test/**/*_test.rb'
|
12
|
+
test.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
task :default => :test
|
data/colombo.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
|
+
require "colombo/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "colombo"
|
8
|
+
s.version = Colombo::VERSION
|
9
|
+
s.authors = ["Luis Mendes"]
|
10
|
+
s.email = ["lmmendes@gmail.com"]
|
11
|
+
s.homepage = "http://github.com/lmmendes/colombo"
|
12
|
+
s.summary = %q{Digital Ocean API client}
|
13
|
+
s.description = %q{A simple ruby client for Digital Ocean API}
|
14
|
+
|
15
|
+
s.rubyforge_project = "colombo"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# specify any dependencies here; for example:
|
23
|
+
# s.add_development_dependency "rspec"
|
24
|
+
|
25
|
+
s.add_runtime_dependency "rest-client", "~> 1.6.7"
|
26
|
+
|
27
|
+
s.add_development_dependency "minitest"
|
28
|
+
s.add_development_dependency "webmock"
|
29
|
+
s.add_development_dependency "vcr"
|
30
|
+
s.add_development_dependency "turn"
|
31
|
+
s.add_development_dependency "rake"
|
32
|
+
|
33
|
+
s.signing_key = ENV['RUBYGEMS_PRIVATE_GEM_KEY']
|
34
|
+
s.cert_chain = ['gem-public_cert.pem']
|
35
|
+
|
36
|
+
end
|
data/gem-public_cert.pem
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhsbW1l
|
3
|
+
bmRlczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
|
4
|
+
MB4XDTEzMDMwOTEzMDEwNVoXDTE0MDMwOTEzMDEwNVowPzERMA8GA1UEAwwIbG1t
|
5
|
+
ZW5kZXMxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
6
|
+
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKq9AoMDbDuxK/fzehZi
|
7
|
+
Z7igKqbLeI0zhAMeNOUYhvjXI4nnSpBBba5yAjRDLlZA8AzHCTN0P6tjZBmhk5pB
|
8
|
+
APz1YGVULwkz6VXg+KbUkESYILGLz2i9AYTbuWYXmN/bZ0V3GT+zMvfHEQtSeGiu
|
9
|
+
vK0VI1MVin5101ZcIKI+mObYRzgxpsP4VxvPaFiOHQIRpo+aGevZicGxTHVcG6/g
|
10
|
+
MQTpYKjWgPA22I8/wPruRaYQFW4yQanO9Eh6qZzdShJ94siUyi4DKarQcD4a3XUS
|
11
|
+
eg3Leemiy3EB5+SAvXSMK/GYP06CxedSTxIz9Kr4dWebJBgqSptDzwbHDawdzzeJ
|
12
|
+
nVsCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQU2XPga6SeEXFea7NM14lv
|
13
|
+
3Vo7RgIwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQCHhPKIw7FpckpQ
|
14
|
+
hoRze8gWHzxePeV1yjbutCRuqMhZgJ30Py4XPFtkXEOSdW5AZ4CdaJHl+hz1KgzP
|
15
|
+
2NZN1FSyBADdnt/ubTEjlbHJeDnSQhHctTAYxXA9zLTw1vp43pvW3JEl8GKUs04W
|
16
|
+
LJvv7KFzwoLuJVpW2yWjknFBucSWRtREXGBkr7cXXOaqWvKVmg8LBPFk/aEIK1UT
|
17
|
+
s6YUxzQL+IVpo4B9HRjGnG6BG+UVImieLegjUZvGQHGfHstl7dwiBUingU/2WNLR
|
18
|
+
1pHA8Wxk1URb6lqkcQtDYl92SqSJMEcK4ZM3Fl+DS4Epm3PH56eZ4wBXZDHLECnO
|
19
|
+
nn8B1u2+
|
20
|
+
-----END CERTIFICATE-----
|
data/lib/colombo.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$:.unshift File.expand_path(File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'json'
|
6
|
+
require 'rest-client'
|
7
|
+
|
8
|
+
require "colombo/version"
|
9
|
+
require "colombo/configuration"
|
10
|
+
require "colombo/request"
|
11
|
+
require "colombo/droplet"
|
12
|
+
require "colombo/droplets"
|
13
|
+
require "colombo/region"
|
14
|
+
require "colombo/regions"
|
15
|
+
require "colombo/image"
|
16
|
+
require "colombo/images"
|
17
|
+
require "colombo/ssh_keys"
|
18
|
+
require "colombo/client"
|
19
|
+
require "colombo/sizes"
|
20
|
+
|
21
|
+
|
22
|
+
module Colombo
|
23
|
+
extend Configuration
|
24
|
+
|
25
|
+
|
26
|
+
def self.new(options={})
|
27
|
+
Client.new(options)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Colombo
|
4
|
+
class Client
|
5
|
+
|
6
|
+
include Request
|
7
|
+
|
8
|
+
attr_accessor *Configuration::VALID_CONFIG_KEYS
|
9
|
+
|
10
|
+
def initialize(options={})
|
11
|
+
|
12
|
+
merge_options = Colombo.options.merge(options)
|
13
|
+
Configuration::VALID_CONFIG_KEYS.each do |key|
|
14
|
+
self.send("#{key}=", merge_options[key])
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def droplets
|
20
|
+
Droplets.new(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def regions
|
24
|
+
Regions.new(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def images
|
28
|
+
Images.new(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
def sizes
|
32
|
+
Sizes.new(self)
|
33
|
+
end
|
34
|
+
|
35
|
+
def ssh_keys
|
36
|
+
SshKeys.new(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Colombo
|
4
|
+
module Configuration
|
5
|
+
|
6
|
+
VALID_CONNECTION_KEYS = [:endpoint, :user_agent].freeze
|
7
|
+
|
8
|
+
VALID_OPTION_KEYS = [:api_key, :client_id].freeze
|
9
|
+
|
10
|
+
VALID_CONFIG_KEYS = VALID_CONNECTION_KEYS + VALID_OPTION_KEYS
|
11
|
+
|
12
|
+
DEFAULT_END_POINT = 'https://api.digitalocean.com'
|
13
|
+
|
14
|
+
DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; Colombo a Digital Ocean Ruby API Client/#{Colombo::VERSION}; +https://github/lmmendes/colombo)"
|
15
|
+
|
16
|
+
DEFAULT_API_KEY = nil
|
17
|
+
|
18
|
+
DEFAULT_CLIENT_ID = nil
|
19
|
+
|
20
|
+
attr_accessor *VALID_CONFIG_KEYS
|
21
|
+
|
22
|
+
def reset
|
23
|
+
self.endpoint = DEFAULT_END_POINT
|
24
|
+
self.api_key = DEFAULT_API_KEY
|
25
|
+
self.client_id = DEFAULT_CLIENT_ID
|
26
|
+
self.user_agent = DEFAULT_USER_AGENT
|
27
|
+
end
|
28
|
+
|
29
|
+
def options
|
30
|
+
Hash[ *VALID_CONFIG_KEYS.map{ |key| [key, send(key)] }.flatten ]
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def configure
|
35
|
+
yield self
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.extended(base)
|
39
|
+
base.reset
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Colombo
|
4
|
+
class Droplet
|
5
|
+
|
6
|
+
attr_accessor :id, :name, :image_id, :size_id, :region_id
|
7
|
+
attr_accessor :backups_active, :ip_address, :status
|
8
|
+
|
9
|
+
def initialize(client, droplets, droplet_hash)
|
10
|
+
@client = client
|
11
|
+
if droplet_hash
|
12
|
+
droplet_hash.each do |key, value|
|
13
|
+
__send__("#{key}=", value) if self.respond_to?( key.to_sym )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def reboot
|
19
|
+
@client.request(:get, "/droplets/#{self.id}/reboot/") do |response|
|
20
|
+
return response['event_id']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def power_cycle
|
25
|
+
@client.request(:get, "/droplets/#{self.id}/power_cycle/")
|
26
|
+
end
|
27
|
+
|
28
|
+
def shutdown
|
29
|
+
@client.request(:get, "/droplets/#{self.id}/shutdown/")
|
30
|
+
end
|
31
|
+
|
32
|
+
def power_on
|
33
|
+
@client.request(:get, "/droplets/#{self.id}/power_on/")
|
34
|
+
end
|
35
|
+
|
36
|
+
def password_reset
|
37
|
+
@client.request(:get, "/droplets/#{self.id}/password_reset/")
|
38
|
+
end
|
39
|
+
|
40
|
+
def resize(size_id)
|
41
|
+
@client.request(:get, "/droplets/#{self.id}/resize/", {
|
42
|
+
:size_id => size_id
|
43
|
+
})
|
44
|
+
end
|
45
|
+
|
46
|
+
def snapshot(name=nil)
|
47
|
+
params = name.nil? ? {} : {:name => name}
|
48
|
+
@client.request(:get, "/droplets/#{self.id}/snapshot/", params)
|
49
|
+
end
|
50
|
+
|
51
|
+
def restore(restore_image_id)
|
52
|
+
@client.request(:get, "/droplets/#{self.id}/restore/", {
|
53
|
+
:image_id => restore_id
|
54
|
+
})
|
55
|
+
end
|
56
|
+
|
57
|
+
def rebuild(rebuild_image_id)
|
58
|
+
@client.request(:get, "/droplets/#{self.id}/rebuild/", {:image_id => rebuild_image_id}) do |response|
|
59
|
+
return response['event_id']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def enable_backups
|
64
|
+
@client.request(:get, "/droplets/#{self.id}/enable_backups/") do |response|
|
65
|
+
return response['event_id']
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def disable_backups
|
70
|
+
@client.request(:get, "/droplets/#{self.id}/disable_backups/") do |response|
|
71
|
+
return response['event_id']
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def destroy(confirm=false)
|
76
|
+
return false unless confirm
|
77
|
+
@client.request(:get, "/droplets/#{self.id}/destroy/") do |response|
|
78
|
+
return response['event_id']
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "colombo/droplet"
|
4
|
+
|
5
|
+
module Colombo
|
6
|
+
class Droplets < Array
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
@client.request(:get, '/droplets/', {}) do |response|
|
11
|
+
response['droplets'].each do |droplet|
|
12
|
+
self << Droplet.new(@client, self, droplet)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def create(options={})
|
18
|
+
|
19
|
+
[:name,:size_id, :image_id,:region_id].each do |key|
|
20
|
+
raise "Required `#{key}` attribute" if not options.include?( key )
|
21
|
+
end
|
22
|
+
|
23
|
+
if not options[:ssh_keys].nil?
|
24
|
+
options[:ssh_keys] = options[:ssh_keys].join(',')
|
25
|
+
end
|
26
|
+
|
27
|
+
@client.request(:get, '/droplets/new', options) do |response|
|
28
|
+
puts response
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def find(droplet_id)
|
34
|
+
|
35
|
+
droplet = self.select{ |d| d.id == droplet_id }.first
|
36
|
+
|
37
|
+
return droplet if not droplet.nil?
|
38
|
+
|
39
|
+
response = @client.request(:get, "/droplets/#{droplet_id}") do |response|
|
40
|
+
droplet = Droplet.new(@client, self, response['droplet'])
|
41
|
+
self << droplet
|
42
|
+
end
|
43
|
+
|
44
|
+
return droplet
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Colombo
|
3
|
+
class Image
|
4
|
+
|
5
|
+
attr_accessor :id, :name, :distribution
|
6
|
+
|
7
|
+
def initialize(client, images, image_hash)
|
8
|
+
@client = client
|
9
|
+
image_hash.each do |key, value|
|
10
|
+
__send__("#{key}=", value) if self.respond_to?( key.to_sym )
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy(confirm=false)
|
15
|
+
return unless confirm
|
16
|
+
@client.request(:get, "/images/#{self.id}/destroy/") do |response|
|
17
|
+
return response['event_id']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "colombo/image"
|
4
|
+
|
5
|
+
module Colombo
|
6
|
+
class Images < Array
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
@client.request(:get, '/images/', {}) do |response|
|
11
|
+
response['images'].each do |image|
|
12
|
+
self << Image.new(@client, self, image)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def find(image_id)
|
18
|
+
|
19
|
+
image = self.select{ |i| i.id == image_id }.first
|
20
|
+
|
21
|
+
return image if not image.nil?
|
22
|
+
|
23
|
+
response = @client.request(:get, "/images/#{image_id}") do |response|
|
24
|
+
image = Image.new(@client, self, response['image'])
|
25
|
+
self << image
|
26
|
+
end
|
27
|
+
|
28
|
+
return image
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Colombo
|
3
|
+
class Region
|
4
|
+
|
5
|
+
attr_accessor :id, :name
|
6
|
+
|
7
|
+
def initialize(client, regions, region_hash)
|
8
|
+
@client = client
|
9
|
+
@regions = regions
|
10
|
+
region_hash.each do |key, value|
|
11
|
+
__send__("#{key}=", value) if self.respond_to?( key.to_sym )
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "colombo/region"
|
4
|
+
|
5
|
+
module Colombo
|
6
|
+
class Regions < Array
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
@client.request(:get, '/regions/', {}) do |response|
|
11
|
+
response['regions'].each do |region|
|
12
|
+
self[ region['id'].to_i ] = Region.new(@client, self, region)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def find(region_id)
|
18
|
+
|
19
|
+
region = self.select{ |r| r.id == region_id }.first
|
20
|
+
|
21
|
+
return region if not region.nil?
|
22
|
+
|
23
|
+
response = @client.request(:get, "/regions/#{region_id}") do |response|
|
24
|
+
region = Region.new(@client, self, response['region'])
|
25
|
+
self << region
|
26
|
+
end
|
27
|
+
|
28
|
+
return region
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Colombo
|
4
|
+
module Request
|
5
|
+
|
6
|
+
def request(method=:get, uri='/', params={}, &block)
|
7
|
+
|
8
|
+
params[:client_id] = self.client_id
|
9
|
+
params[:api_key] = self.api_key
|
10
|
+
|
11
|
+
url = self.endpoint + uri
|
12
|
+
|
13
|
+
if method.to_sym == :get
|
14
|
+
params = { :params => params }
|
15
|
+
params[:client_id] = self.client_id
|
16
|
+
params[:api_key] = self.api_key
|
17
|
+
else
|
18
|
+
url += "?client_id=#{self.client_id}&api_key=#{self.api_key}"
|
19
|
+
end
|
20
|
+
|
21
|
+
# puts "url: #{url}"
|
22
|
+
|
23
|
+
response = nil
|
24
|
+
begin
|
25
|
+
response = RestClient.send(method, url, params)
|
26
|
+
rescue => e
|
27
|
+
$stderr.puts e.inspect
|
28
|
+
raise
|
29
|
+
end
|
30
|
+
|
31
|
+
# puts response.inspect
|
32
|
+
|
33
|
+
response = JSON.parse(response)
|
34
|
+
if response['status'].to_s.downcase == 'ok'
|
35
|
+
if block_given?
|
36
|
+
block.call(response)
|
37
|
+
return
|
38
|
+
else
|
39
|
+
return response
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
raise response['error_message']
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/lib/colombo/size.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Colombo
|
3
|
+
class Size
|
4
|
+
|
5
|
+
attr_accessor :id, :name
|
6
|
+
|
7
|
+
def initialize(client, sizes, size_hash)
|
8
|
+
@client = client
|
9
|
+
@sizes = sizes
|
10
|
+
size_hash.each do |key, value|
|
11
|
+
__send__("#{key}=", value) if self.respond_to?( key.to_sym )
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "colombo/size"
|
4
|
+
|
5
|
+
module Colombo
|
6
|
+
class Sizes < Array
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
@client.request(:get, '/sizes/', {}) do |response|
|
11
|
+
response['sizes'].each do |size|
|
12
|
+
self << Size.new(@client, self, size)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def find(size_id)
|
18
|
+
self.select{ |s| s.id == size_id }.first
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Colombo
|
3
|
+
class SshKey
|
4
|
+
|
5
|
+
attr_accessor :id, :name, :ssh_pub_key
|
6
|
+
|
7
|
+
def initialize(client, ssh_keys, ssh_key_hash)
|
8
|
+
@client = client
|
9
|
+
ssh_key_hash.each do |key, value|
|
10
|
+
__send__("#{key}=", value) if self.respond_to?( key.to_sym )
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy
|
15
|
+
@client.request(:get, "/ssh_keys/#{self.id}/destroy/") do |response|
|
16
|
+
return true
|
17
|
+
end
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(options={})
|
22
|
+
params = {
|
23
|
+
:ssh_pub_key => options[:ssh_pub_key]
|
24
|
+
}
|
25
|
+
response = @client.request(:get, "/ssh_keys/#{self.id}/edit/", params) do |response|
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "colombo/ssh_key"
|
4
|
+
|
5
|
+
module Colombo
|
6
|
+
class SshKeys < Array
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
@client.request(:get, '/ssh_keys/', {}) do |response|
|
11
|
+
response['ssh_keys'].each do |ssh_key|
|
12
|
+
self << SshKey.new(@client, self, ssh_key)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def find(ssh_key_id)
|
18
|
+
ssh_key = self.select{ |o| o == ssh_key_id }.first
|
19
|
+
|
20
|
+
return ssh_key if ssh_key
|
21
|
+
|
22
|
+
response = @client.request(:get, "/ssh_keys/#{ssh_key_id}") do |response|
|
23
|
+
ssh_key = SshKey.new(@client, self, response['ssh_key'])
|
24
|
+
self << ssh_key
|
25
|
+
end
|
26
|
+
|
27
|
+
return ssh_key
|
28
|
+
end
|
29
|
+
|
30
|
+
def create(options={})
|
31
|
+
|
32
|
+
params = {
|
33
|
+
:ssh_pub_key => options[:ssh_pub_key],
|
34
|
+
:name => options[:name]
|
35
|
+
}
|
36
|
+
|
37
|
+
ssh_key = nil
|
38
|
+
|
39
|
+
response = @client.request(:get, "/ssh_keys/new/", params) do |response|
|
40
|
+
ssh_key = SshKey.new(@client, self, response['ssh_key'])
|
41
|
+
self << ssh_key
|
42
|
+
end
|
43
|
+
|
44
|
+
ssh_key
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
describe 'Colombo' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
|
9
|
+
Colombo.reset
|
10
|
+
|
11
|
+
Colombo.configure do |c|
|
12
|
+
c.api_key = ENV['DO_API_KEY']
|
13
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should have a version' do
|
19
|
+
Colombo::VERSION.wont_be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
describe 'configuration' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Colombo.reset
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.api_key' do
|
12
|
+
it '.api_key should be equal to default' do
|
13
|
+
Colombo.api_key.must_equal Colombo::Configuration::DEFAULT_API_KEY
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.client_id' do
|
18
|
+
it '.client_id should be equal to default' do
|
19
|
+
Colombo.client_id.must_equal Colombo::Configuration::DEFAULT_CLIENT_ID
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.user_agent' do
|
24
|
+
it '.user_agent should be equal to default' do
|
25
|
+
Colombo.user_agent.must_equal Colombo::Configuration::DEFAULT_USER_AGENT
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
after do
|
30
|
+
Colombo.reset
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.configuration' do
|
34
|
+
Colombo::Configuration::VALID_CONFIG_KEYS.each do |key|
|
35
|
+
it "should set #{key}" do
|
36
|
+
Colombo.configure do |config|
|
37
|
+
config.send("#{key}=", key.to_s)
|
38
|
+
Colombo.send("#{key}").must_equal key.to_s
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
def self.test_order
|
6
|
+
:alpha
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'Droplets' do
|
10
|
+
|
11
|
+
before do
|
12
|
+
Colombo.reset
|
13
|
+
|
14
|
+
Colombo.configure do |c|
|
15
|
+
c.api_key = ENV['DO_API_KEY']
|
16
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
17
|
+
end
|
18
|
+
|
19
|
+
@do = Colombo.new
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
it 'list droplets' do
|
25
|
+
VCR.use_cassette('droplets') do
|
26
|
+
@do.droplets.must_be_instance_of(Colombo::Droplets)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'create columbus droplet' do
|
31
|
+
VCR.use_cassette('create_droplet') do
|
32
|
+
@do.droplets.create({
|
33
|
+
:name => COLOMBO_DROPLET_NAME ,
|
34
|
+
:image_id => COLOMBO_IMAGE_ID ,
|
35
|
+
:region_id => COLOMBO_REGION_ID ,
|
36
|
+
:size_id => COLOMBO_SIZE_ID
|
37
|
+
})
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'find droplet' do
|
42
|
+
VCR.use_cassette('droplets_find') do
|
43
|
+
# Colombo.new.droplets.find(1)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
describe 'Images' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Colombo.reset
|
9
|
+
|
10
|
+
Colombo.configure do |c|
|
11
|
+
c.api_key = ENV['DO_API_KEY']
|
12
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
13
|
+
end
|
14
|
+
|
15
|
+
@client = Colombo::Client.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'images' do
|
19
|
+
VCR.use_cassette('images') do
|
20
|
+
@client.images.wont_be_empty
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
it 'find image via find method' do
|
26
|
+
VCR.use_cassette('images') do
|
27
|
+
@client.images.find(COLOMBO_IMAGE_ID).wont_be_nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'find image via [] operator' do
|
32
|
+
VCR.use_cassette('images') do
|
33
|
+
@client.images.find(COLOMBO_IMAGE_ID).wont_be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
describe 'Regions' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Colombo.reset
|
9
|
+
|
10
|
+
Colombo.configure do |c|
|
11
|
+
c.api_key = ENV['DO_API_KEY']
|
12
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
13
|
+
end
|
14
|
+
|
15
|
+
@client = Colombo::Client.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'regions' do
|
19
|
+
VCR.use_cassette('regions') do
|
20
|
+
@client.regions.wont_be_empty
|
21
|
+
# puts "== REGIONS ==="
|
22
|
+
# puts @client.regions.inspect
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
describe 'Sizes' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Colombo.reset
|
9
|
+
|
10
|
+
Colombo.configure do |c|
|
11
|
+
c.api_key = ENV['DO_API_KEY']
|
12
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
13
|
+
end
|
14
|
+
|
15
|
+
@client = Colombo::Client.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'sizes' do
|
19
|
+
VCR.use_cassette('sizes') do
|
20
|
+
@client.sizes.wont_be_empty
|
21
|
+
# puts "== REGIONS ==="
|
22
|
+
# puts @client.sizes.inspect
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
4
|
+
|
5
|
+
def self.test_order
|
6
|
+
:alpha
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'SshKeys' do
|
10
|
+
|
11
|
+
before do
|
12
|
+
Colombo.reset
|
13
|
+
|
14
|
+
Colombo.configure do |c|
|
15
|
+
c.api_key = ENV['DO_API_KEY']
|
16
|
+
c.client_id = ENV['DO_CLIENT_ID']
|
17
|
+
end
|
18
|
+
|
19
|
+
@client = Colombo::Client.new
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'list ssh keys' do
|
23
|
+
|
24
|
+
VCR.use_cassette('ssh_keys') do
|
25
|
+
@client.ssh_keys.wont_be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'add ssh key' do
|
31
|
+
|
32
|
+
VCR.use_cassette('add ssh key') do
|
33
|
+
|
34
|
+
ssh_key = @client.ssh_keys.create({
|
35
|
+
:name => COLOMBO_SSH_KEY_NAME,
|
36
|
+
:ssh_pub_key => COLOMBO_SSH_KEY
|
37
|
+
})
|
38
|
+
|
39
|
+
ssh_key.must_be_instance_of(Colombo::SshKey)
|
40
|
+
|
41
|
+
ssh_key.name.must_equal COLOMBO_SSH_KEY_NAME
|
42
|
+
|
43
|
+
ssh_key.ssh_pub_key.must_equal COLOMBO_SSH_KEY
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'find ssh key by id' do
|
49
|
+
|
50
|
+
VCR.use_cassette('find ssh keys by id') do
|
51
|
+
|
52
|
+
# fetch the key list from digital ocean
|
53
|
+
ssh_keys = @client.ssh_keys
|
54
|
+
|
55
|
+
# find the key with COLOMBO_SSH_KEY_NAME inside the digital ocean colection
|
56
|
+
do_key = ssh_keys.select{ |k| k.name==COLOMBO_SSH_KEY_NAME }.first
|
57
|
+
|
58
|
+
# check if the key was found
|
59
|
+
do_key.must_be_instance_of(Colombo::SshKey)
|
60
|
+
|
61
|
+
# let's try find the key in the collection
|
62
|
+
ssh_key = @client.ssh_keys.find( do_key.id )
|
63
|
+
|
64
|
+
# check if it's a ssh_key
|
65
|
+
ssh_key.must_be_instance_of(Colombo::SshKey)
|
66
|
+
|
67
|
+
# check if the values are correct
|
68
|
+
ssh_key.name.must_equal COLOMBO_SSH_KEY_NAME
|
69
|
+
|
70
|
+
# check if the values are correct
|
71
|
+
ssh_key.ssh_pub_key.must_equal COLOMBO_SSH_KEY
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'update key' do
|
78
|
+
|
79
|
+
VCR.use_cassette('update key') do
|
80
|
+
# fetch the key list from digital ocean
|
81
|
+
ssh_keys = @client.ssh_keys
|
82
|
+
|
83
|
+
# find the key with COLOMBO_SSH_KEY_NAME inside the digital ocean colection
|
84
|
+
do_key = ssh_keys.select{ |k| k.name==COLOMBO_SSH_KEY_NAME }.first
|
85
|
+
|
86
|
+
# check if the key was found and is a SshKey
|
87
|
+
do_key.must_be_instance_of(Colombo::SshKey)
|
88
|
+
|
89
|
+
do_key.update(:ssh_pub_key => COLOMBO_SSH_KEY ).must_equal true
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'destroy ssh key' do
|
95
|
+
VCR.use_cassette('destory ssh key') do
|
96
|
+
# fetch the key list from digital ocean
|
97
|
+
ssh_keys = @client.ssh_keys
|
98
|
+
|
99
|
+
# find the key with COLOMBO_SSH_KEY_NAME inside the digital ocean colection
|
100
|
+
ssh_keys.each do |ssh_key|
|
101
|
+
if ssh_key.name==COLOMBO_SSH_KEY_NAME
|
102
|
+
ssh_key.destroy().must_equal true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
VCR.use_cassette('are all keys destroyed?') do
|
109
|
+
@client.ssh_keys.select{ |key| key.name == COLOMBO_SSH_KEY_NAME }.must_be_empty
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/spec'
|
6
|
+
require 'minitest/pride'
|
7
|
+
require 'vcr'
|
8
|
+
|
9
|
+
VCR.configure do |c|
|
10
|
+
c.cassette_library_dir = File.join( File.dirname(__FILE__), 'fixtures/vcr_cassettes')
|
11
|
+
c.hook_into :webmock
|
12
|
+
end
|
13
|
+
|
14
|
+
COLOMBO_DROPLET_NAME = 'colombo'
|
15
|
+
COLOMBO_REGION_ID = 1 # NY
|
16
|
+
COLOMBO_IMAGE_ID = 42735 # Ubuntu
|
17
|
+
COLOMBO_SIZE_ID = 63 # 1GB
|
18
|
+
COLOMBO_SSH_KEY_NAME = 'colombo gem'
|
19
|
+
COLOMBO_SSH_KEY = 'ssh-dss AAAAB3NzaC1kc3MAAACBAK5uLwicCrFEpaVKBzkWxC7RQn+smg5ZQb5keh9RQKo8AszFTol5npgUAr0JWmqKIHv7nof0HndO86x9iIqNjq3vrz9CIVcFfZM7poKBJZ27Hv3v0fmSKfAc6eGdx8eM9UkZe1gzcLXK8UP2HaeY1Y4LlaHXS5tPi/dXooFVgiA7AAAAFQCQl6LZo/VYB9VgPEZzOmsmQevnswAAAIBCNKGsVP5eZ+IJklXheUyzyuL75i04OOtEGW6MO5TymKMwTZlU9r4ukuwxty+T9Ot2LqlNRnLSPQUjb0vplasZ8Ix45JOpRbuSvPovryn7rvS7//klu9hIkFAAQ/AZfGTw+696EjFBg4F5tN6MGMA6KrTQVLXeuYcZeRXwE5t5lwAAAIEAl2xYh098bozJUANQ82DiZznjHc5FW76Xm1apEqsZtVRFuh3V9nc7QNcBekhmHp5Z0sHthXCm1XqnFbkRCdFlX02NpgtNs7OcKpaJP47N8C+C/Yrf8qK/Wt3fExrL2ZLX5XD2tiotugSkwZJMW5Bv0mtjrNt0Q7P45rZjNNTag2c= user@host'
|
20
|
+
|
21
|
+
|
22
|
+
require File.expand_path('../../../lib/colombo.rb', __FILE__)
|
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: colombo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Luis Mendes
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain:
|
12
|
+
- !binary |-
|
13
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJB
|
14
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREEvTVJFd0R3WURWUVFEREFoc2JX
|
15
|
+
MWwKYm1SbGN6RVZNQk1HQ2dtU0pvbVQ4aXhrQVJrV0JXZHRZV2xzTVJNd0VR
|
16
|
+
WUtDWkltaVpQeUxHUUJHUllEWTI5dApNQjRYRFRFek1ETXdPVEV6TURFd05W
|
17
|
+
b1hEVEUwTURNd09URXpNREV3TlZvd1B6RVJNQThHQTFVRUF3d0liRzF0ClpX
|
18
|
+
NWtaWE14RlRBVEJnb0praWFKay9Jc1pBRVpGZ1ZuYldGcGJERVRNQkVHQ2dt
|
19
|
+
U0pvbVQ4aXhrQVJrV0EyTnYKYlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFB
|
20
|
+
RGdnRVBBRENDQVFvQ2dnRUJBS3E5QW9NRGJEdXhLL2Z6ZWhaaQpaN2lnS3Fi
|
21
|
+
TGVJMHpoQU1lTk9VWWh2alhJNG5uU3BCQmJhNXlBalJETGxaQThBekhDVE4w
|
22
|
+
UDZ0alpCbWhrNXBCCkFQejFZR1ZVTHdrejZWWGcrS2JVa0VTWUlMR0x6Mmk5
|
23
|
+
QVlUYnVXWVhtTi9iWjBWM0dUK3pNdmZIRVF0U2VHaXUKdkswVkkxTVZpbjUx
|
24
|
+
MDFaY0lLSSttT2JZUnpneHBzUDRWeHZQYUZpT0hRSVJwbythR2V2WmljR3hU
|
25
|
+
SFZjRzYvZwpNUVRwWUtqV2dQQTIySTgvd1BydVJhWVFGVzR5UWFuTzlFaDZx
|
26
|
+
WnpkU2hKOTRzaVV5aTRES2FyUWNENGEzWFVTCmVnM0xlZW1peTNFQjUrU0F2
|
27
|
+
WFNNSy9HWVAwNkN4ZWRTVHhJejlLcjRkV2ViSkJncVNwdER6d2JIRGF3ZHp6
|
28
|
+
ZUoKblZzQ0F3RUFBYU01TURjd0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZn
|
29
|
+
UVUyWFBnYTZTZUVYRmVhN05NMTRsdgozVm83UmdJd0N3WURWUjBQQkFRREFn
|
30
|
+
U3dNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNIaFBLSXc3RnBja3BRCmhv
|
31
|
+
UnplOGdXSHp4ZVBlVjF5amJ1dENSdXFNaFpnSjMwUHk0WFBGdGtYRU9TZFc1
|
32
|
+
QVo0Q2RhSkhsK2h6MUtnelAKMk5aTjFGU3lCQURkbnQvdWJURWpsYkhKZURu
|
33
|
+
U1FoSGN0VEFZeFhBOXpMVHcxdnA0M3B2VzNKRWw4R0tVczA0VwpMSnZ2N0tG
|
34
|
+
endvTHVKVnBXMnlXamtuRkJ1Y1NXUnRSRVhHQmtyN2NYWE9hcVd2S1ZtZzhM
|
35
|
+
QlBGay9hRUlLMVVUCnM2WVV4elFMK0lWcG80QjlIUmpHbkc2QkcrVVZJbWll
|
36
|
+
TGVnalVadkdRSEdmSHN0bDdkd2lCVWluZ1UvMldOTFIKMXBIQThXeGsxVVJi
|
37
|
+
Nmxxa2NRdERZbDkyU3FTSk1FY0s0Wk0zRmwrRFM0RXBtM1BINTZlWjR3Qlha
|
38
|
+
REhMRUNuTwpubjhCMXUyKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
39
|
+
date: 2013-03-10 00:00:00.000000000 Z
|
40
|
+
dependencies:
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: &70145160449540 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 1.6.7
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: *70145160449540
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: minitest
|
54
|
+
requirement: &70145160448440 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: *70145160448440
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: webmock
|
65
|
+
requirement: &70145160447500 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: *70145160447500
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: vcr
|
76
|
+
requirement: &70145160446620 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: *70145160446620
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: turn
|
87
|
+
requirement: &70145160446200 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
type: :development
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: *70145160446200
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: rake
|
98
|
+
requirement: &70145160445320 !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: *70145160445320
|
107
|
+
description: A simple ruby client for Digital Ocean API
|
108
|
+
email:
|
109
|
+
- lmmendes@gmail.com
|
110
|
+
executables: []
|
111
|
+
extensions: []
|
112
|
+
extra_rdoc_files: []
|
113
|
+
files:
|
114
|
+
- .gitignore
|
115
|
+
- Gemfile
|
116
|
+
- README.md
|
117
|
+
- Rakefile
|
118
|
+
- colombo.gemspec
|
119
|
+
- gem-public_cert.pem
|
120
|
+
- lib/colombo.rb
|
121
|
+
- lib/colombo/client.rb
|
122
|
+
- lib/colombo/configuration.rb
|
123
|
+
- lib/colombo/droplet.rb
|
124
|
+
- lib/colombo/droplets.rb
|
125
|
+
- lib/colombo/exception.rb
|
126
|
+
- lib/colombo/image.rb
|
127
|
+
- lib/colombo/images.rb
|
128
|
+
- lib/colombo/region.rb
|
129
|
+
- lib/colombo/regions.rb
|
130
|
+
- lib/colombo/request.rb
|
131
|
+
- lib/colombo/size.rb
|
132
|
+
- lib/colombo/sizes.rb
|
133
|
+
- lib/colombo/ssh_key.rb
|
134
|
+
- lib/colombo/ssh_keys.rb
|
135
|
+
- lib/colombo/version.rb
|
136
|
+
- test/colombo/colombo_test.rb
|
137
|
+
- test/colombo/configuration_test.rb
|
138
|
+
- test/colombo/droplets_test.rb
|
139
|
+
- test/colombo/images_test.rb
|
140
|
+
- test/colombo/regions_test.rb
|
141
|
+
- test/colombo/request_test.rb
|
142
|
+
- test/colombo/sizes_test.rb
|
143
|
+
- test/colombo/ssh_keys_test.rb
|
144
|
+
- test/colombo/test_helper.rb
|
145
|
+
homepage: http://github.com/lmmendes/colombo
|
146
|
+
licenses: []
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ! '>='
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ! '>='
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project: colombo
|
165
|
+
rubygems_version: 1.8.17
|
166
|
+
signing_key:
|
167
|
+
specification_version: 3
|
168
|
+
summary: Digital Ocean API client
|
169
|
+
test_files:
|
170
|
+
- test/colombo/colombo_test.rb
|
171
|
+
- test/colombo/configuration_test.rb
|
172
|
+
- test/colombo/droplets_test.rb
|
173
|
+
- test/colombo/images_test.rb
|
174
|
+
- test/colombo/regions_test.rb
|
175
|
+
- test/colombo/request_test.rb
|
176
|
+
- test/colombo/sizes_test.rb
|
177
|
+
- test/colombo/ssh_keys_test.rb
|
178
|
+
- test/colombo/test_helper.rb
|
179
|
+
has_rdoc:
|
metadata.gz.sig
ADDED
Binary file
|