colombo 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Code Climate](https://codeclimate.com/github/lmmendes/colombo.png)](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
|