bamboo-client 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1,4 @@
1
1
  autotest-all: --color --format pretty features
2
+ autotest-rest: --color --format pretty features/rest.feature
3
+ autotest-remote: --color --format pretty features/remote.feature
2
4
  default: --color --format progress features
@@ -0,0 +1,22 @@
1
+ Feature: Bamboo REST client
2
+ In order to know more about our build pipeline
3
+ As a Bamboo user
4
+ I want to use Bamboo's REST API
5
+
6
+ Background:
7
+ Given I am using the REST client
8
+
9
+ Scenario: Fetch plans
10
+ When I fetch all the plans
11
+ Then I should get a list of plans
12
+ And all plans should have a key
13
+
14
+ Scenario: Fetch projects
15
+ When I fetch all projects
16
+ Then I should get a list of projects
17
+ And all projects should have a key
18
+
19
+ Scenario: Fetch all builds
20
+ When I fetch all builds
21
+ Then I should get a list of builds
22
+ And all builds should have a state
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  Then /^I should get a list of builds$/ do
14
14
  @builds.should_not be_empty
15
- @builds.each { |e| e.should be_kind_of(Bamboo::Client::Remote::Build) }
15
+ @builds.each { |e| e.should be_kind_of(client.class::Build) }
16
16
  end
17
17
 
18
18
  When /^I fetch a build result$/ do
@@ -0,0 +1,33 @@
1
+ When /^I fetch all the plans$/ do
2
+ @plans = client.plans
3
+ end
4
+
5
+ Then /^I should get a list of plans$/ do
6
+ @plans.should_not be_empty
7
+ @plans.each { |plan| plan.should be_kind_of(Bamboo::Client::Rest::Plan) }
8
+ end
9
+
10
+ When /^I fetch all projects$/ do
11
+ @projects = client.projects
12
+ end
13
+
14
+ Then /^I should get a list of projects$/ do
15
+ @projects.should_not be_empty
16
+ @projects.each { |pro| pro.should be_kind_of(Bamboo::Client::Rest::Project) }
17
+ end
18
+
19
+ Then /^all plans should have a key$/ do
20
+ @plans.each { |e| e.key.should be_kind_of(String) }
21
+ end
22
+
23
+ Then /^all projects should have a key$/ do
24
+ @projects.each { |e| e.key.should be_kind_of(String) }
25
+ end
26
+
27
+ When /^I fetch all builds$/ do
28
+ @builds = client.builds
29
+ end
30
+
31
+ Then /^all builds should have a state$/ do
32
+ @builds.each { |b| [:successful, :failed].should include(b.state) }
33
+ end
@@ -1,6 +1,8 @@
1
1
  $:.unshift File.expand_path("../../../lib", __FILE__)
2
2
  require "bamboo-client"
3
3
 
4
+ $DEBUG = false
5
+
4
6
  module BambooClientHelper
5
7
  attr_reader :client
6
8
 
@@ -27,4 +29,4 @@ module BambooClientHelper
27
29
  end
28
30
  end
29
31
 
30
- World(BambooClientHelper)
32
+ World(BambooClientHelper)
@@ -1,5 +1,6 @@
1
1
  require "uri"
2
2
  require "restclient"
3
+ require "time"
3
4
 
4
5
  require "bamboo-client/version"
5
6
  require "bamboo-client/http"
@@ -7,6 +8,7 @@ require "bamboo-client/abstract"
7
8
  require "bamboo-client/rest"
8
9
  require "bamboo-client/remote"
9
10
 
11
+ require "pp" if $DEBUG
10
12
 
11
13
  module Bamboo
12
14
  module Client
@@ -7,6 +7,29 @@ module Bamboo
7
7
  def initialize(url)
8
8
  @uri = URI.parse url
9
9
  end
