lita-digitalocean 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +12 -0
- data/Gemfile +3 -0
- data/LICENSE +19 -0
- data/README.md +91 -0
- data/Rakefile +6 -0
- data/lib/lita/handlers/digitalocean.rb +159 -0
- data/lib/lita-digitalocean.rb +7 -0
- data/lita-digitalocean.gemspec +25 -0
- data/locales/en.yml +30 -0
- data/spec/lita/handlers/digitalocean_spec.rb +130 -0
- data/spec/spec_helper.rb +10 -0
- metadata +157 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5444464dba3faf90e5b413c215bda59c1a797fdf
|
4
|
+
data.tar.gz: 9397be0387a7e3be5f012ee09dc3d0479e573003
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3d8e15cb823eefde8069e2a908eefbeb365be41b3df69eedbb39d2af2ace2f79dac6242f2f2b62b7d1ea97fff09ee1af98763384f3048daca2d1dfd8e2b0e7e3
|
7
|
+
data.tar.gz: 769db7c17a2f6e3f05b4e64d0cb515b7a6093a505f695739a97b140553a040ffbfcfa603b5de79165601ad231fd87ba13948903e136a755a9ae777dbb028dcd5
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2014 Jimmy Cuadra
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# lita-digitalocean
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/jimmycuadra/lita-digitalocean.png?branch=master)](https://travis-ci.org/jimmycuadra/lita-digitalocean)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/jimmycuadra/lita-digitalocean.png)](https://codeclimate.com/github/jimmycuadra/lita-digitalocean)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/jimmycuadra/lita-digitalocean/badge.png)](https://coveralls.io/r/jimmycuadra/lita-digitalocean)
|
6
|
+
|
7
|
+
**lita-digitalocean** is a handler plugin for [Lita](https://www.lita.io/) that manages [DigitalOcean](https://www.digitalocean.com/) services.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add lita-digitalocean to your Lita instance's Gemfile:
|
12
|
+
|
13
|
+
``` ruby
|
14
|
+
gem "lita-digitalocean"
|
15
|
+
```
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
### Required attributes
|
20
|
+
|
21
|
+
* `client_id` (String) - The client ID for the account to manage.
|
22
|
+
* `api_key` (String) - The API key for the account to manage.
|
23
|
+
|
24
|
+
### Example
|
25
|
+
|
26
|
+
``` ruby
|
27
|
+
Lita.configure do |config|
|
28
|
+
config.handlers.digitalocean.client_id = "BdCsMEJYPv2tu7xQtLRB3"
|
29
|
+
config.handlers.digitalocean.api_key = "3df020a0441731e5ca47243b5515cbb7"
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
## Usage
|
34
|
+
|
35
|
+
To use any of the DigitalOcean commands, the user sending the message must be in the `:digitalocean_admins` authorization group.
|
36
|
+
|
37
|
+
### Domain commands
|
38
|
+
|
39
|
+
Not yet implemented. Coming soon!
|
40
|
+
|
41
|
+
### Droplet commands
|
42
|
+
|
43
|
+
Not yet implemented. Coming soon!
|
44
|
+
|
45
|
+
### Image commands
|
46
|
+
|
47
|
+
Not yet implemented. Coming soon!
|
48
|
+
|
49
|
+
### Region commands
|
50
|
+
|
51
|
+
Not yet implemented. Coming soon!
|
52
|
+
|
53
|
+
### SSH key commands
|
54
|
+
|
55
|
+
To add a new SSH key and get back its ID:
|
56
|
+
|
57
|
+
```
|
58
|
+
Lita: do ssh keys add NAME PUBLIC_KEY
|
59
|
+
```
|
60
|
+
|
61
|
+
To delete an SSH key by its ID:
|
62
|
+
|
63
|
+
```
|
64
|
+
Lita: do ssh keys delete ID
|
65
|
+
```
|
66
|
+
|
67
|
+
To edit the name and/or public key of an existing SSH key:
|
68
|
+
|
69
|
+
```
|
70
|
+
Lita: do ssh keys edit ID [name=NAME] [public_key=PUBLIC_KEY]
|
71
|
+
```
|
72
|
+
|
73
|
+
To list the names and IDs of all SSH keys:
|
74
|
+
|
75
|
+
```
|
76
|
+
Lita: do ssh keys list
|
77
|
+
```
|
78
|
+
|
79
|
+
To show the name and public key of an SSH key by ID:
|
80
|
+
|
81
|
+
```
|
82
|
+
Lita: do ssh keys show ID
|
83
|
+
```
|
84
|
+
|
85
|
+
### Size commands
|
86
|
+
|
87
|
+
Not yet implemented. Coming soon!
|
88
|
+
|
89
|
+
## License
|
90
|
+
|
91
|
+
[MIT](http://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
require "digital_ocean"
|
2
|
+
|
3
|
+
module Lita
|
4
|
+
module Handlers
|
5
|
+
class Digitalocean < Handler
|
6
|
+
def self.default_config(config)
|
7
|
+
config.client_id = nil
|
8
|
+
config.api_key = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def self.do_route(regexp, route_name, help)
|
14
|
+
route(regexp, route_name, command: true, restrict_to: :digitalocean_admins, help: help)
|
15
|
+
end
|
16
|
+
|
17
|
+
public
|
18
|
+
|
19
|
+
do_route /^do\s+ssh\s+keys?\s+add\s+.+$/i, :ssh_keys_add, {
|
20
|
+
t("help.ssh_keys.add_key") => t("help.ssh_keys.add_value")
|
21
|
+
}
|
22
|
+
|
23
|
+
do_route /^do\s+ssh\s+keys?\s+delete\s+(\d+)$/i, :ssh_keys_delete, {
|
24
|
+
t("help.ssh_keys.delete_key") => t("help.ssh_keys.delete_value")
|
25
|
+
}
|
26
|
+
|
27
|
+
do_route /^do\s+ssh\s+keys?\s+edit\s+(\d+)\s+.+$/i, :ssh_keys_edit, {
|
28
|
+
t("help.ssh_keys.edit_key") => t("help.ssh_keys.edit_value")
|
29
|
+
}
|
30
|
+
|
31
|
+
do_route /^do\s+ssh\s+keys?\s+list$/i, :ssh_keys_list, {
|
32
|
+
t("help.ssh_keys.list_key") => t("help.ssh_keys.list_value")
|
33
|
+
}
|
34
|
+
|
35
|
+
do_route /^do\s+ssh\s+keys?\s+show\s+(\d+)$/i, :ssh_keys_show, {
|
36
|
+
t("help.ssh_keys.show_key") => t("help.ssh_keys.show_value"),
|
37
|
+
}
|
38
|
+
|
39
|
+
def ssh_keys_add(response)
|
40
|
+
name, public_key = response.args[3..4]
|
41
|
+
|
42
|
+
unless name && public_key
|
43
|
+
return response.reply("#{t('format')}: #{t('help.ssh_keys.add_key')}")
|
44
|
+
end
|
45
|
+
|
46
|
+
do_response = do_call(response) do |client|
|
47
|
+
client.ssh_keys.add(name: name, ssh_pub_key: public_key)
|
48
|
+
end or return
|
49
|
+
|
50
|
+
key = do_response.ssh_key
|
51
|
+
response.reply(
|
52
|
+
t("ssh_keys.add.created", message: "#{key.id} (#{key.name}): #{key.ssh_pub_key}")
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def ssh_keys_delete(response)
|
57
|
+
key_id = response.matches[0][0]
|
58
|
+
|
59
|
+
do_call(response) do |client|
|
60
|
+
client.ssh_keys.delete(key_id)
|
61
|
+
end or return
|
62
|
+
|
63
|
+
response.reply(t("ssh_keys.delete.deleted", key_id: key_id))
|
64
|
+
end
|
65
|
+
|
66
|
+
def ssh_keys_edit(response)
|
67
|
+
args = extract_named_args(response.args, :name, :public_key)
|
68
|
+
|
69
|
+
if args[:public_key]
|
70
|
+
args[:ssh_pub_key] = args.delete(:public_key)
|
71
|
+
end
|
72
|
+
|
73
|
+
do_response = do_call(response) do |client|
|
74
|
+
client.ssh_keys.edit(response.matches[0][0], args)
|
75
|
+
end or return
|
76
|
+
|
77
|
+
key = do_response.ssh_key
|
78
|
+
response.reply(
|
79
|
+
t("ssh_keys.edit.updated", message: "#{key.id} (#{key.name}): #{key.ssh_pub_key}")
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
def ssh_keys_list(response)
|
84
|
+
do_response = do_call(response) do |client|
|
85
|
+
client.ssh_keys.list
|
86
|
+
end or return
|
87
|
+
|
88
|
+
if do_response.ssh_keys.empty?
|
89
|
+
response.reply(t("ssh_keys.list.empty"))
|
90
|
+
else
|
91
|
+
do_response.ssh_keys.each do |key|
|
92
|
+
response.reply("#{key.id} (#{key.name})")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def ssh_keys_show(response)
|
98
|
+
do_response = do_call(response) do |client|
|
99
|
+
client.ssh_keys.show(response.matches[0][0])
|
100
|
+
end or return
|
101
|
+
|
102
|
+
key = do_response.ssh_key
|
103
|
+
response.reply("#{key.id} (#{key.name}): #{key.ssh_pub_key}")
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def api_key
|
109
|
+
config.api_key
|
110
|
+
end
|
111
|
+
|
112
|
+
def client
|
113
|
+
@client ||= ::DigitalOcean::API.new(client_id: client_id, api_key: api_key)
|
114
|
+
end
|
115
|
+
|
116
|
+
def client_id
|
117
|
+
config.client_id
|
118
|
+
end
|
119
|
+
|
120
|
+
def config
|
121
|
+
Lita.config.handlers.digitalocean
|
122
|
+
end
|
123
|
+
|
124
|
+
def do_call(response)
|
125
|
+
unless api_key && client_id
|
126
|
+
response.reply(t("credentials_missing"))
|
127
|
+
return
|
128
|
+
end
|
129
|
+
|
130
|
+
do_response = yield client
|
131
|
+
|
132
|
+
if do_response.status != "OK"
|
133
|
+
response.reply(t("error", message: do_response.message))
|
134
|
+
return
|
135
|
+
end
|
136
|
+
|
137
|
+
do_response
|
138
|
+
end
|
139
|
+
|
140
|
+
def extract_named_args(args, *keys)
|
141
|
+
args.inject({}) do |hash, arg|
|
142
|
+
key, value = arg.split("=", 2)
|
143
|
+
|
144
|
+
if value
|
145
|
+
normalized_key = key.downcase.to_sym
|
146
|
+
|
147
|
+
if keys.include?(normalized_key)
|
148
|
+
hash[normalized_key] = value.gsub(/\A["']|["']\Z/, "")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
hash
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
Lita.register_handler(Digitalocean)
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-digitalocean"
|
3
|
+
spec.version = "0.0.1"
|
4
|
+
spec.authors = ["Jimmy Cuadra"]
|
5
|
+
spec.email = ["jimmy@jimmycuadra.com"]
|
6
|
+
spec.description = %q{A Lita handler for managing DigitalOcean services.}
|
7
|
+
spec.summary = %q{A Lita handler for managing DigitalOcean services.}
|
8
|
+
spec.homepage = "https://github.com/jimmycuadra/lita-digitalocean"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 3.1"
|
18
|
+
spec.add_runtime_dependency "digital_ocean", ">= 1.3.0"
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rspec", ">= 3.0.0.beta2"
|
23
|
+
spec.add_development_dependency "simplecov"
|
24
|
+
spec.add_development_dependency "coveralls"
|
25
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
en:
|
2
|
+
lita:
|
3
|
+
handlers:
|
4
|
+
digitalocean:
|
5
|
+
credentials_missing: >-
|
6
|
+
client_id and api_key must be set in Lita's configuration to
|
7
|
+
use the DigitalOcean commands.
|
8
|
+
error: "DigitalOcean API error: %{message}"
|
9
|
+
format: Format
|
10
|
+
help:
|
11
|
+
ssh_keys:
|
12
|
+
add_key: do ssh keys add NAME PUBLIC_KEY
|
13
|
+
add_value: Adds a new SSH key.
|
14
|
+
delete_key: do ssh keys delete ID
|
15
|
+
delete_value: Delete the SSH key with the given ID.
|
16
|
+
edit_key: "do ssh keys edit ID [name=NAME] [public_key=PUBLIC_KEY]"
|
17
|
+
edit_value: Change the NAME and/or PUBLIC_KEY of the SSH key with the given ID.
|
18
|
+
list_key: do ssh keys list
|
19
|
+
list_value: Lists all SSH keys.
|
20
|
+
show_key: do ssh keys show ID
|
21
|
+
show_value: Shows the public key for SSH key with the given ID.
|
22
|
+
ssh_keys:
|
23
|
+
add:
|
24
|
+
created: "Created new SSH key: %{message}"
|
25
|
+
delete:
|
26
|
+
deleted: "Deleted SSH key: %{key_id}"
|
27
|
+
edit:
|
28
|
+
updated: "Updated SSH key: %{message}"
|
29
|
+
list:
|
30
|
+
empty: No SSH keys have been added yet.
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lita::Handlers::Digitalocean, lita_handler: true do
|
4
|
+
it { routes_command("do ssh keys add 'foo bar' 'ssh-rsa abcdefg'").to(:ssh_keys_add) }
|
5
|
+
it { routes_command("do ssh keys delete 123").to(:ssh_keys_delete) }
|
6
|
+
it do
|
7
|
+
routes_command(
|
8
|
+
"do ssh keys edit 123 name=foo public_key='ssh-rsa changed'"
|
9
|
+
).to(:ssh_keys_edit)
|
10
|
+
end
|
11
|
+
it { routes_command("do ssh keys list").to(:ssh_keys_list) }
|
12
|
+
it { routes_command("do ssh keys show 123").to(:ssh_keys_show) }
|
13
|
+
|
14
|
+
let(:client) do
|
15
|
+
instance_double(
|
16
|
+
"::DigitalOcean::API",
|
17
|
+
ssh_keys: client_ssh_keys
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:client_ssh_keys) { instance_double("::DigitalOcean::Resource::SSHKey") }
|
22
|
+
|
23
|
+
before do
|
24
|
+
Lita.config.handlers.digitalocean.tap do |config|
|
25
|
+
config.client_id = "CLIENT_ID"
|
26
|
+
config.api_key = "API_KEY"
|
27
|
+
end
|
28
|
+
|
29
|
+
allow(Lita::Authorization).to receive(:user_in_group?).with(
|
30
|
+
user,
|
31
|
+
:digitalocean_admins
|
32
|
+
).and_return(true)
|
33
|
+
|
34
|
+
allow(::DigitalOcean::API).to receive(:new).and_return(client)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "ssh key commands" do
|
38
|
+
let(:do_list) do
|
39
|
+
instance_double(
|
40
|
+
"Hashie::Rash",
|
41
|
+
status: "OK",
|
42
|
+
ssh_keys: [
|
43
|
+
instance_double("Hashie::Rash", id: 123, name: "My Key"),
|
44
|
+
instance_double("Hashie::Rash", id: 456, name: "Your Key"),
|
45
|
+
]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
let(:do_list_empty) do
|
50
|
+
instance_double(
|
51
|
+
"Hashie::Rash",
|
52
|
+
status: "OK",
|
53
|
+
ssh_keys: []
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
let(:do_key) do
|
58
|
+
instance_double(
|
59
|
+
"Hashie::Rash",
|
60
|
+
status: "OK",
|
61
|
+
ssh_key: instance_double(
|
62
|
+
"Hashie::Rash",
|
63
|
+
id: 123,
|
64
|
+
name: "My Key",
|
65
|
+
ssh_pub_key: "ssh-rsa abcdefg"
|
66
|
+
)
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
let(:do_delete) { instance_double("Hashie::Rash", status: "OK") }
|
71
|
+
|
72
|
+
describe "#ssh_keys_add" do
|
73
|
+
it "responds with the details of the new key" do
|
74
|
+
allow(client_ssh_keys).to receive(:add).with(
|
75
|
+
name: "My Key",
|
76
|
+
ssh_pub_key: "ssh-rsa abcdefg"
|
77
|
+
).and_return(do_key)
|
78
|
+
send_command("do ssh keys add 'My Key' 'ssh-rsa abcdefg'")
|
79
|
+
expect(replies.last).to eq("Created new SSH key: 123 (My Key): ssh-rsa abcdefg")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "responds with an error message if name or public key is missing" do
|
83
|
+
send_command("do ssh keys add foo")
|
84
|
+
expect(replies.last).to eq("Format: do ssh keys add NAME PUBLIC_KEY")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#ssh_keys_delete" do
|
89
|
+
it "responds with a success message" do
|
90
|
+
allow(client_ssh_keys).to receive(:delete).with("123").and_return(do_delete)
|
91
|
+
send_command("do ssh keys delete 123")
|
92
|
+
expect(replies.last).to eq("Deleted SSH key: 123")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#ssh_keys_edit" do
|
97
|
+
it "responds with the edited key's values" do
|
98
|
+
allow(client_ssh_keys).to receive(:edit).with(
|
99
|
+
"123",
|
100
|
+
name: "My Key",
|
101
|
+
ssh_pub_key: "ssh-rsa abcdefg"
|
102
|
+
).and_return(do_key)
|
103
|
+
send_command(%{do ssh keys edit 123 name='My Key' public_key="ssh-rsa abcdefg"})
|
104
|
+
expect(replies.last).to eq("Updated SSH key: 123 (My Key): ssh-rsa abcdefg")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "#ssh_keys_list" do
|
109
|
+
it "returns a list of key IDs and names" do
|
110
|
+
allow(client_ssh_keys).to receive(:list).and_return(do_list)
|
111
|
+
send_command("do ssh keys list")
|
112
|
+
expect(replies).to eq(["123 (My Key)", "456 (Your Key)"])
|
113
|
+
end
|
114
|
+
|
115
|
+
it "returns an empty state message if there are no SSH keys" do
|
116
|
+
allow(client_ssh_keys).to receive(:list).and_return(do_list_empty)
|
117
|
+
send_command("do ssh keys list")
|
118
|
+
expect(replies.last).to eq("No SSH keys have been added yet.")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "#ssh_keys_show" do
|
123
|
+
it "responds with the public key" do
|
124
|
+
allow(client_ssh_keys).to receive(:show).with("123").and_return(do_key)
|
125
|
+
send_command("do ssh keys show 123")
|
126
|
+
expect(replies.last).to eq("123 (My Key): ssh-rsa abcdefg")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
require "coveralls"
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter "/spec/" }
|
8
|
+
|
9
|
+
require "lita-digitalocean"
|
10
|
+
require "lita/rspec"
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-digitalocean
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jimmy Cuadra
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: digital_ocean
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.0.0.beta2
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.0.0.beta2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: A Lita handler for managing DigitalOcean services.
|
112
|
+
email:
|
113
|
+
- jimmy@jimmycuadra.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".travis.yml"
|
120
|
+
- Gemfile
|
121
|
+
- LICENSE
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- lib/lita-digitalocean.rb
|
125
|
+
- lib/lita/handlers/digitalocean.rb
|
126
|
+
- lita-digitalocean.gemspec
|
127
|
+
- locales/en.yml
|
128
|
+
- spec/lita/handlers/digitalocean_spec.rb
|
129
|
+
- spec/spec_helper.rb
|
130
|
+
homepage: https://github.com/jimmycuadra/lita-digitalocean
|
131
|
+
licenses:
|
132
|
+
- MIT
|
133
|
+
metadata:
|
134
|
+
lita_plugin_type: handler
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 2.2.2
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: A Lita handler for managing DigitalOcean services.
|
155
|
+
test_files:
|
156
|
+
- spec/lita/handlers/digitalocean_spec.rb
|
157
|
+
- spec/spec_helper.rb
|