go_api_client 0.0.6 → 0.0.7
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 +0 -2
- data/go_api_client.gemspec +5 -4
- data/lib/go_api_client/atom/feed.rb +7 -7
- data/lib/go_api_client/pipeline.rb +2 -5
- data/lib/go_api_client/stage.rb +11 -14
- data/lib/go_api_client/version.rb +1 -1
- data/lib/go_api_client.rb +4 -4
- data/test/fixtures/stages_empty.xml +9 -0
- data/test/go_api_client/pipeline_test.rb +28 -16
- data/test/go_api_client/stage_test.rb +33 -24
- data/test/test_helper.rb +7 -2
- metadata +22 -5
data/Gemfile
CHANGED
data/go_api_client.gemspec
CHANGED
@@ -5,9 +5,9 @@ require "go_api_client/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "go_api_client"
|
7
7
|
s.version = GoApiClient::VERSION
|
8
|
-
s.authors = ["Nikhil Mungel"]
|
9
|
-
s.email = ["hyfather@gmail.com"]
|
10
|
-
s.homepage = ""
|
8
|
+
s.authors = ["Nikhil Mungel", "Ketan Padegaonkar", "Shishir Das"]
|
9
|
+
s.email = ["hyfather@gmail.com", "KetanPadegaonkar@gmail.com", "shishir.das@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/ThoughtWorksInc/go-api-client"
|
11
11
|
s.summary = %q{Client to parse Go CI atom feed}
|
12
12
|
s.description = %q{This gem parses atom feed generated by the Go Continuous Integration server and provides an OO representation of the pipelines and stages.}
|
13
13
|
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
|
22
|
+
s.add_development_dependency "webmock"
|
23
|
+
|
23
24
|
s.add_runtime_dependency "nokogiri"
|
24
25
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
module GoApiClient
|
2
2
|
module Atom
|
3
3
|
class Feed
|
4
|
-
attr_accessor :updated_at
|
5
|
-
attr_accessor :next_page
|
6
|
-
attr_accessor :url
|
7
|
-
attr_accessor :entries
|
4
|
+
attr_accessor :updated_at, :next_page, :url, :entries
|
8
5
|
|
9
6
|
def initialize(root)
|
10
7
|
@root = root
|
@@ -12,14 +9,17 @@ module GoApiClient
|
|
12
9
|
|
13
10
|
def parse!
|
14
11
|
self.updated_at = @root.xpath('xmlns:updated').first.content
|
15
|
-
self.next_page = @root.xpath("xmlns:link[@rel='next']")
|
16
|
-
self.url = @root.xpath("xmlns:link[@rel='self']")
|
17
|
-
|
12
|
+
self.next_page = href_from(@root.xpath("xmlns:link[@rel='next']"))
|
13
|
+
self.url = href_from(@root.xpath("xmlns:link[@rel='self']"))
|
18
14
|
self.entries = @root.xpath("xmlns:entry").collect do |entry|
|
19
15
|
Entry.new(entry).parse!
|
20
16
|
end
|
21
17
|
self
|
22
18
|
end
|
19
|
+
|
20
|
+
def href_from(xml)
|
21
|
+
xml.first.attribute('href').value unless xml.empty?
|
22
|
+
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -18,11 +18,8 @@ module GoApiClient
|
|
18
18
|
|
19
19
|
def authors
|
20
20
|
authors = stages.map(&:authors).flatten
|
21
|
-
authors.map(&:name).flatten.uniq.join("
|
22
|
-
end
|
23
|
-
|
24
|
-
def same?(link)
|
25
|
-
@details_link == link
|
21
|
+
authors.map(&:name).flatten.uniq.join(", ")
|
26
22
|
end
|
23
|
+
|
27
24
|
end
|
28
25
|
end
|
data/lib/go_api_client/stage.rb
CHANGED
@@ -1,31 +1,28 @@
|
|
1
1
|
module GoApiClient
|
2
2
|
class Stage
|
3
|
-
|
3
|
+
attr_accessor :authors, :stage_link, :name, :result, :jobs, :pipeline
|
4
4
|
|
5
5
|
def initialize(entry, pipelines)
|
6
6
|
@authors = entry.authors
|
7
|
-
@
|
7
|
+
@stage_link = entry.stage_href
|
8
8
|
@pipelines = pipelines
|
9
9
|
end
|
10
10
|
|
11
11
|
def fetch
|
12
|
-
doc = Nokogiri::XML(open(self.
|
12
|
+
doc = Nokogiri::XML(open(self.stage_link))
|
13
13
|
@name = doc.root.xpath("@name").first.value
|
14
14
|
@result = doc.root.xpath("//result").first.content
|
15
15
|
job_detail_links = doc.root.xpath("//job").collect{|job| job.attributes["href"]}
|
16
16
|
@jobs = Job.build(self, job_detail_links)
|
17
|
-
|
17
|
+
|
18
18
|
pipeline_link = doc.root.xpath("//pipeline").first.attributes["href"].value
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
new_pipeline.stages << self
|
26
|
-
@pipelines << new_pipeline
|
27
|
-
end
|
28
|
-
@pipelines
|
19
|
+
|
20
|
+
pipeline = @pipelines[pipeline_link] || Pipeline.new(pipeline_link).fetch
|
21
|
+
pipeline.stages << self
|
22
|
+
|
23
|
+
@pipelines[pipeline_link] ||= pipeline
|
24
|
+
self
|
29
25
|
end
|
30
26
|
end
|
31
27
|
end
|
28
|
+
|
data/lib/go_api_client.rb
CHANGED
@@ -11,10 +11,10 @@ module GoApiClient
|
|
11
11
|
def self.runs(host)
|
12
12
|
doc = Nokogiri::XML(open("http://#{host}/go/api/pipelines/defaultPipeline/stages.xml"))
|
13
13
|
feed = GoApiClient::Atom::Feed.new(doc.root).parse!
|
14
|
-
pipelines =
|
15
|
-
feed.entries.
|
16
|
-
|
14
|
+
pipelines = {}
|
15
|
+
feed.entries.each do |entry|
|
16
|
+
Stage.new(entry, pipelines).fetch
|
17
17
|
end
|
18
|
-
pipelines
|
18
|
+
pipelines.values
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:go="http://www.thoughtworks-studios.com/ns/go">
|
2
|
+
<title><![CDATA[defaultPipeline]]></title>
|
3
|
+
<id>http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml</id>
|
4
|
+
<author>
|
5
|
+
<name>Go</name>
|
6
|
+
</author>
|
7
|
+
<updated>2012-03-07T11:15:10+05:30</updated>
|
8
|
+
<link rel="self" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml"/>
|
9
|
+
</feed>
|
@@ -1,25 +1,37 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
-
|
3
|
+
module GoApiClient
|
4
|
+
class PipelineTest < Test::Unit::TestCase
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
def setup
|
7
|
+
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml").to_return(:body => file_contents("pipelines_1.xml"))
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def test_fetch_populates_necessary_fields
|
11
|
+
link = "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"
|
12
|
+
pipeline = GoApiClient::Pipeline.new(link)
|
13
|
+
pipeline.fetch
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
assert_equal "1", pipeline.label
|
16
|
+
assert_equal ["Update README"], pipeline.commit_messages
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_return_string_delimited_list_of_authors
|
20
|
+
link = "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"
|
21
|
+
pipeline = GoApiClient::Pipeline.new(link).fetch
|
22
|
+
author_foo = Atom::Author.new(nil)
|
23
|
+
author_foo.name = 'foo'
|
24
|
+
author_foo.email = 'foo@example.com'
|
25
|
+
author_foo.uri = 'http://foo.example.com'
|
26
|
+
|
27
|
+
author_bar = Atom::Author.new(nil)
|
28
|
+
author_bar.name = 'bar'
|
29
|
+
author_bar.email = 'bar@example.com'
|
30
|
+
author_bar.uri = 'http://bar.example.com'
|
17
31
|
|
18
|
-
|
19
|
-
|
20
|
-
|
32
|
+
pipeline.stages << OpenStruct.new(:authors => [author_foo, author_bar])
|
33
|
+
assert_equal 'foo, bar', pipeline.authors
|
34
|
+
end
|
21
35
|
|
22
|
-
assert pipeline.same?(link)
|
23
|
-
assert(false == pipeline.same?("http://localhost:8153/go/api"))
|
24
36
|
end
|
25
37
|
end
|
@@ -1,32 +1,41 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
-
|
3
|
+
module GoApiClient
|
4
|
+
class StageTest < Test::Unit::TestCase
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
def setup
|
7
|
+
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml").to_return(:body => file_contents("pipelines_1.xml"))
|
8
|
+
stub_request(:get, "http://localhost:8153/go/api/stages/1.xml").to_return(:body => file_contents("stages_1.xml"))
|
9
|
+
stub_request(:get, "http://localhost:8153/go/api/stages/2.xml").to_return(:body => file_contents("stages_2.xml"))
|
10
|
+
stub_request(:get, "http://localhost:8153/go/api/jobs/1.xml").to_return(:body => file_contents("jobs_1.xml"))
|
11
|
+
stub_request(:get, "http://localhost:8153/go/api/jobs/2.xml").to_return(:body => file_contents("jobs_2.xml"))
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_stage_parsing
|
15
|
+
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages.xml"))
|
16
|
+
pipelines = GoApiClient.runs("localhost:8153")
|
17
|
+
stages = pipelines.first.stages
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
assert_equal "
|
23
|
-
assert_equal "
|
19
|
+
assert_equal 1, pipelines.count
|
20
|
+
assert_equal 2, stages.count
|
21
|
+
assert_equal "oogabooga <twgosaas@gmail.com>", pipelines.first.authors
|
22
|
+
stages.each do |stage|
|
23
|
+
assert_equal "oogabooga <twgosaas@gmail.com>", stage.authors.first.name
|
24
|
+
assert_equal "Failed", stage.result
|
25
|
+
end
|
26
|
+
assert_equal "Acceptance", stages.first.name
|
27
|
+
assert_equal "Units", stages.last.name
|
28
|
+
assert_equal ["Update README"], pipelines.first.commit_messages
|
29
|
+
|
30
|
+
assert_equal "http://localhost:8153/go/files/defaultPipeline/1/Acceptance/1/Test/cruise-output/console.log", stages.first.jobs.first.console_log_url
|
31
|
+
assert_equal "http://localhost:8153/go/files/defaultPipeline/1/Units/1/Test/cruise-output/console.log", stages.last.jobs.first.console_log_url
|
24
32
|
end
|
25
|
-
assert_equal "Acceptance", stages.first.name
|
26
|
-
assert_equal "Units", stages.last.name
|
27
|
-
assert_equal ["Update README"], pipelines.first.commit_messages
|
28
33
|
|
29
|
-
|
30
|
-
|
34
|
+
def test_empty_atom_feed_should_not_throw_up
|
35
|
+
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages_empty.xml"))
|
36
|
+
pipelines = GoApiClient.runs("localhost:8153")
|
37
|
+
|
38
|
+
assert pipelines.empty?
|
39
|
+
end
|
31
40
|
end
|
32
41
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'go_api_client'
|
3
|
-
|
3
|
+
require 'ostruct'
|
4
|
+
Dir["go_api_client/**/*.rb"].each {|f| require f}
|
4
5
|
require 'webmock/test_unit'
|
5
6
|
|
6
7
|
def file_contents(file_name)
|
7
8
|
File.read(File.expand_path("../../test/fixtures/#{file_name}", __FILE__))
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
+
module Test::Unit::Assertions
|
12
|
+
def assert_false(test, failure_message = nil)
|
13
|
+
assert(!test, failure_message || "Expected <#{test}> to be <false>.")
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nikhil Mungel
|
9
|
+
- Ketan Padegaonkar
|
10
|
+
- Shishir Das
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
|
-
date: 2012-
|
14
|
+
date: 2012-03-07 00:00:00.000000000Z
|
13
15
|
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: webmock
|
18
|
+
requirement: &70210519943860 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
24
|
+
type: :development
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: *70210519943860
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: nokogiri
|
16
|
-
requirement: &
|
29
|
+
requirement: &70210519941940 !ruby/object:Gem::Requirement
|
17
30
|
none: false
|
18
31
|
requirements:
|
19
32
|
- - ! '>='
|
@@ -21,11 +34,13 @@ dependencies:
|
|
21
34
|
version: '0'
|
22
35
|
type: :runtime
|
23
36
|
prerelease: false
|
24
|
-
version_requirements: *
|
37
|
+
version_requirements: *70210519941940
|
25
38
|
description: This gem parses atom feed generated by the Go Continuous Integration
|
26
39
|
server and provides an OO representation of the pipelines and stages.
|
27
40
|
email:
|
28
41
|
- hyfather@gmail.com
|
42
|
+
- KetanPadegaonkar@gmail.com
|
43
|
+
- shishir.das@gmail.com
|
29
44
|
executables:
|
30
45
|
- go_api_client
|
31
46
|
extensions: []
|
@@ -55,10 +70,11 @@ files:
|
|
55
70
|
- test/fixtures/stages.xml
|
56
71
|
- test/fixtures/stages_1.xml
|
57
72
|
- test/fixtures/stages_2.xml
|
73
|
+
- test/fixtures/stages_empty.xml
|
58
74
|
- test/go_api_client/pipeline_test.rb
|
59
75
|
- test/go_api_client/stage_test.rb
|
60
76
|
- test/test_helper.rb
|
61
|
-
homepage:
|
77
|
+
homepage: https://github.com/ThoughtWorksInc/go-api-client
|
62
78
|
licenses: []
|
63
79
|
post_install_message:
|
64
80
|
rdoc_options: []
|
@@ -91,6 +107,7 @@ test_files:
|
|
91
107
|
- test/fixtures/stages.xml
|
92
108
|
- test/fixtures/stages_1.xml
|
93
109
|
- test/fixtures/stages_2.xml
|
110
|
+
- test/fixtures/stages_empty.xml
|
94
111
|
- test/go_api_client/pipeline_test.rb
|
95
112
|
- test/go_api_client/stage_test.rb
|
96
113
|
- test/test_helper.rb
|