10
+
11
+ private
12
+
13
+ def uri_for(uri_or_path, params = nil)
14
+ if uri_or_path.kind_of? URI
15
+ u = uri_or_path.dup
16
+
17
+ u.host = @uri.host
18
+ u.port = @uri.port
19
+ u.scheme = @uri.scheme
20
+ else
21
+ u = uri.dup
22
+ u.path = uri_or_path
23
+ end
24
+
25
+ u.query = query_string_for(params) if params
26
+ u.to_s
27
+ end
28
+
29
+ def query_string_for(params)
30
+ params.map { |k, v| "#{k.to_s}=#{CGI.escape(v.to_s)}" }.join('&')
31
+ end
32
+
10
33
  end # Abstract
11
34
  end # Http
12
35
  end # Client
@@ -4,6 +4,50 @@ module Bamboo
4
4
  module Client
5
5
  module Http
6
6
  class Json < Abstract
7
+ class Doc
8
+ attr_reader :data
9
+
10
+ def self.from(str)
11
+ new JSON.parse(str)
12
+ end
13
+
14
+ def initialize(data)
15
+ @data = data
16
+ pp @data if $DEBUG
17
+ end
18
+
19
+ def doc_for(key)
20
+ Doc.new @data.fetch(key)
21
+ end
22
+
23
+ def auto_expand(klass, client)
24
+ key_to_expand = @data.fetch('expand')
25
+
26
+ obj = @data[key_to_expand]
27
+ case obj
28
+ when Hash
29
+ if obj.has_key?('expand')
30
+ Doc.new(obj).auto_expand(klass, client)
31
+ else
32
+ klass.new(obj, client)
33
+ end
34
+ when Array
35
+ obj.map { |e| klass.new(e, client) }
36
+ else
37
+ raise TypeError, "don't know how to auto-expand #{obj.inspect}"
38
+ end
39
+ end
40
+ end # Doc
41
+
42
+ def post(uri_or_path, data = {})
43
+ resp = RestClient.post(uri_for(uri_or_path), data.to_json, :accept => :json, :content_type => :json)
44
+ Doc.from(resp) unless resp.empty?
45
+ end
46
+
47
+ def get(uri_or_path, params = nil)
48
+ uri = uri_for(uri_or_path, params)
49
+ Doc.from RestClient.get(uri, :accept => :json)
50
+ end
7
51
 
8
52
  end # Json
9
53
  end # Http
@@ -44,14 +44,6 @@ module Bamboo
44
44
  Doc.from RestClient.post(uri_for(path), data)
45
45
  end
46
46
 
47
- private
48
-
49
- def uri_for(path)
50
- u = uri.dup
51
- u.path = path
52
-
53
- u.to_s
54
- end
55
47
  end # Xml
56
48
  end # Http
57
49
  end # Client
@@ -8,6 +8,167 @@ module Bamboo
8
8
  #
9
9
 
10
10
  class Rest < Abstract
