linode 0.6.3 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/README +1 -0
- data/VERSION +1 -1
- data/lib/linode.rb +30 -7
- data/lib/linode/avail.rb +1 -0
- data/lib/linode/domain.rb +1 -0
- data/lib/linode/domain/resource.rb +1 -0
- data/lib/linode/linode.rb +1 -0
- data/lib/linode/linode/config.rb +1 -0
- data/lib/linode/linode/disk.rb +1 -0
- data/lib/linode/linode/ip.rb +1 -0
- data/lib/linode/linode/job.rb +1 -0
- data/lib/linode/nodebalancer.rb +5 -0
- data/lib/linode/nodebalancer/config.rb +4 -0
- data/lib/linode/nodebalancer/node.rb +4 -0
- data/lib/linode/stackscript.rb +1 -0
- data/lib/linode/test.rb +1 -0
- data/lib/linode/user.rb +2 -0
- data/linode.gemspec +11 -2
- data/spec/linode/avail_spec.rb +4 -1
- data/spec/linode/domain/resource_spec.rb +4 -0
- data/spec/linode/domain_spec.rb +4 -0
- data/spec/linode/linode/config_spec.rb +4 -0
- data/spec/linode/linode/disk_spec.rb +4 -0
- data/spec/linode/linode/ip_spec.rb +4 -0
- data/spec/linode/linode/job_spec.rb +4 -0
- data/spec/linode/linode_spec.rb +4 -0
- data/spec/linode/nodebalancer/config_spec.rb +48 -0
- data/spec/linode/nodebalancer/node_spec.rb +48 -0
- data/spec/linode/nodebalancer_spec.rb +124 -0
- data/spec/linode/stackscript_spec.rb +4 -0
- data/spec/linode/test_spec.rb +4 -0
- data/spec/linode/user_spec.rb +4 -0
- data/spec/linode_spec.rb +54 -22
- metadata +14 -5
data/CHANGELOG
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
|
2
|
+
0.7.0 / 2011-07-07
|
3
|
+
==================
|
4
|
+
* Added support for Nodebalancer API calls
|
5
|
+
* Changed HTTP GETs to HTTP POSTs to work around errors with large stackscripts (credit: Dan Hodos)
|
6
|
+
* Updated documentation references in error messages to match API documentation on Linode website
|
7
|
+
|
8
|
+
|
2
9
|
0.6.3 / 2010-11-23
|
3
10
|
==================
|
4
11
|
* Can now initialize w/ username/pass; also support for user.getapikey API call
|
data/README
CHANGED
@@ -140,4 +140,5 @@ Here is an annoyingly exhaustive IRB session where I play around with the API:
|
|
140
140
|
irb> ^D@ Wed Aug 05 01:50:52 rick@Yer-Moms-Computer
|
141
141
|
|
142
142
|
CREDITS:
|
143
|
+
- Thanks to Dan Hodos (github: danhodos) for diagnosing and fixing an issue with sending GET requests instead of POST request.
|
143
144
|
- Thanks to Aaron Hamid for updates for RSpec 2 and work on user.getapikey + username/password initialization.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/lib/linode.rb
CHANGED
@@ -10,7 +10,7 @@ class Linode
|
|
10
10
|
define_method(action.to_sym) do |*data|
|
11
11
|
data = data.shift if data
|
12
12
|
data ||= {}
|
13
|
-
send_request(self.class.name
|
13
|
+
send_request(Linode.action_path(self.class.name, action), data)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -27,7 +27,30 @@ class Linode
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
has_namespace :test, :avail, :user, :domain, :linode
|
30
|
+
has_namespace :test, :avail, :user, :domain, :linode, :nodebalancer
|
31
|
+
|
32
|
+
@@documentation_category = {}
|
33
|
+
|
34
|
+
def self.documentation_category(category)
|
35
|
+
@@documentation_category[class_to_path(name)] = category
|
36
|
+
end
|
37
|
+
|
38
|
+
def documentation_categories
|
39
|
+
@@documentation_category
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.action_path(class_name, action)
|
43
|
+
Linode.class_to_path(class_name) + ".#{action}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.class_to_path(class_name)
|
47
|
+
class_name.downcase.sub(/^linode::/, '').gsub(/::/, '.')
|
48
|
+
end
|
49
|
+
|
50
|
+
def documentation_path(action)
|
51
|
+
hits = action.match(/^(.*)\.[^.]+$/)
|
52
|
+
"http://www.linode.com/api/" + @@documentation_category[hits[1]] + '/' + action
|
53
|
+
end
|
31
54
|
|
32
55
|
def initialize(args)
|
33
56
|
@api_url = args[:api_url] if args[:api_url]
|
@@ -52,7 +75,7 @@ class Linode
|
|
52
75
|
|
53
76
|
def send_request(action, data)
|
54
77
|
data.delete_if {|k,v| [:api_key, :api_action, :api_responseFormat].include?(k) }
|
55
|
-
response =
|
78
|
+
response = post({ :api_key => api_key, :api_action => action, :api_responseFormat => 'json' }.merge(data))
|
56
79
|
raise "Errors completing request [#{action}] @ [#{api_url}] with data [#{data.inspect}]:\n#{error_message(response, action)}" if error?(response)
|
57
80
|
reformat_response(response)
|
58
81
|
end
|
@@ -60,13 +83,13 @@ class Linode
|
|
60
83
|
protected
|
61
84
|
|
62
85
|
def fetch_api_key
|
63
|
-
response =
|
86
|
+
response = post(:api_action => 'user.getapikey', :api_responseFormat => 'json', :username => username, :password => password)
|
64
87
|
raise "Errors completing request [user.getapikey] @ [#{api_url}] for username [#{username}]:\n#{error_message(response, 'user.getapikey')}" if error?(response)
|
65
88
|
reformat_response(response).api_key
|
66
89
|
end
|
67
90
|
|
68
|
-
def
|
69
|
-
Crack::JSON.parse(HTTParty.
|
91
|
+
def post(data)
|
92
|
+
Crack::JSON.parse(HTTParty.post(api_url, :body => data))
|
70
93
|
end
|
71
94
|
|
72
95
|
def error?(response)
|
@@ -76,7 +99,7 @@ class Linode
|
|
76
99
|
def error_message(response, action)
|
77
100
|
response["ERRORARRAY"].collect { |err|
|
78
101
|
" - Error \##{err["ERRORCODE"]} - #{err["ERRORMESSAGE"]}. "+
|
79
|
-
"(Please consult
|
102
|
+
"(Please consult #{documentation_path(action)})"
|
80
103
|
}.join("\n")
|
81
104
|
end
|
82
105
|
|
data/lib/linode/avail.rb
CHANGED
data/lib/linode/domain.rb
CHANGED
data/lib/linode/linode.rb
CHANGED
data/lib/linode/linode/config.rb
CHANGED
data/lib/linode/linode/disk.rb
CHANGED
data/lib/linode/linode/ip.rb
CHANGED
data/lib/linode/linode/job.rb
CHANGED
data/lib/linode/stackscript.rb
CHANGED
data/lib/linode/test.rb
CHANGED
data/lib/linode/user.rb
CHANGED
data/linode.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{linode}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.7.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rick Bradley"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-07-07}
|
13
13
|
s.description = %q{This is a wrapper around Linode's automation facilities.}
|
14
14
|
s.email = %q{rick@rickbradley.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,6 +32,9 @@ Gem::Specification.new do |s|
|
|
32
32
|
"lib/linode/linode/disk.rb",
|
33
33
|
"lib/linode/linode/ip.rb",
|
34
34
|
"lib/linode/linode/job.rb",
|
35
|
+
"lib/linode/nodebalancer.rb",
|
36
|
+
"lib/linode/nodebalancer/config.rb",
|
37
|
+
"lib/linode/nodebalancer/node.rb",
|
35
38
|
"lib/linode/stackscript.rb",
|
36
39
|
"lib/linode/test.rb",
|
37
40
|
"lib/linode/user.rb",
|
@@ -44,6 +47,9 @@ Gem::Specification.new do |s|
|
|
44
47
|
"spec/linode/linode/ip_spec.rb",
|
45
48
|
"spec/linode/linode/job_spec.rb",
|
46
49
|
"spec/linode/linode_spec.rb",
|
50
|
+
"spec/linode/nodebalancer/config_spec.rb",
|
51
|
+
"spec/linode/nodebalancer/node_spec.rb",
|
52
|
+
"spec/linode/nodebalancer_spec.rb",
|
47
53
|
"spec/linode/stackscript_spec.rb",
|
48
54
|
"spec/linode/test_spec.rb",
|
49
55
|
"spec/linode/user_spec.rb",
|
@@ -63,6 +69,9 @@ Gem::Specification.new do |s|
|
|
63
69
|
"spec/linode/linode/ip_spec.rb",
|
64
70
|
"spec/linode/linode/job_spec.rb",
|
65
71
|
"spec/linode/linode_spec.rb",
|
72
|
+
"spec/linode/nodebalancer/config_spec.rb",
|
73
|
+
"spec/linode/nodebalancer/node_spec.rb",
|
74
|
+
"spec/linode/nodebalancer_spec.rb",
|
66
75
|
"spec/linode/stackscript_spec.rb",
|
67
76
|
"spec/linode/test_spec.rb",
|
68
77
|
"spec/linode/user_spec.rb",
|
data/spec/linode/avail_spec.rb
CHANGED
@@ -39,7 +39,10 @@ describe Linode::Avail do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/utility/avail.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/utility/avail.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
|
-
|
45
48
|
end
|
@@ -39,6 +39,10 @@ describe Linode::Domain::Resource do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/dns/domain.resource.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/dns/domain.resource.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
data/spec/linode/domain_spec.rb
CHANGED
@@ -39,6 +39,10 @@ describe Linode::Domain do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/dns/domain.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/dns/domain.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
@@ -39,6 +39,10 @@ describe Linode::Linode::Config do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.config.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/linode/linode.config.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
@@ -39,6 +39,10 @@ describe Linode::Linode::Disk do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.disk.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/linode/linode.disk.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
@@ -39,6 +39,10 @@ describe Linode::Linode::Ip do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.ip.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/linode/linode.ip.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
@@ -39,6 +39,10 @@ describe Linode::Linode::Job do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.job.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/linode/linode.job.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
data/spec/linode/linode_spec.rb
CHANGED
@@ -39,6 +39,10 @@ describe Linode::Linode do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/linode/linode.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
|
2
|
+
require 'linode'
|
3
|
+
|
4
|
+
describe Linode::Nodebalancer::Config do
|
5
|
+
before :each do
|
6
|
+
@api_key = 'foo'
|
7
|
+
@linode = Linode::Nodebalancer::Config.new(:api_key => @api_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should be a Linode instance' do
|
11
|
+
@linode.class.should < Linode
|
12
|
+
end
|
13
|
+
|
14
|
+
%w(create delete update list).each do |action|
|
15
|
+
it "should allow accessing the #{action} API" do
|
16
|
+
@linode.should respond_to(action.to_sym)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "when accessing the #{action} API" do
|
20
|
+
it 'should allow a data hash' do
|
21
|
+
lambda { @linode.send(action.to_sym, {}) }.should_not raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not require arguments' do
|
25
|
+
lambda { @linode.send(action.to_sym) }.should_not raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should request the nodebalancer.config.#{action} action" do
|
29
|
+
@linode.expects(:send_request).with {|api_action, data| api_action == "nodebalancer.config.#{action}" }
|
30
|
+
@linode.send(action.to_sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should provide the data hash when making its request' do
|
34
|
+
@linode.expects(:send_request).with {|api_action, data| data = { :foo => :bar } }
|
35
|
+
@linode.send(action.to_sym, {:foo => :bar})
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return the result of the request' do
|
39
|
+
@linode.expects(:send_request).returns(:bar => :baz)
|
40
|
+
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/nodebalancer/nodebalancer.config.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/nodebalancer/nodebalancer.config.#{action}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
|
2
|
+
require 'linode'
|
3
|
+
|
4
|
+
describe Linode::Nodebalancer::Node do
|
5
|
+
before :each do
|
6
|
+
@api_key = 'foo'
|
7
|
+
@linode = Linode::Nodebalancer::Node.new(:api_key => @api_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should be a Linode instance' do
|
11
|
+
@linode.class.should < Linode
|
12
|
+
end
|
13
|
+
|
14
|
+
%w(create delete update list).each do |action|
|
15
|
+
it "should allow accessing the #{action} API" do
|
16
|
+
@linode.should respond_to(action.to_sym)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "when accessing the #{action} API" do
|
20
|
+
it 'should allow a data hash' do
|
21
|
+
lambda { @linode.send(action.to_sym, {}) }.should_not raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not require arguments' do
|
25
|
+
lambda { @linode.send(action.to_sym) }.should_not raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should request the nodebalancer.node.#{action} action" do
|
29
|
+
@linode.expects(:send_request).with {|api_action, data| api_action == "nodebalancer.node.#{action}" }
|
30
|
+
@linode.send(action.to_sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should provide the data hash when making its request' do
|
34
|
+
@linode.expects(:send_request).with {|api_action, data| data = { :foo => :bar } }
|
35
|
+
@linode.send(action.to_sym, {:foo => :bar})
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return the result of the request' do
|
39
|
+
@linode.expects(:send_request).returns(:bar => :baz)
|
40
|
+
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/nodebalancer/nodebalancer.node.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/nodebalancer/nodebalancer.node.#{action}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
2
|
+
require 'linode'
|
3
|
+
|
4
|
+
describe Linode::Nodebalancer do
|
5
|
+
before :each do
|
6
|
+
@api_key = 'foo'
|
7
|
+
@linode = Linode::Nodebalancer.new(:api_key => @api_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should be a Linode instance' do
|
11
|
+
@linode.class.should < Linode
|
12
|
+
end
|
13
|
+
|
14
|
+
%w(update create list delete).each do |action|
|
15
|
+
it "should allow accessing the #{action} API" do
|
16
|
+
@linode.should respond_to(action.to_sym)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "when accessing the #{action} API" do
|
20
|
+
it 'should allow a data hash' do
|
21
|
+
lambda { @linode.send(action.to_sym, {}) }.should_not raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not require arguments' do
|
25
|
+
lambda { @linode.send(action.to_sym) }.should_not raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should request the nodebalancer.#{action} action" do
|
29
|
+
@linode.expects(:send_request).with {|api_action, data| api_action == "nodebalancer.#{action}" }
|
30
|
+
@linode.send(action.to_sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should provide the data hash when making its request' do
|
34
|
+
@linode.expects(:send_request).with {|api_action, data| data = { :foo => :bar } }
|
35
|
+
@linode.send(action.to_sym, {:foo => :bar})
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return the result of the request' do
|
39
|
+
@linode.expects(:send_request).returns(:bar => :baz)
|
40
|
+
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/nodebalancer/nodebalancer.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/nodebalancer/nodebalancer.#{action}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should be able to provide access to the Linode Nodebalancer Config API' do
|
50
|
+
@linode.should respond_to(:config)
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'when providing access to the Linode Nodebalancer Config API' do
|
54
|
+
before :each do
|
55
|
+
@api_key = 'foo'
|
56
|
+
@api_url = 'https://fake.linode.com/'
|
57
|
+
@linode = Linode::Nodebalancer.new(:api_key => @api_key, :api_url => @api_url)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should allow no arguments' do
|
61
|
+
lambda { @linode.config }.should_not raise_error(ArgumentError)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should require no arguments' do
|
65
|
+
lambda { @linode.config(:foo) }.should raise_error(ArgumentError)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should return a Linode::Nodebalancer::Config instance' do
|
69
|
+
@linode.config.class.should == Linode::Nodebalancer::Config
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should set the API key on the Linode::Nodebalancer::Config instance to be our API key' do
|
73
|
+
@linode.config.api_key.should == @api_key
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should set the API url on the Linode::Nodebalancer::Config instance to be our API url' do
|
77
|
+
@linode.config.api_url.should == @api_url
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should return the same Linode::Nodebalancer::Config instance when called again' do
|
81
|
+
linode = Linode::Nodebalancer.new(:api_key => @api_key)
|
82
|
+
result = linode.config
|
83
|
+
linode.config.should == result
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should be able to provide access to the Linode Nodebalancer Node API' do
|
88
|
+
@linode.should respond_to(:node)
|
89
|
+
end
|
90
|
+
|
91
|
+
describe 'when providing access to the Linode Nodebalancer Node API' do
|
92
|
+
before :each do
|
93
|
+
@api_key = 'foo'
|
94
|
+
@api_url = 'https://fake.linode.com/'
|
95
|
+
@linode = Linode::Nodebalancer.new(:api_key => @api_key, :api_url => @api_url)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should allow no arguments' do
|
99
|
+
lambda { @linode.node }.should_not raise_error(ArgumentError)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should require no arguments' do
|
103
|
+
lambda { @linode.node(:foo) }.should raise_error(ArgumentError)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should return a Linode::Nodebalancer::Node instance' do
|
107
|
+
@linode.node.class.should == Linode::Nodebalancer::Node
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should set the API key on the Linode::Nodebalancer::Node instance to be our API key' do
|
111
|
+
@linode.node.api_key.should == @api_key
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should set the API url on the Linode::Nodebalancer::Node instance to be our API url' do
|
115
|
+
@linode.node.api_url.should == @api_url
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should return the same Linode::Nodebalancer::Node instance when called again' do
|
119
|
+
linode = Linode::Nodebalancer.new(:api_key => @api_key)
|
120
|
+
result = linode.node
|
121
|
+
linode.node.should == result
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -39,6 +39,10 @@ describe Linode::Stackscript do
|
|
39
39
|
@linode.expects(:send_request).returns(:bar => :baz)
|
40
40
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should consider the documentation to live at http://www.linode.com/api/stackscript/stackscript.#{action}" do
|
44
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/stackscript/stackscript.#{action}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
data/spec/linode/test_spec.rb
CHANGED
@@ -40,6 +40,10 @@ describe Linode::Test do
|
|
40
40
|
@linode.expects(:send_request).returns(:bar => :baz)
|
41
41
|
@linode.send(action.to_sym).should == { :bar => :baz }
|
42
42
|
end
|
43
|
+
|
44
|
+
it "should consider the documentation to live at http://www.linode.com/api/linode/linode.#{action}" do
|
45
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, action)).should == "http://www.linode.com/api/utility/test.#{action}"
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
data/spec/linode/user_spec.rb
CHANGED
@@ -28,5 +28,9 @@ describe Linode::User do
|
|
28
28
|
@linode.stubs(:api_key).returns('foo')
|
29
29
|
@linode.getapikey.should == 'foo'
|
30
30
|
end
|
31
|
+
|
32
|
+
it "should consider the documentation to live at http://www.linode.com/api/utility/user.getapikey" do
|
33
|
+
@linode.documentation_path(Linode.action_path(@linode.class.name, 'getapikey')).should == "http://www.linode.com/api/utility/user.getapikey"
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
data/spec/linode_spec.rb
CHANGED
@@ -70,8 +70,8 @@ describe 'Linode' do
|
|
70
70
|
|
71
71
|
it 'should use the user.getapikey remote call to look up the API key associated with the username/password combo specified at creation time' do
|
72
72
|
@json = '{"ERRORARRAY":[],"DATA":{"USERNAME":"ogc","API_KEY":"blahblahblah"},"ACTION":"user.getapikey"}'
|
73
|
-
HTTParty.expects(:
|
74
|
-
:
|
73
|
+
HTTParty.expects(:post).with(@api_url,
|
74
|
+
:body => {
|
75
75
|
:api_action => 'user.getapikey',
|
76
76
|
:api_responseFormat => 'json',
|
77
77
|
:username => @username,
|
@@ -136,7 +136,7 @@ describe 'Linode' do
|
|
136
136
|
"ACTION":"test.echo",
|
137
137
|
"DATA":{"FOO":"bar"}
|
138
138
|
}!
|
139
|
-
HTTParty.stubs(:
|
139
|
+
HTTParty.stubs(:post).returns(@json)
|
140
140
|
@linode.stubs(:api_url).returns('https://fake.linode.com/')
|
141
141
|
end
|
142
142
|
|
@@ -150,63 +150,63 @@ describe 'Linode' do
|
|
150
150
|
|
151
151
|
it 'should make a request to the API url' do
|
152
152
|
@linode.stubs(:api_url).returns('https://fake.linode.com/')
|
153
|
-
HTTParty.expects(:
|
153
|
+
HTTParty.expects(:post).with { |path, args|
|
154
154
|
path == 'https://fake.linode.com/'
|
155
155
|
}.returns(@json)
|
156
156
|
@linode.send_request('test.echo', { })
|
157
157
|
end
|
158
158
|
|
159
159
|
it 'should provide the API key when making its request' do
|
160
|
-
HTTParty.expects(:
|
161
|
-
args[:
|
160
|
+
HTTParty.expects(:post).with { |path, args|
|
161
|
+
args[:body][:api_key] == @api_key
|
162
162
|
}.returns(@json)
|
163
163
|
@linode.send_request('test.echo', { })
|
164
164
|
end
|
165
165
|
|
166
166
|
it 'should set the designated request method as the HTTP API action' do
|
167
|
-
HTTParty.expects(:
|
168
|
-
args[:
|
167
|
+
HTTParty.expects(:post).with { |path, args|
|
168
|
+
args[:body][:api_action] == 'test.echo'
|
169
169
|
}.returns(@json)
|
170
170
|
@linode.send_request('test.echo', { })
|
171
171
|
end
|
172
172
|
|
173
173
|
it 'should set the response format to JSON' do
|
174
|
-
HTTParty.expects(:
|
175
|
-
args[:
|
174
|
+
HTTParty.expects(:post).with { |path, args|
|
175
|
+
args[:body][:api_responseFormat] == 'json'
|
176
176
|
}.returns(@json)
|
177
177
|
@linode.send_request('test.echo', { })
|
178
178
|
end
|
179
179
|
|
180
180
|
it 'should provide the data hash to the HTTP API request' do
|
181
|
-
HTTParty.expects(:
|
182
|
-
args[:
|
181
|
+
HTTParty.expects(:post).with { |path, args|
|
182
|
+
args[:body]['foo'] == 'bar'
|
183
183
|
}.returns(@json)
|
184
184
|
@linode.send_request('test.echo', { 'foo' => 'bar' })
|
185
185
|
end
|
186
186
|
|
187
187
|
it 'should not allow overriding the API key via the data hash' do
|
188
|
-
HTTParty.expects(:
|
189
|
-
args[:
|
188
|
+
HTTParty.expects(:post).with { |path, args|
|
189
|
+
args[:body][:api_key] == @api_key
|
190
190
|
}.returns(@json)
|
191
191
|
@linode.send_request('test.echo', { :api_key => 'h4x0r' })
|
192
192
|
end
|
193
193
|
|
194
194
|
it 'should not allow overriding the API action via the data hash' do
|
195
|
-
HTTParty.expects(:
|
196
|
-
args[:
|
195
|
+
HTTParty.expects(:post).with { |path, args|
|
196
|
+
args[:body][:api_action] == 'test.echo'
|
197
197
|
}.returns(@json)
|
198
198
|
@linode.send_request('test.echo', { :api_action => 'h4x0r' })
|
199
199
|
end
|
200
200
|
|
201
201
|
it 'should not allow overriding the API response format via the data hash' do
|
202
|
-
HTTParty.expects(:
|
203
|
-
args[:
|
202
|
+
HTTParty.expects(:post).with { |path, args|
|
203
|
+
args[:body][:api_responseFormat] == 'json'
|
204
204
|
}.returns(@json)
|
205
205
|
@linode.send_request('test.echo', { :api_responseFormat => 'h4x0r' })
|
206
206
|
end
|
207
207
|
|
208
208
|
it 'should fail when the request submission fails' do
|
209
|
-
HTTParty.stubs(:
|
209
|
+
HTTParty.stubs(:post).returns(%Q!{
|
210
210
|
"ERRORARRAY":["failure"],
|
211
211
|
"ACTION":"test.echo",
|
212
212
|
"DATA":{"foo":"bar"}
|
@@ -216,7 +216,7 @@ describe 'Linode' do
|
|
216
216
|
|
217
217
|
describe 'when the result is a list of hashes' do
|
218
218
|
it 'should return a list of objects with lower-cased methods for the data fields' do
|
219
|
-
HTTParty.stubs(:
|
219
|
+
HTTParty.stubs(:post).returns(%Q!{
|
220
220
|
"ERRORARRAY":[],
|
221
221
|
"ACTION":"test.echo",
|
222
222
|
"DATA":[{"FOO":"bar"},{"BAR":"baz"}]
|
@@ -226,7 +226,7 @@ describe 'Linode' do
|
|
226
226
|
end
|
227
227
|
|
228
228
|
it 'should return a list of objects which do not respond to upper-case URLs for the data fields' do
|
229
|
-
HTTParty.stubs(:
|
229
|
+
HTTParty.stubs(:post).returns(%Q!{
|
230
230
|
"ERRORARRAY":[],
|
231
231
|
"ACTION":"test.echo",
|
232
232
|
"DATA":[{"FOO":"bar"},{"BAR":"baz"}]
|
@@ -248,7 +248,7 @@ describe 'Linode' do
|
|
248
248
|
|
249
249
|
describe 'when the result is neither a list nor a hash' do
|
250
250
|
it 'should return the result unchanged' do
|
251
|
-
HTTParty.stubs(:
|
251
|
+
HTTParty.stubs(:post).returns(%Q!{
|
252
252
|
"ERRORARRAY":[],
|
253
253
|
"ACTION":"test.echo",
|
254
254
|
"DATA":"thingie"
|
@@ -417,5 +417,37 @@ describe 'Linode' do
|
|
417
417
|
linode.linode.should == result
|
418
418
|
end
|
419
419
|
end
|
420
|
+
|
421
|
+
it 'should be able to provide access to the Linode Nodebalancer API' do
|
422
|
+
@linode.should respond_to(:nodebalancer)
|
423
|
+
end
|
424
|
+
|
425
|
+
describe 'when providing access to the Linode Nodebalancer API' do
|
426
|
+
it 'should allow no arguments' do
|
427
|
+
lambda { @linode.nodebalancer }.should_not raise_error(ArgumentError)
|
428
|
+
end
|
429
|
+
|
430
|
+
it 'should require no arguments' do
|
431
|
+
lambda { @linode.nodebalancer(:foo) }.should raise_error(ArgumentError)
|
432
|
+
end
|
433
|
+
|
434
|
+
it 'should return a Linode::Nodebalancer instance' do
|
435
|
+
@linode.nodebalancer.class.should == Linode::Nodebalancer
|
436
|
+
end
|
437
|
+
|
438
|
+
it 'should set the API key on the Linode::Nodebalancer instance to be our API key' do
|
439
|
+
@linode.nodebalancer.api_key.should == @api_key
|
440
|
+
end
|
441
|
+
|
442
|
+
it 'should set the API url on the Linode::Nodebalancer instance to be our API url' do
|
443
|
+
@linode.nodebalancer.api_url.should == @api_url
|
444
|
+
end
|
445
|
+
|
446
|
+
it 'should return the same Linode::Nodebalancer instance when called again' do
|
447
|
+
linode = Linode.new(:api_key => @api_key)
|
448
|
+
result = linode.nodebalancer
|
449
|
+
linode.nodebalancer.should == result
|
450
|
+
end
|
451
|
+
end
|
420
452
|
end
|
421
453
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rick Bradley
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-07-07 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -59,6 +59,9 @@ files:
|
|
59
59
|
- lib/linode/linode/disk.rb
|
60
60
|
- lib/linode/linode/ip.rb
|
61
61
|
- lib/linode/linode/job.rb
|
62
|
+
- lib/linode/nodebalancer.rb
|
63
|
+
- lib/linode/nodebalancer/config.rb
|
64
|
+
- lib/linode/nodebalancer/node.rb
|
62
65
|
- lib/linode/stackscript.rb
|
63
66
|
- lib/linode/test.rb
|
64
67
|
- lib/linode/user.rb
|
@@ -71,6 +74,9 @@ files:
|
|
71
74
|
- spec/linode/linode/ip_spec.rb
|
72
75
|
- spec/linode/linode/job_spec.rb
|
73
76
|
- spec/linode/linode_spec.rb
|
77
|
+
- spec/linode/nodebalancer/config_spec.rb
|
78
|
+
- spec/linode/nodebalancer/node_spec.rb
|
79
|
+
- spec/linode/nodebalancer_spec.rb
|
74
80
|
- spec/linode/stackscript_spec.rb
|
75
81
|
- spec/linode/test_spec.rb
|
76
82
|
- spec/linode/user_spec.rb
|
@@ -119,6 +125,9 @@ test_files:
|
|
119
125
|
- spec/linode/linode/ip_spec.rb
|
120
126
|
- spec/linode/linode/job_spec.rb
|
121
127
|
- spec/linode/linode_spec.rb
|
128
|
+
- spec/linode/nodebalancer/config_spec.rb
|
129
|
+
- spec/linode/nodebalancer/node_spec.rb
|
130
|
+
- spec/linode/nodebalancer_spec.rb
|
122
131
|
- spec/linode/stackscript_spec.rb
|
123
132
|
- spec/linode/test_spec.rb
|
124
133
|
- spec/linode/user_spec.rb
|