spice 0.0.2.beta → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/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
|