11
+ def initialize(http)
12
+ super
13
+ @service = "/rest/api/latest"
14
+ end
15
+
16
+ def plans
17
+ get("plan/").auto_expand Plan, @http
18
+ end
19
+
20
+ def projects
21
+ get("project/").auto_expand Project, @http
22
+ end
23
+
24
+ def builds
25
+ get("build/").auto_expand Build, @http
26
+ end
27
+
28
+ private
29
+
30
+ def get(what)
31
+ @http.get File.join(@service, what)
32
+ end
33
+
34
+ class Plan
35
+ def initialize(data, http)
36
+ @data = data
37
+ @http = http
38
+ end
39
+
40
+ def enabled?
41
+ @data['enabled']
42
+ end
43
+
44
+ def type
45
+ @data['type'].downcase.to_sym
46
+ end
47
+
48
+ def name
49
+ @data['name']
50
+ end
51
+
52
+ def key
53
+ @data['key']
54
+ end
55
+
56
+ def url
57
+ @data.fetch("link")['href']
58
+ end
59
+ end # Plan
60
+
61
+ class Project
62
+ def initialize(data, http)
63
+ @data = data
64
+ @http = http
65
+ end
66
+
67
+ def name
68
+ @data['name']
69
+ end
70
+
71
+ def key
72
+ @data['key']
73
+ end
74
+
75
+ def url
76
+ @data.fetch("link")['href']
77
+ end
78
+ end # Project
79
+
80
+ class Build
81
+ def initialize(data, http)
82
+ @data = data
83
+ @http = http
84
+
85
+ @changes = nil
86
+ end
87
+
88
+ def state
89
+ @data.fetch('state').downcase.to_sym
90
+ end
91
+
92
+ def life_cycle_state
93
+ @data.fetch("lifeCycleState").downcase.to_sym
94
+ end
95
+
96
+ def number
97
+ @data['number']
98
+ end
99
+
100
+ def key
101
+ @data['key']
102
+ end
103
+
104
+ def id
105
+ @data['id']
106
+ end
107
+
108
+ def url
109
+ @data.fetch("link")['href']
110
+ end
111
+
112
+ def uri
113
+ @uri ||= URI.parse(url)
114
+ end
115
+
116
+ def changes
117
+ @changes ||= (
118
+ doc = fetch_details("changes.change.files").doc_for('changes')
119
+ doc.auto_expand Change, @http
120
+ )
121
+ end
122
+
123
+ private
124
+
125
+ def fetch_details(expand)
126
+ @http.get(uri, :expand => expand)
127
+ end
128
+ end # Build
129
+
130
+ class Change
131
+ def initialize(data, http)
132
+ @data = data
133
+ @http = http
134
+ end
135
+
136
+ def id
137
+ @data['changesetId']
138
+ end
139
+
140
+ def date
141
+ Time.parse @data['date']
142
+ end
143
+
144
+ def author
145
+ @data['author']
146
+ end
147
+
148
+ def full_name
149
+ @data['fullName']
150
+ end
151
+
152
+ def user_name
153
+ @data['userName']
154
+ end
155
+
156
+ def comment
157
+ @data['comment']
158
+ end
159
+
160
+ def files
161
+ # could use expand here
162
+ Array(@data.fetch('files')['file']).map do |data|
163
+ {
164
+ :name => data['name'],
165
+ :revision => data['revision']
166
+ }
167
+ end
168
+ end
169
+
170
+
171
+ end # Change
11
172
 
12
173
  end # Rest
13
174
  end # Client
@@ -1,5 +1,5 @@
1
1
  module Bamboo
2
2
  module Client
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -0,0 +1,80 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+
3
+ module Bamboo
4
+ module Client
5
+ module Http
6
+ describe Json do
7
+ let(:url) { "http://example.com" }
8
+ let(:json) { Json.new(url) }
9
+
10
+ it "does a GET" do
11
+ RestClient.should_receive(:get).with(
12
+ "#{url}/", :accept => :json
13
+ ).and_return('{"some": "data"}')
14
+
15
+ doc = json.get "/"
16
+ doc.should be_kind_of(Json::Doc)
17
+ end
18
+
19
+ it "does a POST" do
20
+ RestClient.should_receive(:post).with(
21
+ "#{url}/", '{"some":"data"}', :accept => :json, :content_type => :json
22
+ ).and_return('')
23
+
24
+ json.post("/", :some => "data").should be_nil
25
+ end
26
+ end
27
+
28
+ describe Json::Doc do
29
+ it "auto expands a one-level expansion" do
30
+ doc = Json::Doc.new(
31
+ "expand" => "a",
32
+ "a" => {"some" => "data"}
33
+ )
34
+
35
+ doc.auto_expand(SpecHelper::Wrapper, nil).obj.should == {"some" => "data"}
36
+ end
37
+
38
+ it "auto expands Arrays" do
39
+ expected = [{"some" => "data"}, {"something" => "else"}]
40
+
41
+ doc = Json::Doc.new(
42
+ "expand" => "a",
43
+ "a" => expected
44
+ )
45
+
46
+ actual = doc.auto_expand(SpecHelper::Wrapper, nil).map { |e| e.obj }
47
+ actual.should == expected
48
+ end
49
+
50
+ it "auto-expands the next expansion level" do
51
+ doc = Json::Doc.new(
52
+ "expand" => "a",
53
+ "a" => {
54
+ "expand" => "b",
55
+ "b" => %w[foo bar]
56
+ }
57
+ )
58
+
59
+ actual = doc.auto_expand(SpecHelper::Wrapper, nil).map { |e| e.obj }
60
+ actual.should == %w[foo bar]
61
+ end
62
+
63
+ it "raises a TypeError if an object can't be expanded" do
64
+ doc = Json::Doc.new(
65
+ "expand" => "a",
66
+ "a" => 1
67
+ )
68
+
69
+ lambda { doc.auto_expand(SpecHelper::Wrapper, nil) }.should raise_error(TypeError)
70
+ end
71
+
72
+ it "returns a doc for the given key" do
73
+ doc = Json::Doc.new("foo" => {"bar" => "baz"})
74
+ doc.doc_for("foo").data.should == {"bar" => "baz"}
75
+ end
76
+ end
77
+
78
+ end # Http
79
+ end # Client
80
+ end # Bamboo
@@ -19,8 +19,8 @@ module Bamboo
19
19
  end
20
20
 
21
21
  describe Xml::Doc do
22
- let(:wrapped) {
23
- m = mock("nokogiri document")
22
+ let(:wrapped) {
23
+ m = mock("nokogiri document")
24
24
  m.stub!(:css).with("errors error").and_return []
25
25
  m
26
26
  }
@@ -34,6 +34,11 @@ module Bamboo
34
34
  doc.text_for("some selector").should == "bar"
35
35
  end
36
36
 
37
+ it "checks for errors in the given document" do
38
+ wrapped.should_receive(:css).with("errors error").and_return [mock(:text => "error!")]
39
+ lambda { doc.text_for "some selector" }.should raise_error(Bamboo::Client::Error)
40
+ end
41
+
37
42
  it "returns an instance of the given class for each node matching the selector" do
38
43
  wrapped.should_receive(:css).with("selector").and_return(['node1', 'node2'])
39
44
 
@@ -4,8 +4,148 @@ module Bamboo
4
4
  module Client
5
5
  describe Rest do
6
6
  let(:http) { mock(Http::Json) }
7
+ let(:document) { mock(Http::Json::Doc) }
7
8
  let(:client) { Rest.new(http) }
8
9
 
9
- end
10
- end
11
- end
10
+ it "should be able to fetch plans" do
11
+ document.should_receive(:auto_expand).with(Rest::Plan, http).and_return %w[foo bar]
12
+
13
+ http.should_receive(:get).with(
14
+ "/rest/api/latest/plan/"
15
+ ).and_return(document)
16
+
17
+ client.plans.should == %w[foo bar]
18
+ end
19
+
20
+ it "should be able to fetch projects" do
21
+ document.should_receive(:auto_expand).with(Rest::Project, http).and_return %w[foo bar]
22
+
23
+ http.should_receive(:get).with("/rest/api/latest/project/").
24
+ and_return(document)
25
+
26
+ client.projects.should == %w[foo bar]
27
+ end
28
+
29
+ it "should be able to fetch builds" do
30
+ document.should_receive(:auto_expand).with(Rest::Build, http).and_return %w[foo bar]
31
+
32
+ http.should_receive(:get).with("/rest/api/latest/build/").
33
+ and_return(document)
34
+
35
+ client.builds.should == %w[foo bar]
36
+ end
37
+
38
+ describe Rest::Plan do
39
+ let(:data) { json_fixture("plan") }
40
+ let(:plan) { Rest::Plan.new data, http }
41
+
42
+ it "knows if the plan is enabled" do
43
+ plan.should be_enabled
44
+ end
45
+
46
+ it "has a type" do
47
+ plan.type.should == :chain
48
+ end
49
+
50
+ it "has a name" do
51
+ plan.name.should == "Selenium 2 Ruby - WebDriver Remote Client Tests - Windows"
52
+ end
53
+
54
+ it "has a key" do
55
+ plan.key.should == "S2RB-REMWIN"
56
+ end
57
+
58
+ it "has a URL" do
59
+ plan.url.should == "http://xserve.openqa.org:8085/rest/api/latest/plan/S2RB-REMWIN"
60
+ end
61
+ end # Plan
62
+
63
+ describe Rest::Project do
64
+ let(:data) { json_fixture("project") }
65
+ let(:plan) { Rest::Project.new data, http }
66
+
67
+ it "has a name" do
68
+ plan.name.should == "Selenium 2 Java"
69
+ end
70
+
71
+ it "has a key" do
72
+ plan.key.should == "S2J"
73
+ end
74
+
75
+ it "has a URL" do
76
+ plan.url.should == "http://xserve.openqa.org:8085/rest/api/latest/project/S2J"
77
+ end
78
+ end
79
+
80
+ describe Rest::Build do
81
+ let(:data) { json_fixture("build") }
82
+ let(:build) { Rest::Build.new data, http }
83
+
84
+ it "has a key" do
85
+ build.key.should == "IAD-DEFAULT-5388"
86
+ end
87
+
88
+ it "has a state" do
89
+ build.state.should == :successful
90
+ end
91
+
92
+ it "has an id" do
93
+ build.id.should == 8487295
94
+ end
95
+
96
+ it "has a number" do
97
+ build.number.should == 5388
98
+ end
99
+
100
+ it "has a life cycle state" do
101
+ build.life_cycle_state.should == :finished
102
+ end
103
+
104
+ it "has a URL" do
105
+ build.url.should == "http://localhost:8085/rest/api/latest/result/IAD-DEFAULT-5388"
106
+ end
107
+
108
+ it "has a list of changes" do
109
+ # TODO: arg expectation
110
+ http.should_receive(:get).and_return Http::Json::Doc.new(json_fixture("build_with_changes"))
111
+ build.changes.first.should be_kind_of(Rest::Change)
112
+ end
113
+ end
114
+
115
+ describe Rest::Change do
116
+ let(:data) { json_fixture("change") }
117
+ let(:change) { Rest::Change.new data, http }
118
+
119
+ it "has an id" do
120
+ change.id.should == "131"
121
+ end
122
+
123
+ it "has a date" do
124
+ change.date.should == Time.parse("2011-01-20T10:04:47.000+01:00")
125
+ end
126
+
127
+ it "has an author" do
128
+ change.author.should == "joedev"
129
+ end
130
+
131
+ it "has a full name" do
132
+ change.full_name.should == "Joe Developer"
133
+ end
134
+
135
+ it "has a username" do
136
+ change.user_name.should == "joedev"
137
+ end
138
+
139
+ it "has a comment" do
140
+ change.comment.should == "Fixed the config thing."
141
+ end
142
+
143
+ it "has a list of files" do
144
+ change.files.first.should == {:name => "/trunk/server/src/main/resources/some-config.ini", :revision => "131"}
145
+ end
146
+ end
147
+
148
+
149
+ end # Rest
150
+ end # Client
151
+ end # Bamboo
@@ -0,0 +1,12 @@
1
+ {
2
+ "type": "restChainResult",
3
+ "id": 8487295,
4
+ "number": 5388,
5
+ "lifeCycleState": "Finished",
6
+ "state": "Successful",
7
+ "key": "IAD-DEFAULT-5388",
8
+ "link": {
9
+ "rel": "self",
10
+ "href": "http://localhost:8085/rest/api/latest/result/IAD-DEFAULT-5388"
11
+ }
12
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "id": 8159340,
3
+ "number": 29,
4
+ "lifeCycleState": "Finished",
5
+ "state": "Successful",
6
+ "key": "ADS-DEFAULT-29",
7
+ "expand": "changes,metadata,stages,labels,jiraIssues,comments",
8
+ "link": {
9
+ "rel": "self",
10
+ "href": "http://localhost:8085/rest/api/latest/build/ADS-DEFAULT-29"
11
+ },
12
+ "buildStartedTime": "2011-01-20T10:08:41.000+01:00",
13
+ "buildCompletedTime": "2011-01-20T10:09:32.000+01:00",
14
+ "buildDurationInSeconds": 51,
15
+ "buildDuration": 51074,
16
+ "buildDurationDescription": "51 seconds",
17
+ "buildRelativeTime": "4 weeks ago",
18
+ "vcsRevisionKey": "131",
19
+ "buildTestSummary": "13 passed",
20
+ "successfulTestCount": 13,
21
+ "failedTestCount": 0,
22
+ "buildReason": "Code has changed",
23
+ "stages": {
24
+ "size": 1,
25
+ "max-result": 1,
26
+ "start-index": 0
27
+ },
28
+ "labels": {
29
+ "size": 0,
30
+ "max-result": 0,
31
+ "start-index": 0
32
+ },
33
+ "jiraIssues": {
34
+ "size": 1,
35
+ "max-result": 1,
36
+ "start-index": 0
37
+ },
38
+ "comments": {
39
+ "size": 0,
40
+ "max-result": 0,
41
+ "start-index": 0
42
+ },
43
+ "changes": {
44
+ "expand": "change",
45
+ "size": 1,
46
+ "max-result": 1,
47
+ "start-index": 0,
48
+ "change": [
49
+ {
50
+ "changesetId": "131",
51
+ "fullName": "Joe Developer",
52
+ "userName": "joedev",
53
+ "author": "joedev",
54
+ "expand": "files",
55
+ "comment": "Fixed the config thing.",
56
+ "date": "2011-01-20T10:04:47.000+01:00",
57
+ "files": {
58
+ "size": 1,
59
+ "max-result": 1,
60
+ "start-index": 0,
61
+ "file": [
62
+ {
63
+ "name": "/trunk/server/src/main/resources/some-config.ini",
64
+ "revision": "131"
65
+ }
66
+ ]
67
+ }
68
+ }
69
+ ]
70
+ },
71
+ "metadata": {
72
+ "size": 7,
73
+ "max-result": 7,
74
+ "start-index": 0
75
+ }
76
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "changesetId": "131",
3
+ "fullName": "Joe Developer",
4
+ "userName": "joedev",
5
+ "author": "joedev",
6
+ "expand": "files",
7
+ "comment": "Fixed the config thing.",
8
+ "date": "2011-01-20T10:04:47.000+01:00",
9
+ "files": {
10
+ "size": 1,
11
+ "max-result": 1,
12
+ "start-index": 0,
13
+ "file": [
14
+ {
15
+ "name": "/trunk/server/src/main/resources/some-config.ini",
16
+ "revision": "131"
17
+ }
18
+ ]
19
+ }
20
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "enabled":true,
3
+ "type":"chain",
4
+ "name":"Selenium 2 Ruby - WebDriver Remote Client Tests - Windows",
5
+ "key":"S2RB-REMWIN",
6
+ "link":
7
+ {
8
+ "rel":"self",
9
+ "href":"http://xserve.openqa.org:8085/rest/api/latest/plan/S2RB-REMWIN"
10
+ }
11
+ }
12
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "Selenium 2 Java",
3
+ "key": "S2J",
4
+ "link": {
5
+ "rel": "self",
6
+ "href": "http://xserve.openqa.org:8085/rest/api/latest/project/S2J"
7
+ }
8
+ }
@@ -16,6 +16,12 @@ module Bamboo::Client::SpecHelper
16
16
  Nokogiri.XML File.read(path)
