bamboo-client 0.0.6 → 0.0.8

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/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2011 Jari Bakken
1
+ Copyright (c) 2010-2012 Jari Bakken
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -9,4 +9,4 @@ Cucumber::Rake::Task.new do |t|
9
9
  t.profile = 'default'
10
10
  end
11
11
 
12
- task :default => [:spec, :cucumber]
12
+ task :default => :spec
@@ -6,17 +6,18 @@ Gem::Specification.new do |s|
6
6
  s.name = "bamboo-client"
7
7
  s.version = Bamboo::Client::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Jari Bakken"]
10
- s.email = ["jari.bakken@gmail.com"]
9
+ s.authors = ["Jari Bakken", "Peter Marsh"]
10
+ s.email = ["jari.bakken@gmail.com", "pete.d.marsh@gmail.com"]
11
11
  s.homepage = ""
12
12
  s.summary = %q{Ruby client for Atlassian Bamboo's REST APIs}
13
13
  s.description = %q{Ruby client for Atlassian Bamboo's REST APIs}
14
14
 
15
15
  s.rubyforge_project = "bamboo-client"
16
16
 
17
- s.add_development_dependency "rspec"
17
+ s.add_development_dependency "rspec", "~> 2.5"
18
18
  s.add_development_dependency "cucumber", ">= 0.10.0"
19
19
  s.add_development_dependency "simplecov"
20
+ s.add_development_dependency "rake", "~> 0.9"
20
21
 
21
22
  s.add_dependency "rest-client"
22
23
  s.add_dependency "json"
@@ -20,3 +20,10 @@ Feature: Bamboo REST client
20
20
  When I fetch all builds
21
21
  Then I should get a list of builds
22
22
  And all builds should have a state
23
+
24
+ Scenario: Authenticated API
25
+ When I log in
26
+ Then I should get a session ID
27
+ When I fetch all the plans
28
+ Then I should get a list of plans
29
+ And all plans should have a key
@@ -31,3 +31,11 @@ end
31
31
  Then /^all builds should have a state$/ do
32
32
  @builds.each { |b| [:successful, :failed].should include(b.state) }
33
33
  end
34
+
35
+ When /^I log in$/ do
36
+ client.login user, password
37
+ end
38
+
39
+ Then /^I should get a session ID$/ do
40
+ client.cookies.has_key? :JSESSIONID
41
+ end
@@ -0,0 +1,38 @@
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
34
+
35
+ When /^I login to in with my credentials, (.*) and (.*)$/ do |username, password|
36
+ client.login(username, password)
37
+ client.cookies != nil
38
+ end
@@ -2,6 +2,7 @@ $:.unshift File.expand_path("../../../lib", __FILE__)
2
2
  require "bamboo-client"
3
3
 
4
4
  $DEBUG = false
5
+ RestClient.log = STDERR if false
5
6
 
6
7
  module BambooClientHelper
7
8
  attr_reader :client
@@ -13,7 +13,6 @@ module Bamboo
13
13
 
14
14
  def initialize(data)
15
15
  @data = data
16
-
17
16
  pp @data if $DEBUG
18
17
  end
19
18
 
@@ -40,14 +39,20 @@ module Bamboo
40
39
  end
41
40
  end # Doc
42
41
 
43
- def post(uri_or_path, data = {})
44
- resp = RestClient.post(uri_for(uri_or_path), data.to_json, :accept => :json, :content_type => :json)
42
+ def post(uri_or_path, data = {}, cookies = nil)
43
+ resp = RestClient.post(uri_for(uri_or_path), data.to_json, :accept => :json, :content_type => :json, :cookies => cookies)
45
44
  Doc.from(resp) unless resp.empty?
46
45
  end
47
46
 
48
- def get(uri_or_path, params = nil)
47
+ def get(uri_or_path, params = nil, cookies = nil)
49
48
  uri = uri_for(uri_or_path, params)
50
- Doc.from RestClient.get(uri, :accept => :json)
49
+ Doc.from RestClient.get(uri, :accept => :json, :cookies => cookies)
50
+ end
51
+
52
+ def get_cookies(uri_or_path, params = nil)
53
+ uri = uri_for(uri_or_path, nil)
54
+ resp = RestClient.get(uri, :params => params)
55
+ resp.cookies
51
56
  end
52
57
 
53
58
  end # Json
@@ -8,10 +8,25 @@ module Bamboo
8
8
  #
9
9
 
10
10
  class Rest < Abstract
11
+
12
+ attr_reader :cookies
13
+
11
14
  SERVICE = "/rest/api/latest"
12
15
 
13
16
  def initialize(http)
14
17
  super
18
+ @cookies = nil
19
+ end
20
+
21
+ def login(username, password)
22
+ url = File.join(SERVICE, 'plan')
23
+ resp = @http.get_cookies(url, {
24
+ :os_authType => 'basic',
25
+ :os_username => username,
26
+ :os_password => password
27
+ }
28
+ )
29
+ @cookies = {:JSESSIONID => resp['JSESSIONID']}
15
30
  end
16
31
 
17
32
  def plans
@@ -28,8 +43,8 @@ module Bamboo
28
43
 
29
44
  private
30
45
 
31
- def get(what)
32
- @http.get File.join(SERVICE, what)
46
+ def get(what, params = nil)
47
+ @http.get File.join(SERVICE, what), params, @cookies
33
48
  end
34
49
 
35
50
  class Plan
@@ -1,5 +1,5 @@
1
1
  module Bamboo
2
2
  module Client
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -9,7 +9,7 @@ module Bamboo
9
9
 
10
10
  it "does a GET" do
11
11
  RestClient.should_receive(:get).with(
12
- "#{url}/", :accept => :json
12
+ "#{url}/", :accept => :json, :cookies => nil
13
13
  ).and_return('{"some": "data"}')
14
14
 
15
15
  doc = json.get "/"
@@ -18,11 +18,20 @@ module Bamboo
18
18
 
19
19
  it "does a POST" do
20
20
  RestClient.should_receive(:post).with(
21
- "#{url}/", '{"some":"data"}', :accept => :json, :content_type => :json
21
+ "#{url}/", '{"some":"data"}', :accept => :json, :content_type => :json, :cookies => nil
22
22
  ).and_return('')
23
23
 
24
24
  json.post("/", :some => "data").should be_nil
25
25
  end
26
+
27
+ it "returns cookies from GET" do
28
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, "OK")
29
+ net_http_resp.add_field 'Set-Cookie', 'Cookie=Value;'
30
+ resp = RestClient::Response.create("",net_http_resp, nil)
31
+ RestClient.should_receive(:get).with("#{url}/", :params => nil).and_return(resp)
32
+ cookies = json.get_cookies("/").should == {'Cookie' => 'Value'}
33
+ end
34
+
26
35
  end
27
36
 
28
37
  describe Json::Doc do
@@ -214,12 +214,12 @@ module Bamboo
214
214
  end
215
215
 
216
216
  it "returns nil if start time can not be parsed" do
217
- doc.stub(:css).and_return mock(:text => "foo")
217
+ doc.stub(:css).and_return mock(:text => "Sun Sep 32")
218
218
  result.start_time.should be_nil
219
219
  end
220
220
 
221
221
  it "returns nil if start time can not be parsed" do
222
- doc.stub(:css).and_return mock(:text => "foo")
222
+ doc.stub(:css).and_return mock(:text => "Sun Sep 32")
223
223
  result.end_time.should be_nil
224
224
  end
225
225
 
@@ -7,11 +7,24 @@ module Bamboo
7
7
  let(:document) { mock(Http::Json::Doc) }
8
8
  let(:client) { Rest.new(http) }
9
9
 
10
+ it "logs in" do
11
+ username = 'something'
12
+ password = 'somethingelse'
13
+ http.should_receive(:get_cookies).with(
14
+ '/rest/api/latest/plan',
15
+ {:os_authType => 'basic', :os_username => username, :os_password => password}).
16
+ and_return({'JSESSIONID' => '1'})
17
+ client.login username, password
18
+ client.cookies.should == { :JSESSIONID => '1'}
19
+ end
20
+
10
21
  it "should be able to fetch plans" do
11
22
  document.should_receive(:auto_expand).with(Rest::Plan, http).and_return %w[foo bar]
12
23
 
13
24
  http.should_receive(:get).with(
14
- "/rest/api/latest/plan/"
25
+ "/rest/api/latest/plan/",
26
+ nil,
27
+ nil
15
28
  ).and_return(document)
16
29
 
17
30
  client.plans.should == %w[foo bar]
@@ -20,7 +33,7 @@ module Bamboo
20
33
  it "should be able to fetch projects" do
21
34
  document.should_receive(:auto_expand).with(Rest::Project, http).and_return %w[foo bar]
22
35
 
23
- http.should_receive(:get).with("/rest/api/latest/project/").
36
+ http.should_receive(:get).with("/rest/api/latest/project/", nil, nil).
24
37
  and_return(document)
25
38
 
26
39
  client.projects.should == %w[foo bar]
@@ -29,7 +42,7 @@ module Bamboo
29
42
  it "should be able to fetch builds" do
30
43
  document.should_receive(:auto_expand).with(Rest::Build, http).and_return %w[foo bar]
31
44
 
32
- http.should_receive(:get).with("/rest/api/latest/build/").
45
+ http.should_receive(:get).with("/rest/api/latest/build/", nil, nil).
33
46
  and_return(document)
34
47
 
35
48
  client.builds.should == %w[foo bar]
metadata CHANGED
@@ -1,17 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bamboo-client
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 15
4
5
  prerelease:
5
- version: 0.0.6
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 8
10
+ version: 0.0.8
6
11
  platform: ruby
7
12
  authors:
8
13
  - Jari Bakken
14
+ - Peter Marsh
9
15
  autorequire:
10
16
  bindir: bin
11
17
  cert_chain: []
12
18
 
13
- date: 2011-03-15 00:00:00 +01:00
14
- default_executable:
19
+ date: 2012-01-31 00:00:00 Z
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
22
  name: rspec
@@ -19,9 +24,13 @@ dependencies:
19
24
  requirement: &id001 !ruby/object:Gem::Requirement
20
25
  none: false
21
26
  requirements:
22
- - - ">="
27
+ - - ~>
23
28
  - !ruby/object:Gem::Version
24
- version: "0"
29
+ hash: 9
30
+ segments:
31
+ - 2
32
+ - 5
33
+ version: "2.5"
25
34
  type: :development
26
35
  version_requirements: *id001
27
36
  - !ruby/object:Gem::Dependency
@@ -32,6 +41,11 @@ dependencies:
32
41
  requirements:
33
42
  - - ">="
34
43
  - !ruby/object:Gem::Version
44
+ hash: 55
45
+ segments:
46
+ - 0
47
+ - 10
48
+ - 0
35
49
  version: 0.10.0
36
50
  type: :development
37
51
  version_requirements: *id002
@@ -43,45 +57,73 @@ dependencies:
43
57
  requirements:
44
58
  - - ">="
45
59
  - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
46
63
  version: "0"
47
64
  type: :development
48
65
  version_requirements: *id003
49
66
  - !ruby/object:Gem::Dependency
50
- name: rest-client
67
+ name: rake
51
68
  prerelease: false
52
69
  requirement: &id004 !ruby/object:Gem::Requirement
53
70
  none: false
54
71
  requirements:
55
- - - ">="
72
+ - - ~>
56
73
  - !ruby/object:Gem::Version
57
- version: "0"
58
- type: :runtime
74
+ hash: 25
75
+ segments:
76
+ - 0
77
+ - 9
78
+ version: "0.9"
79
+ type: :development
59
80
  version_requirements: *id004
60
81
  - !ruby/object:Gem::Dependency
61
- name: json
82
+ name: rest-client
62
83
  prerelease: false
63
84
  requirement: &id005 !ruby/object:Gem::Requirement
64
85
  none: false
65
86
  requirements:
66
87
  - - ">="
67
88
  - !ruby/object:Gem::Version
89
+ hash: 3
90
+ segments:
91
+ - 0
68
92
  version: "0"
69
93
  type: :runtime
70
94
  version_requirements: *id005
71
95
  - !ruby/object:Gem::Dependency
72
- name: nokogiri
96
+ name: json
73
97
  prerelease: false
74
98
  requirement: &id006 !ruby/object:Gem::Requirement
75
99
  none: false
76
100
  requirements:
77
101
  - - ">="
78
102
  - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
79
106
  version: "0"
80
107
  type: :runtime
81
108
  version_requirements: *id006
109
+ - !ruby/object:Gem::Dependency
110
+ name: nokogiri
111
+ prerelease: false
112
+ requirement: &id007 !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ hash: 3
118
+ segments:
119
+ - 0
120
+ version: "0"
121
+ type: :runtime
122
+ version_requirements: *id007
82
123
  description: Ruby client for Atlassian Bamboo's REST APIs
83
124
  email:
84
125
  - jari.bakken@gmail.com
126
+ - pete.d.marsh@gmail.com
85
127
  executables: []
86
128
 
87
129
  extensions: []
@@ -91,6 +133,7 @@ extra_rdoc_files: []
91
133
  files:
92
134
  - .gitignore
93
135
  - .rspec
136
+ - .travis.yml
94
137
  - Gemfile
95
138
  - LICENSE
96
139
  - README
@@ -101,6 +144,7 @@ files:
101
144
  - features/rest.feature
102
145
  - features/step_definitions/remote_steps.rb
103
146
  - features/step_definitions/rest_steps.rb
147
+ - features/step_definitions/rest_steps.rb~
104
148
  - features/support/env.rb
105
149
  - lib/bamboo-client.rb
106
150
  - lib/bamboo-client/abstract.rb
@@ -124,7 +168,6 @@ files:
124
168
  - spec/fixtures/plan.json
125
169
  - spec/fixtures/project.json
126
170
  - spec/spec_helper.rb
127
- has_rdoc: true
128
171
  homepage: ""
129
172
  licenses: []
130
173
 
@@ -138,17 +181,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
181
  requirements:
139
182
  - - ">="
140
183
  - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
141
187
  version: "0"
142
188
  required_rubygems_version: !ruby/object:Gem::Requirement
143
189
  none: false
144
190
  requirements:
145
191
  - - ">="
146
192
  - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
147
196
  version: "0"
148
197
  requirements: []
149
198
 
150
199
  rubyforge_project: bamboo-client
151
- rubygems_version: 1.5.2
200
+ rubygems_version: 1.8.15
152
201
  signing_key:
153
202
  specification_version: 3
154
203
  summary: Ruby client for Atlassian Bamboo's REST APIs
@@ -157,6 +206,7 @@ test_files:
157
206
  - features/rest.feature
158
207
  - features/step_definitions/remote_steps.rb
159
208
  - features/step_definitions/rest_steps.rb
209
+ - features/step_definitions/rest_steps.rb~
160
210
  - features/support/env.rb
161
211
  - spec/bamboo-client/client_spec.rb
162
212
  - spec/bamboo-client/http/json_spec.rb
@@ -171,3 +221,4 @@ test_files:
171
221
  - spec/fixtures/plan.json
172
222
  - spec/fixtures/project.json
173
223
  - spec/spec_helper.rb
224
+ has_rdoc: