spice 0.0.2.beta → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -38
- data/README.md +3 -3
- data/lib/spice/client.rb +4 -0
- data/lib/spice/cookbook.rb +3 -0
- data/lib/spice/data_bag.rb +3 -0
- data/lib/spice/node.rb +3 -0
- data/lib/spice/version.rb +1 -1
- data/spec/spec_helper.rb +0 -2
- data/spec/spice/client_spec.rb +93 -50
- data/spec/spice/cookbook_spec.rb +1 -1
- data/spec/spice/data_bag_spec.rb +10 -20
- data/spec/spice/node_spec.rb +1 -1
- data/spec/spice/role_spec.rb +1 -1
- data/spec/support/requests.rb +97 -0
- data/spice.gemspec +1 -4
- metadata +14 -62
- data/spec/support/headers.rb +0 -18
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
spice (0.0.
|
4
|
+
spice (0.0.2.beta)
|
5
5
|
mixlib-authentication
|
6
6
|
rest-client
|
7
7
|
yajl-ruby
|
@@ -9,24 +9,8 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
-
abstract (1.0.0)
|
13
12
|
addressable (2.2.2)
|
14
13
|
builder (3.0.0)
|
15
|
-
bunny (0.6.0)
|
16
|
-
chef (0.9.12)
|
17
|
-
bunny (>= 0.6.0)
|
18
|
-
erubis
|
19
|
-
extlib
|
20
|
-
highline
|
21
|
-
json (>= 1.4.4, <= 1.4.6)
|
22
|
-
mixlib-authentication (>= 1.1.0)
|
23
|
-
mixlib-cli (>= 1.1.0)
|
24
|
-
mixlib-config (>= 1.1.2)
|
25
|
-
mixlib-log (>= 1.2.0)
|
26
|
-
moneta
|
27
|
-
ohai (>= 0.5.7)
|
28
|
-
rest-client (>= 1.0.4, < 1.7.0)
|
29
|
-
uuidtools
|
30
14
|
crack (0.1.8)
|
31
15
|
cucumber (0.10.0)
|
32
16
|
builder (>= 2.1.2)
|
@@ -35,29 +19,14 @@ GEM
|
|
35
19
|
json (~> 1.4.6)
|
36
20
|
term-ansicolor (~> 1.0.5)
|
37
21
|
diff-lcs (1.1.2)
|
38
|
-
erubis (2.6.6)
|
39
|
-
abstract (>= 1.0.0)
|
40
|
-
extlib (0.9.15)
|
41
|
-
forgery (0.3.6)
|
42
22
|
gherkin (2.3.2)
|
43
23
|
json (~> 1.4.6)
|
44
24
|
term-ansicolor (~> 1.0.5)
|
45
|
-
highline (1.6.1)
|
46
25
|
json (1.4.6)
|
47
26
|
mime-types (1.16)
|
48
27
|
mixlib-authentication (1.1.4)
|
49
28
|
mixlib-log
|
50
|
-
mixlib-cli (1.2.0)
|
51
|
-
mixlib-config (1.1.2)
|
52
29
|
mixlib-log (1.2.0)
|
53
|
-
moneta (0.6.0)
|
54
|
-
ohai (0.5.8)
|
55
|
-
extlib
|
56
|
-
json (>= 1.4.4, <= 1.4.6)
|
57
|
-
mixlib-cli
|
58
|
-
mixlib-config
|
59
|
-
mixlib-log
|
60
|
-
systemu
|
61
30
|
rcov (0.9.9)
|
62
31
|
rest-client (1.6.1)
|
63
32
|
mime-types (>= 1.16)
|
@@ -69,11 +38,8 @@ GEM
|
|
69
38
|
rspec-expectations (2.4.0)
|
70
39
|
diff-lcs (~> 1.1.2)
|
71
40
|
rspec-mocks (2.4.0)
|
72
|
-
systemu (1.2.0)
|
73
41
|
term-ansicolor (1.0.5)
|
74
42
|
timecop (0.3.5)
|
75
|
-
uuidtools (2.1.1)
|
76
|
-
vcr (1.4.0)
|
77
43
|
webmock (1.6.1)
|
78
44
|
addressable (>= 2.2.2)
|
79
45
|
crack (>= 0.1.7)
|
@@ -84,16 +50,13 @@ PLATFORMS
|
|
84
50
|
ruby
|
85
51
|
|
86
52
|
DEPENDENCIES
|
87
|
-
chef (= 0.9.12)
|
88
53
|
cucumber (~> 0.10.0)
|
89
|
-
forgery (~> 0.3.6)
|
90
54
|
mixlib-authentication
|
91
55
|
rcov
|
92
56
|
rest-client
|
93
57
|
rspec (~> 2.4.0)
|
94
58
|
spice!
|
95
59
|
timecop (~> 0.3.5)
|
96
|
-
vcr (~> 1.4.0)
|
97
60
|
webmock (~> 1.6.1)
|
98
61
|
yajl-ruby
|
99
62
|
yard (~> 0.6.4)
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# spice
|
2
2
|
|
3
|
-
Spice is a zesty Chef API wrapper. It's primary purpose is to let you integrate your apps with a (Chef)[http://opscode.com/chef] server easily
|
3
|
+
Spice is a zesty Chef API wrapper. It's primary purpose is to let you easily integrate your apps with a (Chef)[http://opscode.com/chef] server easily. Spice provides support for the [entire released Chef API](http://wiki.opscode.com/display/chef/Server+API)
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -74,9 +74,9 @@ Make the client "sweet" an admin:
|
|
74
74
|
|
75
75
|
Spice.connection.put("/clients/sweet", :admin => true)
|
76
76
|
|
77
|
-
Scope out
|
77
|
+
Scope out [the official Chef API docs](http://wiki.opscode.com/display/chef/Server+API) for a full list of wicked awesome things you can do.
|
78
78
|
|
79
|
-
|
79
|
+
### High-level use
|
80
80
|
|
81
81
|
TODO
|
82
82
|
|
data/lib/spice/client.rb
CHANGED
@@ -17,20 +17,24 @@ module Spice
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.show(options={})
|
20
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
20
21
|
name = options.delete(:name)
|
21
22
|
connection.get("/clients/#{name}")
|
22
23
|
end
|
23
24
|
|
24
25
|
def self.create(options={})
|
26
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
25
27
|
connection.post("/clients", options)
|
26
28
|
end
|
27
29
|
|
28
30
|
def self.update(options={})
|
31
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
29
32
|
name = options.delete(:name)
|
30
33
|
connection.put("/clients/#{name}", options)
|
31
34
|
end
|
32
35
|
|
33
36
|
def self.delete(options={})
|
37
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
34
38
|
name = options.delete(:name)
|
35
39
|
connection.delete("/clients/#{name}", options)
|
36
40
|
end
|
data/lib/spice/cookbook.rb
CHANGED
@@ -9,6 +9,7 @@ module Spice
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.show(options={})
|
12
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
12
13
|
name = options.delete(:name)
|
13
14
|
connection.get("/cookbooks/#{name}")
|
14
15
|
end
|
@@ -18,11 +19,13 @@ module Spice
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def self.update(options={})
|
22
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
21
23
|
name = options.delete(:name)
|
22
24
|
connection.put("/cookbooks/#{name}", options)
|
23
25
|
end
|
24
26
|
|
25
27
|
def self.delete(options={})
|
28
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
26
29
|
name = options.delete(:name)
|
27
30
|
connection.delete("/cookbooks/#{name}", options)
|
28
31
|
end
|
data/lib/spice/data_bag.rb
CHANGED
@@ -9,6 +9,7 @@ module Spice
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.show(options={})
|
12
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
12
13
|
name = options.delete(:name)
|
13
14
|
connection.get("/data/#{name}")
|
14
15
|
end
|
@@ -18,11 +19,13 @@ module Spice
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def self.update(options={})
|
22
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
21
23
|
name = options.delete(:name)
|
22
24
|
connection.put("/data/#{name}", options)
|
23
25
|
end
|
24
26
|
|
25
27
|
def self.delete(options={})
|
28
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
26
29
|
name = options.delete(:name)
|
27
30
|
connection.delete("/data/#{name}", options)
|
28
31
|
end
|
data/lib/spice/node.rb
CHANGED
@@ -9,6 +9,7 @@ module Spice
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.show(options={})
|
12
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
12
13
|
name = options.delete(:name)
|
13
14
|
connection.get("/nodes/#{name}")
|
14
15
|
end
|
@@ -18,11 +19,13 @@ module Spice
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def self.update(options={})
|
22
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
21
23
|
name = options.delete(:name)
|
22
24
|
connection.put("/nodes/#{name}", options)
|
23
25
|
end
|
24
26
|
|
25
27
|
def self.delete(options={})
|
28
|
+
raise ArgumentError, "Option :name must be present" unless options[:name]
|
26
29
|
name = options.delete(:name)
|
27
30
|
connection.delete("/nodes/#{name}", options)
|
28
31
|
end
|
data/lib/spice/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/spice/client_spec.rb
CHANGED
@@ -2,68 +2,111 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Spice
|
4
4
|
describe Client do
|
5
|
-
describe ".
|
6
|
-
|
7
|
-
|
5
|
+
describe ".all" do
|
6
|
+
before { setup_chef_client }
|
7
|
+
|
8
8
|
it "returns a list of clients" do
|
9
|
-
|
10
|
-
|
11
|
-
end
|
9
|
+
stub_client_list
|
10
|
+
Client.all.length.should == 1
|
12
11
|
end
|
13
12
|
end
|
14
|
-
|
13
|
+
|
15
14
|
describe ".show" do
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
before { setup_chef_client }
|
16
|
+
|
17
|
+
context "valid" do
|
18
|
+
it "returns a valid client" do
|
19
|
+
stub_client_show("monkeypants")
|
20
|
+
client = Client.show(:name => "monkeypants")
|
21
|
+
client["name"].should == "monkeypants"
|
22
|
+
client["admin"].should == true
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
|
26
|
+
context "errors" do
|
27
|
+
it "return a 404 when a client is not found" do
|
28
|
+
stub_client_show("applesauce", 404)
|
29
|
+
lambda { Client.show(:name => "applesauce") }.
|
30
|
+
should raise_error(RestClient::ResourceNotFound)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "raises ArgumentError if option :name not present" do
|
34
|
+
stub_client_show("pizza")
|
35
|
+
lambda {Client.show() }.should raise_error ArgumentError
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
31
|
-
|
39
|
+
|
32
40
|
describe ".create" do
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
41
|
+
before { setup_chef_client }
|
42
|
+
|
43
|
+
context "valid" do
|
44
|
+
it "creates a valid non-admin client" do
|
45
|
+
stub_client_create("spork")
|
46
|
+
client = Client.create(:name => "spork", :admin => false)
|
47
|
+
client["private_key"].should == "RSA PRIVATE KEY"
|
48
|
+
client["uri"].should == "http://http://localhost:4000/clients/spork"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "creates a valid admin client" do
|
52
|
+
stub_client_create("pants", true)
|
53
|
+
response = Client.create(:name => "pants", :admin => true)
|
54
|
+
response["private_key"].should == "RSA PRIVATE KEY"
|
55
|
+
response["uri"].should == "http://http://localhost:4000/clients/pants"
|
56
|
+
|
57
|
+
stub_client_show("pants")
|
58
|
+
client = Client.show(:name => "pants")
|
59
|
+
client["admin"].should == true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "errors" do
|
64
|
+
it "does not create a client that already exists" do
|
65
|
+
stub_client_create("pants", false, 409)
|
66
|
+
lambda { Client.create(:name => "pants", :admin => false) }.
|
67
|
+
should raise_error(RestClient::Conflict)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe ".update" do
|
73
|
+
before { setup_chef_client }
|
74
|
+
|
75
|
+
context "valid" do
|
76
|
+
it "makes a client an admin" do
|
77
|
+
stub_client_update("awesome", true, false, 200)
|
78
|
+
Client.update(:name => "awesome", :admin => true, :private_key => false)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "regenerates the client private key" do
|
82
|
+
stub_client_update("awesome", false, true, 200)
|
83
|
+
Client.update(:name => "awesome", :admin => false, :private_key => true)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe ".delete" do
|
89
|
+
before { setup_chef_client }
|
90
|
+
|
91
|
+
context "valid" do
|
92
|
+
it "deletes a client" do
|
93
|
+
stub_client_delete("spork")
|
94
|
+
Client.delete(:name => "spork")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "errors" do
|
99
|
+
it "raises ArgumentError if option :name not present" do
|
100
|
+
stub_client_delete("pizza")
|
101
|
+
lambda {Client.delete }.should raise_error ArgumentError
|
102
|
+
end
|
103
|
+
|
104
|
+
it "does not delete a non-existent client" do
|
105
|
+
stub_client_delete("spork", 404)
|
106
|
+
lambda { Client.delete(:name => "spork") }.
|
107
|
+
should raise_error(RestClient::ResourceNotFound)
|
38
108
|
end
|
39
109
|
end
|
40
|
-
# it "creates a valid admin client" do
|
41
|
-
# VCR.use_cassette 'client/create', :record => :new_episodes do
|
42
|
-
# chef.post_rest("/clients", JSON.parse(:name => "testclient", :admin => true))
|
43
|
-
# end
|
44
|
-
# end
|
45
|
-
it "does not create a client that already exists"
|
46
110
|
end
|
47
|
-
#
|
48
|
-
# describe ".update" do
|
49
|
-
# setup_authentication
|
50
|
-
#
|
51
|
-
# let(:name) { Forgery::Name.first_name.downcase.to_s }
|
52
|
-
# before { Client.create(:name => name) }
|
53
|
-
# VCR.use_cassette 'client/update', :record => :new_episodes do
|
54
|
-
# Client.update(:name => "name")
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# describe ".delete" do
|
59
|
-
# setup_authentication
|
60
|
-
#
|
61
|
-
# let(:name) { Forgery::Name.first_name.downcase.to_s }
|
62
|
-
# before { Client.create(:name => name) }
|
63
|
-
#
|
64
|
-
# VCR.use_cassette 'client/delete', :record => :new_episodes do
|
65
|
-
# Client.delete(:name => name)
|
66
|
-
# end
|
67
|
-
# end
|
68
111
|
end
|
69
112
|
end
|
data/spec/spice/cookbook_spec.rb
CHANGED
data/spec/spice/data_bag_spec.rb
CHANGED
@@ -2,34 +2,24 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Spice
|
4
4
|
describe DataBag do
|
5
|
-
describe ".
|
6
|
-
|
7
|
-
DataBag.list
|
8
|
-
end
|
5
|
+
describe ".all" do
|
6
|
+
DataBag.list
|
9
7
|
end
|
10
|
-
|
8
|
+
|
11
9
|
describe ".show" do
|
12
|
-
|
13
|
-
DataBag.show(:name => "testdata")
|
14
|
-
end
|
10
|
+
DataBag.show(:name => "testdata")
|
15
11
|
end
|
16
|
-
|
12
|
+
|
17
13
|
describe ".create" do
|
18
|
-
|
19
|
-
DataBag.create(:name => "testdata")
|
20
|
-
end
|
14
|
+
DataBag.create(:name => "testdata")
|
21
15
|
end
|
22
|
-
|
16
|
+
|
23
17
|
describe ".update" do
|
24
|
-
|
25
|
-
DataBag.update(:name => "testdata")
|
26
|
-
end
|
18
|
+
DataBag.update(:name => "testdata")
|
27
19
|
end
|
28
|
-
|
20
|
+
|
29
21
|
describe ".delete" do
|
30
|
-
|
31
|
-
DataBag.delete(:name => "testdata")
|
32
|
-
end
|
22
|
+
DataBag.delete(:name => "testdata")
|
33
23
|
end
|
34
24
|
end
|
35
25
|
end
|
data/spec/spice/node_spec.rb
CHANGED
data/spec/spice/role_spec.rb
CHANGED
@@ -0,0 +1,97 @@
|
|
1
|
+
def stub_client_list(name="testclient")
|
2
|
+
stub_request(:get, "http://localhost:4000/clients").
|
3
|
+
to_return(
|
4
|
+
:status => 200,
|
5
|
+
:body => "{\"#{name}\":\"http://localhost:4000/clients/#{name}\"}",
|
6
|
+
:headers => {})
|
7
|
+
end
|
8
|
+
|
9
|
+
def stub_client_show(name, status=200)
|
10
|
+
case status
|
11
|
+
when 200
|
12
|
+
stub_request(:get, "http://localhost:4000/clients/#{name}").
|
13
|
+
to_return(
|
14
|
+
:status => status,
|
15
|
+
:body => %Q{{"name": "#{name}",
|
16
|
+
"chef_type": "client",
|
17
|
+
"json_class": "Chef::ApiClient",
|
18
|
+
"public_key": "RSA PUBLIC KEY",
|
19
|
+
"_rev": "1-68532bf2122a54464db6ad65a24e2225",
|
20
|
+
"admin": true}
|
21
|
+
}
|
22
|
+
)
|
23
|
+
when 404
|
24
|
+
stub_request(:get, "http://localhost:4000/clients/#{name}").
|
25
|
+
to_return(
|
26
|
+
:status => status,
|
27
|
+
:body => "{\"error\":[\"Cannot load client #{name}\"]}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def stub_client_create(name, admin=false, status=201)
|
32
|
+
case status
|
33
|
+
when 201
|
34
|
+
stub_request(:post, "http://localhost:4000/clients").
|
35
|
+
with(
|
36
|
+
:body => "{\"name\":\"#{name}\",\"admin\":#{admin}}").
|
37
|
+
to_return(
|
38
|
+
:status => status,
|
39
|
+
:body => %Q{
|
40
|
+
{
|
41
|
+
"private_key":"RSA PRIVATE KEY",
|
42
|
+
"uri":"http://http://localhost:4000/clients/#{name}"}
|
43
|
+
},
|
44
|
+
:headers => {}
|
45
|
+
)
|
46
|
+
when 409
|
47
|
+
stub_request(:post, "http://localhost:4000/clients").
|
48
|
+
with(
|
49
|
+
:body => "{\"name\":\"#{name}\",\"admin\":#{admin}}").
|
50
|
+
to_return(
|
51
|
+
:status => status,
|
52
|
+
:body => %Q{
|
53
|
+
{
|
54
|
+
"private_key":"RSA PRIVATE KEY",
|
55
|
+
"uri":"http://http://localhost:4000/clients/#{name}"}
|
56
|
+
},
|
57
|
+
:headers => {}
|
58
|
+
)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def stub_client_update(name, admin=false, private_key=false, status=200)
|
63
|
+
case status
|
64
|
+
when 200
|
65
|
+
stub_request(:put, "http://localhost:4000/clients/#{name}").
|
66
|
+
with(:body => "{\"admin\":#{admin},\"private_key\":#{private_key}}").
|
67
|
+
to_return(
|
68
|
+
:status => status,
|
69
|
+
:body => %Q{{#{"\"private_key\":\"RSA PRIVATE KEY\"," if private_key}\"admin\": true}
|
70
|
+
}
|
71
|
+
)
|
72
|
+
# when 404
|
73
|
+
# stub_request(:get, "http://localhost:4000/clients/#{name}").
|
74
|
+
# to_return(
|
75
|
+
# :status => status,
|
76
|
+
# :body => "{\"error\":[\"Cannot load client #{name}\"]}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def stub_client_delete(name, status=200)
|
81
|
+
case status
|
82
|
+
when 200
|
83
|
+
stub_request(:delete, "http://localhost:4000/clients/#{name}").
|
84
|
+
with(:body => "").
|
85
|
+
to_return(
|
86
|
+
:status => status,
|
87
|
+
:body => ""
|
88
|
+
)
|
89
|
+
when 404
|
90
|
+
stub_request(:delete, "http://localhost:4000/clients/#{name}").
|
91
|
+
with(:body => "").
|
92
|
+
to_return(
|
93
|
+
:status => status,
|
94
|
+
:body => "{\"error\":[\"Cannot load client sasdasdf\"]}"
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
data/spice.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["hi@iamdanryan.com"]
|
11
11
|
s.homepage = "http://github.com/danryan/spice"
|
12
12
|
s.summary = %q{Chef API wrapper}
|
13
|
-
s.description = %q{
|
13
|
+
s.description = %q{Spice is a zesty Chef API wrapper. It's primary purpose is to let you easily integrate your apps with a (Chef)[http://opscode.com/chef] server easily. Spice provides support for the [entire released Chef API](http://wiki.opscode.com/display/chef/Server+API)}
|
14
14
|
|
15
15
|
s.rubyforge_project = "spice"
|
16
16
|
|
@@ -22,10 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "rspec", "~> 2.4.0"
|
23
23
|
s.add_development_dependency "cucumber", "~> 0.10.0"
|
24
24
|
s.add_development_dependency "webmock", "~> 1.6.1"
|
25
|
-
s.add_development_dependency "vcr", "~> 1.4.0"
|
26
25
|
s.add_development_dependency "timecop", "~> 0.3.5"
|
27
|
-
s.add_development_dependency "forgery", "~> 0.3.6"
|
28
|
-
s.add_development_dependency "chef", "0.9.12"
|
29
26
|
s.add_development_dependency "rcov"
|
30
27
|
|
31
28
|
s.files = `git ls-files`.split("\n")
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 0
|
8
7
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Dan Ryan
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-11 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -117,25 +116,10 @@ dependencies:
|
|
117
116
|
version: 1.6.1
|
118
117
|
type: :development
|
119
118
|
version_requirements: *id007
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: vcr
|
122
|
-
prerelease: false
|
123
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
124
|
-
none: false
|
125
|
-
requirements:
|
126
|
-
- - ~>
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
segments:
|
129
|
-
- 1
|
130
|
-
- 4
|
131
|
-
- 0
|
132
|
-
version: 1.4.0
|
133
|
-
type: :development
|
134
|
-
version_requirements: *id008
|
135
119
|
- !ruby/object:Gem::Dependency
|
136
120
|
name: timecop
|
137
121
|
prerelease: false
|
138
|
-
requirement: &
|
122
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
139
123
|
none: false
|
140
124
|
requirements:
|
141
125
|
- - ~>
|
@@ -146,41 +130,11 @@ dependencies:
|
|
146
130
|
- 5
|
147
131
|
version: 0.3.5
|
148
132
|
type: :development
|
149
|
-
version_requirements: *
|
150
|
-
- !ruby/object:Gem::Dependency
|
151
|
-
name: forgery
|
152
|
-
prerelease: false
|
153
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ~>
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
segments:
|
159
|
-
- 0
|
160
|
-
- 3
|
161
|
-
- 6
|
162
|
-
version: 0.3.6
|
163
|
-
type: :development
|
164
|
-
version_requirements: *id010
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: chef
|
167
|
-
prerelease: false
|
168
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - "="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
segments:
|
174
|
-
- 0
|
175
|
-
- 9
|
176
|
-
- 12
|
177
|
-
version: 0.9.12
|
178
|
-
type: :development
|
179
|
-
version_requirements: *id011
|
133
|
+
version_requirements: *id008
|
180
134
|
- !ruby/object:Gem::Dependency
|
181
135
|
name: rcov
|
182
136
|
prerelease: false
|
183
|
-
requirement: &
|
137
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
184
138
|
none: false
|
185
139
|
requirements:
|
186
140
|
- - ">="
|
@@ -189,8 +143,8 @@ dependencies:
|
|
189
143
|
- 0
|
190
144
|
version: "0"
|
191
145
|
type: :development
|
192
|
-
version_requirements: *
|
193
|
-
description:
|
146
|
+
version_requirements: *id009
|
147
|
+
description: Spice is a zesty Chef API wrapper. It's primary purpose is to let you easily integrate your apps with a (Chef)[http://opscode.com/chef] server easily. Spice provides support for the [entire released Chef API](http://wiki.opscode.com/display/chef/Server+API)
|
194
148
|
email:
|
195
149
|
- hi@iamdanryan.com
|
196
150
|
executables: []
|
@@ -236,7 +190,7 @@ files:
|
|
236
190
|
- spec/spice/role_spec.rb
|
237
191
|
- spec/spice_spec.rb
|
238
192
|
- spec/support/authentication.rb
|
239
|
-
- spec/support/
|
193
|
+
- spec/support/requests.rb
|
240
194
|
- spec/support/vcr.rb
|
241
195
|
- spice.gemspec
|
242
196
|
has_rdoc: true
|
@@ -259,13 +213,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
259
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
214
|
none: false
|
261
215
|
requirements:
|
262
|
-
- - "
|
216
|
+
- - ">="
|
263
217
|
- !ruby/object:Gem::Version
|
264
218
|
segments:
|
265
|
-
-
|
266
|
-
|
267
|
-
- 1
|
268
|
-
version: 1.3.1
|
219
|
+
- 0
|
220
|
+
version: "0"
|
269
221
|
requirements: []
|
270
222
|
|
271
223
|
rubyforge_project: spice
|
@@ -288,5 +240,5 @@ test_files:
|
|
288
240
|
- spec/spice/role_spec.rb
|
289
241
|
- spec/spice_spec.rb
|
290
242
|
- spec/support/authentication.rb
|
291
|
-
- spec/support/
|
243
|
+
- spec/support/requests.rb
|
292
244
|
- spec/support/vcr.rb
|
data/spec/support/headers.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
def get_clients_headers
|
2
|
-
{
|
3
|
-
'Accept'=>'application/json',
|
4
|
-
'Accept-Encoding'=>'gzip, deflate',
|
5
|
-
'Host'=>'http://localhost:4000',
|
6
|
-
'User-Agent'=>'Ruby',
|
7
|
-
'X-Ops-Authorization-1'=>'TwH5yBkqfvYolI+yQu6xcCLXWnoN3a8y8fwJ2gDF0AKVkYZQPIYi+gVHEMyW',
|
8
|
-
'X-Ops-Authorization-2'=>'fAgDhLE251LbJxixFo53P7E7IH5US0RiIwqNCekUn/R9oHHvk+Et4+HpxCcd',
|
9
|
-
'X-Ops-Authorization-3'=>'79BMWKB9so9Ob1ozfwljkSEd/eHxas7GAR/M9RgATGV/mL1v065/tScqFm8g',
|
10
|
-
'X-Ops-Authorization-4'=>'oNdYRwPkmZi+dPRp2ulQnY7HMiyber+QqQwkhnNsrreyh3gS1ANdj+L8djOS',
|
11
|
-
'X-Ops-Authorization-5'=>'Cb7zZAVq3AVclngCH1sjrOOO5Y/6tW+d7RBJrPutKoSWwhTZs0JWMJS+kyNP',
|
12
|
-
'X-Ops-Authorization-6'=>'1gIk63ATNnfc4vrmRRUl/SgY6s+exL3sxg5g2+CPJw==',
|
13
|
-
'X-Ops-Content-Hash'=>'2jmj7l5rSw0yVb/vlWAYkK/YBwk=',
|
14
|
-
'X-Ops-Sign'=>'version=1.0',
|
15
|
-
'X-Ops-Timestamp'=>'0000-01-01T05:00:00Z',
|
16
|
-
'X-Ops-Userid'=>'testclient'
|
17
|
-
}
|
18
|
-
end
|