17
17
  end
18
18
 
19
+ def json_fixture(name)
20
+ path = File.join fixture_path("#{name}.json")
21
+
22
+ JSON.parse File.read(path)
23
+ end
24
+
19
25
  def fixture_path(file)
20
26
  dir = File.expand_path("../fixtures", __FILE__)
21
27
 
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bamboo-client
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 3
9
- version: 0.0.3
4
+ prerelease:
5
+ version: 0.0.4
10
6
  platform: ruby
11
7
  authors:
12
8
  - Jari Bakken
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-19 00:00:00 +01:00
13
+ date: 2011-02-17 00:00:00 +01:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,8 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
24
  version: "0"
31
25
  type: :development
32
26
  version_requirements: *id001
@@ -38,8 +32,6 @@ dependencies:
38
32
  requirements:
39
33
  - - ">="
40
34
  - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
35
  version: "0"
44
36
  type: :development
45
37
  version_requirements: *id002
@@ -51,8 +43,6 @@ dependencies:
51
43
  requirements:
52
44
  - - ">="
53
45
  - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
46
  version: "0"
57
47
  type: :development
58
48
  version_requirements: *id003
@@ -64,8 +54,6 @@ dependencies:
64
54
  requirements:
65
55
  - - ">="
66
56
  - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
57
  version: "0"
70
58
  type: :runtime
71
59
  version_requirements: *id004
@@ -77,8 +65,6 @@ dependencies:
77
65
  requirements:
78
66
  - - ">="
79
67
  - !ruby/object:Gem::Version
80
- segments:
81
- - 0
82
68
  version: "0"
83
69
  type: :runtime
84
70
  version_requirements: *id005
@@ -90,8 +76,6 @@ dependencies:
90
76
  requirements:
91
77
  - - ">="
92
78
  - !ruby/object:Gem::Version
93
- segments:
94
- - 0
95
79
  version: "0"
96
80
  type: :runtime
97
81
  version_requirements: *id006
@@ -114,7 +98,9 @@ files:
114
98
  - bamboo-client.gemspec
115
99
  - cucumber.yml
116
100
  - features/remote.feature
101
+ - features/rest.feature
117
102
  - features/step_definitions/remote_steps.rb
103
+ - features/step_definitions/rest_steps.rb
118
104
  - features/support/env.rb
119
105
  - lib/bamboo-client.rb
120
106
  - lib/bamboo-client/abstract.rb
@@ -126,11 +112,17 @@ files:
126
112
  - lib/bamboo-client/rest.rb
127
113
  - lib/bamboo-client/version.rb
128
114
  - spec/bamboo-client/client_spec.rb
115
+ - spec/bamboo-client/http/json_spec.rb
129
116
  - spec/bamboo-client/http/xml_spec.rb
130
117
  - spec/bamboo-client/remote_spec.rb
131
118
  - spec/bamboo-client/rest_spec.rb
119
+ - spec/fixtures/build.json
132
120
  - spec/fixtures/build.xml
133
121
  - spec/fixtures/build_result.xml
122
+ - spec/fixtures/build_with_changes.json
123
+ - spec/fixtures/change.json
124
+ - spec/fixtures/plan.json
125
+ - spec/fixtures/project.json
134
126
  - spec/spec_helper.rb
135
127
  has_rdoc: true
136
128
  homepage: ""
@@ -146,32 +138,36 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
138
  requirements:
147
139
  - - ">="
148
140
  - !ruby/object:Gem::Version
149
- segments:
150
- - 0
151
141
  version: "0"
152
142
  required_rubygems_version: !ruby/object:Gem::Requirement
153
143
  none: false
154
144
  requirements:
155
145
  - - ">="
156
146
  - !ruby/object:Gem::Version
157
- segments:
158
- - 0
159
147
  version: "0"
160
148
  requirements: []
161
149
 
162
150
  rubyforge_project: bamboo-client
163
- rubygems_version: 1.3.7
151
+ rubygems_version: 1.5.2
164
152
  signing_key:
165
153
  specification_version: 3
166
154
  summary: Ruby client for Atlassian Bamboo's REST APIs
167
155
  test_files:
168
156
  - features/remote.feature
157
+ - features/rest.feature
169
158
  - features/step_definitions/remote_steps.rb
159
+ - features/step_definitions/rest_steps.rb
170
160
  - features/support/env.rb
171
161
  - spec/bamboo-client/client_spec.rb
162
+ - spec/bamboo-client/http/json_spec.rb
172
163
  - spec/bamboo-client/http/xml_spec.rb
173
164
  - spec/bamboo-client/remote_spec.rb
174
165
  - spec/bamboo-client/rest_spec.rb
166
+ - spec/fixtures/build.json
175
167
  - spec/fixtures/build.xml
176
168
  - spec/fixtures/build_result.xml
169
+ - spec/fixtures/build_with_changes.json
170
+ - spec/fixtures/change.json
171
+ - spec/fixtures/plan.json
172
+ - spec/fixtures/project.json
177
173
  - spec/spec_helper.rb