go_api_client 0.5.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +26 -0
- data/README.md +86 -0
- data/go_api_client.gemspec +11 -11
- data/lib/go_api_client/api/abstract_api.rb +12 -0
- data/lib/go_api_client/api/cctray.rb +53 -0
- data/lib/go_api_client/api/config.rb +60 -0
- data/lib/go_api_client/api/feed.rb +39 -0
- data/lib/go_api_client/api/job.rb +34 -0
- data/lib/go_api_client/api/pipeline.rb +87 -0
- data/lib/go_api_client/api/properties.rb +43 -0
- data/lib/go_api_client/api/stage.rb +45 -0
- data/lib/go_api_client/attribute_helper.rb +9 -0
- data/lib/go_api_client/client.rb +20 -0
- data/lib/go_api_client/domain/artifact.rb +16 -0
- data/lib/go_api_client/domain/author.rb +22 -0
- data/lib/go_api_client/domain/changeset.rb +13 -0
- data/lib/go_api_client/domain/config/job.rb +15 -0
- data/lib/go_api_client/domain/config/pipeline.rb +15 -0
- data/lib/go_api_client/domain/config/stage.rb +15 -0
- data/lib/go_api_client/domain/entry.rb +13 -0
- data/lib/go_api_client/domain/feed.rb +13 -0
- data/lib/go_api_client/domain/internal_cache.rb +28 -0
- data/lib/go_api_client/domain/job.rb +17 -0
- data/lib/go_api_client/domain/material.rb +14 -0
- data/lib/go_api_client/domain/pipeline.rb +27 -0
- data/lib/go_api_client/domain/project.rb +14 -0
- data/lib/go_api_client/domain/scheduled_job.rb +12 -0
- data/lib/go_api_client/domain/stage.rb +28 -0
- data/lib/go_api_client/domain/user.rb +30 -0
- data/lib/go_api_client/http_fetcher.rb +73 -48
- data/lib/go_api_client/parsers/artifact_parser.rb +17 -0
- data/lib/go_api_client/parsers/author_parser.rb +24 -0
- data/lib/go_api_client/parsers/changeset.rb +26 -0
- data/lib/go_api_client/parsers/config/job_parser.rb +48 -0
- data/lib/go_api_client/parsers/config/pipeline_parser.rb +42 -0
- data/lib/go_api_client/parsers/config/stage_parser.rb +33 -0
- data/lib/go_api_client/parsers/entry_parser.rb +27 -0
- data/lib/go_api_client/parsers/feed_parser.rb +27 -0
- data/lib/go_api_client/parsers/job_parser.rb +47 -0
- data/lib/go_api_client/parsers/material_parser.rb +29 -0
- data/lib/go_api_client/parsers/parser_helper.rb +11 -0
- data/lib/go_api_client/parsers/pipeline_parser.rb +30 -0
- data/lib/go_api_client/parsers/project_parser.rb +26 -0
- data/lib/go_api_client/parsers/scheduled_job_parser.rb +28 -0
- data/lib/go_api_client/parsers/stage_parser.rb +31 -0
- data/lib/go_api_client/parsers/user_parser.rb +12 -0
- data/lib/go_api_client/version.rb +4 -4
- data/lib/go_api_client.rb +56 -110
- data/test/go_api_client/artifact_test.rb +8 -8
- data/test/go_api_client/author_test.rb +27 -0
- data/test/go_api_client/building_test.rb +21 -19
- data/test/go_api_client/{atom/entry_test.rb → entry_test.rb} +8 -8
- data/test/go_api_client/job_test.rb +15 -14
- data/test/go_api_client/pipeline_test.rb +24 -27
- data/test/go_api_client/stage_test.rb +21 -74
- data/test/go_api_client/user_test.rb +15 -20
- metadata +108 -78
- data/.init.sh +0 -8
- data/.rbenv-gemsets +0 -1
- data/.ruby-version +0 -1
- data/.rvmrc +0 -1
- data/.yardopts +0 -6
- data/Gemfile.lock +0 -32
- data/README.textile +0 -64
- data/lib/go_api_client/artifact.rb +0 -27
- data/lib/go_api_client/atom/author.rb +0 -42
- data/lib/go_api_client/atom/entry.rb +0 -34
- data/lib/go_api_client/atom/feed.rb +0 -40
- data/lib/go_api_client/atom/feed_page.rb +0 -49
- data/lib/go_api_client/atom.rb +0 -4
- data/lib/go_api_client/commit.rb +0 -30
- data/lib/go_api_client/helpers/simple_attribute_support.rb +0 -11
- data/lib/go_api_client/helpers.rb +0 -1
- data/lib/go_api_client/job.rb +0 -68
- data/lib/go_api_client/pipeline.rb +0 -48
- data/lib/go_api_client/stage.rb +0 -57
- data/lib/go_api_client/user.rb +0 -36
- data/test/go_api_client/atom/author_test.rb +0 -27
- data/test/go_api_client/atom/feed_page_test.rb +0 -41
- data/test/go_api_client/atom/feed_test.rb +0 -39
- data/test/go_api_client/commit_test.rb +0 -38
- data/test/schedule_test.rb +0 -12
@@ -1,48 +0,0 @@
|
|
1
|
-
module GoApiClient
|
2
|
-
class Pipeline
|
3
|
-
attr_accessor :url, :commits, :label, :counter, :authors, :stages, :name, :http_fetcher, :identifier, :schedule_time, :branch_name
|
4
|
-
|
5
|
-
include GoApiClient::Helpers::SimpleAttributesSupport
|
6
|
-
|
7
|
-
def initialize(root, attributes={})
|
8
|
-
@root = root
|
9
|
-
super(attributes)
|
10
|
-
end
|
11
|
-
|
12
|
-
class << self
|
13
|
-
def from(url, attributes = {})
|
14
|
-
attributes[:http_fetcher] ||= GoApiClient::HttpFetcher.new
|
15
|
-
doc = Nokogiri::XML(attributes[:http_fetcher].get!(url))
|
16
|
-
self.new(doc.root, attributes).parse!
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def stages
|
21
|
-
@stages ||= []
|
22
|
-
end
|
23
|
-
|
24
|
-
def parse!
|
25
|
-
self.name = @root.attributes["name"].value
|
26
|
-
self.label = @root.attributes["label"].value
|
27
|
-
self.counter = @root.attributes["counter"].value.to_i
|
28
|
-
self.url = href_from(@root.xpath("./link[@rel='self']"))
|
29
|
-
self.identifier = @root.xpath("./id").first.content
|
30
|
-
self.schedule_time = Time.parse(@root.xpath('./scheduleTime').first.content).utc
|
31
|
-
self.commits = @root.xpath('./materials/material[@type = "GitMaterial"]/modifications/changeset').collect do |changeset|
|
32
|
-
Commit.new(changeset).parse!
|
33
|
-
end
|
34
|
-
|
35
|
-
@root = nil
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
def authors
|
40
|
-
@authors ||= stages.first.authors
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
def href_from(xml)
|
45
|
-
xml.first.attribute('href').value unless xml.empty?
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/lib/go_api_client/stage.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'time'
|
2
|
-
module GoApiClient
|
3
|
-
class Stage
|
4
|
-
attr_accessor :authors, :url, :name, :result, :jobs, :pipeline, :completed_at, :pipeline_cache, :http_fetcher, :counter, :identifier
|
5
|
-
|
6
|
-
include GoApiClient::Helpers::SimpleAttributesSupport
|
7
|
-
|
8
|
-
def initialize(root, attributes={})
|
9
|
-
@root = root
|
10
|
-
super(attributes)
|
11
|
-
end
|
12
|
-
|
13
|
-
class << self
|
14
|
-
def from(url, attributes = {})
|
15
|
-
attributes[:http_fetcher] ||= GoApiClient::HttpFetcher.new
|
16
|
-
doc = Nokogiri::XML(attributes[:http_fetcher].get!(url))
|
17
|
-
self.new(doc.root, attributes).parse!
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def parse!
|
22
|
-
self.name = @root.attributes['name'].value
|
23
|
-
self.counter = @root.attributes['counter'].value.to_i
|
24
|
-
self.url = href_from(@root.xpath("./link[@rel='self']"))
|
25
|
-
self.result = @root.xpath("./result").first.content
|
26
|
-
self.completed_at = Time.parse(@root.xpath("./updated").first.content).utc
|
27
|
-
self.jobs = @root.xpath("./jobs/job").collect do |job_element|
|
28
|
-
Job.from(job_element.attributes["href"].value, :http_fetcher => http_fetcher)
|
29
|
-
end
|
30
|
-
self.identifier = @root.xpath('./id').first.content
|
31
|
-
|
32
|
-
pipeline_link = @root.xpath("./pipeline").first.attributes["href"].value
|
33
|
-
|
34
|
-
pipeline = @pipeline_cache[pipeline_link] || Pipeline.from(pipeline_link, :http_fetcher => http_fetcher)
|
35
|
-
pipeline.stages << self
|
36
|
-
|
37
|
-
self.pipeline_cache[pipeline_link] ||= pipeline
|
38
|
-
@root = nil
|
39
|
-
self
|
40
|
-
end
|
41
|
-
|
42
|
-
def failed?
|
43
|
-
"Failed" == @result
|
44
|
-
end
|
45
|
-
|
46
|
-
def passed?
|
47
|
-
!failed?
|
48
|
-
end
|
49
|
-
|
50
|
-
private
|
51
|
-
def href_from(xml)
|
52
|
-
xml.first.attribute('href').value unless xml.empty?
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
data/lib/go_api_client/user.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
module GoApiClient
|
2
|
-
class User
|
3
|
-
|
4
|
-
attr_accessor :name, :email
|
5
|
-
|
6
|
-
def initialize(name, email)
|
7
|
-
@name = name
|
8
|
-
@email = email
|
9
|
-
end
|
10
|
-
|
11
|
-
def ==(other)
|
12
|
-
other && self.class.equal?(other.class) &&
|
13
|
-
name == other.name &&
|
14
|
-
email == other.email
|
15
|
-
end
|
16
|
-
|
17
|
-
def hash
|
18
|
-
self.class.hash ^ name.hash ^ email.hash
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_s
|
22
|
-
"#{name} <#{email}>"
|
23
|
-
end
|
24
|
-
|
25
|
-
def inspect
|
26
|
-
"User(#{to_s})"
|
27
|
-
end
|
28
|
-
|
29
|
-
class << self
|
30
|
-
def parse(str)
|
31
|
-
_, name, email = *str.match(/(.*) <(.+?)>/)
|
32
|
-
self.new(name.strip, email.strip)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module GoApiClient
|
4
|
-
module Atom
|
5
|
-
class AuthorTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
test "should be able to parse author's info" do
|
8
|
-
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name><uri>http://oogabooga.example.com<uri></author>})
|
9
|
-
author = Author.new(doc.root).parse!
|
10
|
-
assert_equal Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com', :uri => 'http://oogabooga.example.com'), author
|
11
|
-
end
|
12
|
-
|
13
|
-
test "should be able to parse author xml with no email and uri" do
|
14
|
-
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga]]></name></author>})
|
15
|
-
author = Author.new(doc.root).parse!
|
16
|
-
assert_equal Author.new(nil, :name => 'oogabooga'), author
|
17
|
-
end
|
18
|
-
|
19
|
-
test "should be able to parse author xml with email specified in the name tag" do
|
20
|
-
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name></author>})
|
21
|
-
author = Author.new(doc.root).parse!
|
22
|
-
assert_equal Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com'), author
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module GoApiClient
|
4
|
-
module Atom
|
5
|
-
class FeedPageTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
setup do
|
8
|
-
doc = Nokogiri::XML(file_contents("pagination/stages.xml"))
|
9
|
-
@feed_page = FeedPage.new(doc.root).parse!
|
10
|
-
end
|
11
|
-
|
12
|
-
test "should be able to parse one page of the paginated Go atom feed" do
|
13
|
-
assert_equal 25, @feed_page.entries.count
|
14
|
-
assert_equal 'https://go-server.example.com/go/api/pipelines/tlb/stages.xml', @feed_page.url
|
15
|
-
assert_equal 'https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7959831', @feed_page.next_page
|
16
|
-
assert_equal Time.parse('2012-04-17 10:56:53 UTC'), @feed_page.updated_at
|
17
|
-
end
|
18
|
-
|
19
|
-
test "should answer if an entry id is present in the feed page" do
|
20
|
-
assert @feed_page.contains_entry?(@feed_page.entries[5].id)
|
21
|
-
assert_false @feed_page.contains_entry?("foo")
|
22
|
-
end
|
23
|
-
|
24
|
-
test "should answer if an entry object is present in the feed page" do
|
25
|
-
assert @feed_page.contains_entry?(@feed_page.entries[5])
|
26
|
-
assert_false @feed_page.contains_entry?(Entry.new(nil))
|
27
|
-
end
|
28
|
-
|
29
|
-
test "should return entries after a particular entry (top entries in feed)" do
|
30
|
-
entry = @feed_page.entries[5]
|
31
|
-
|
32
|
-
assert_equal @feed_page.entries_after(entry.id), @feed_page.entries_after(entry)
|
33
|
-
|
34
|
-
assert_equal 5, @feed_page.entries_after(entry.id).count
|
35
|
-
assert_equal 5, @feed_page.entries_after(entry).count
|
36
|
-
|
37
|
-
assert_false @feed_page.entries_after(entry).include?(entry)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module GoApiClient
|
4
|
-
module Atom
|
5
|
-
class FeedTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml").to_return(:body => file_contents("pagination/stages.xml"))
|
8
|
-
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7959831").to_return(:body => file_contents("pagination/stages_before_7959831.xml"))
|
9
|
-
end
|
10
|
-
|
11
|
-
test "should stop at last seen atom entry id" do
|
12
|
-
feed = GoApiClient::Atom::Feed.new('https://go-server.example.com/go/api/pipelines/tlb/stages.xml', 'https://go-server.example.com/go/pipelines/tlb/175/ant_count_tlb/1').fetch!
|
13
|
-
assert_equal (25+4), feed.entries.count
|
14
|
-
end
|
15
|
-
|
16
|
-
test "should stop at first page if entry id not specified" do
|
17
|
-
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7916973").to_return(:body => file_contents("pagination/stages_before_7916973.xml"))
|
18
|
-
|
19
|
-
feed = GoApiClient::Atom::Feed.new('https://go-server.example.com/go/api/pipelines/tlb/stages.xml').fetch!
|
20
|
-
assert_equal 25*3, feed.entries.count
|
21
|
-
end
|
22
|
-
|
23
|
-
test "should fetch all the pipelines" do
|
24
|
-
stub_request(:get,"https://localhost:8153/go/api/pipelines.xml" ).to_return(:body => file_contents("pipelines.xml"))
|
25
|
-
stub_request(:get,"http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml" ).to_return(:body => file_contents("default_pipeline.xml"))
|
26
|
-
stub_request(:get,"http://localhost:8153/go/api/pipelines/integrationPipeline/stages.xml" ).to_return(:body => file_contents("integration_pipeline.xml"))
|
27
|
-
|
28
|
-
feeds = GoApiClient::Atom::Feed.new("https://localhost:8153/go/api/pipelines.xml", nil).fetch_all!
|
29
|
-
assert_equal 2, feeds.count
|
30
|
-
assert_equal "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml", feeds.keys[0]
|
31
|
-
assert_equal "http://localhost:8153/go/api/pipelines/integrationPipeline/stages.xml", feeds.keys[1]
|
32
|
-
|
33
|
-
assert_equal 1, feeds.values[0].entries.count
|
34
|
-
assert_equal 1, feeds.values[1].entries.count
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module GoApiClient
|
4
|
-
class CommitTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
test "should parse a changeset xml node" do
|
7
|
-
doc = Nokogiri::XML.parse %q{<changeset changesetUri="http://localhost:8153/go/api/materials/1/changeset/9f77888d7a594699894a17f4d61fc9dfac3cfb74.xml">
|
8
|
-
<bar>
|
9
|
-
<revision>jhgasdfjkhgads</revision>
|
10
|
-
<message>some message</message>
|
11
|
-
<checkinTime>unparsable cruft</checkinTime>
|
12
|
-
<user>unparsable cruft</user>
|
13
|
-
</bar>
|
14
|
-
|
15
|
-
<user><![CDATA[oogabooga <twgosaas@gmail.com>]]></user>
|
16
|
-
<checkinTime>2012-02-21T15:41:30+05:30</checkinTime>
|
17
|
-
<revision><![CDATA[9f77888d7a594699894a17f4d61fc9dfac3cfb74]]></revision>
|
18
|
-
<message><![CDATA[Update README]]></message>
|
19
|
-
<file name="README" action="modified"/>
|
20
|
-
<foo>
|
21
|
-
<revision>jhgasdfjkhgads</revision>
|
22
|
-
<message>some message</message>
|
23
|
-
<checkinTime>unparsable cruft</checkinTime>
|
24
|
-
<user>unparsable cruft</user>
|
25
|
-
</foo>
|
26
|
-
</changeset>
|
27
|
-
}
|
28
|
-
|
29
|
-
commit = Commit.new(doc.root).parse!
|
30
|
-
|
31
|
-
assert_equal '9f77888d7a594699894a17f4d61fc9dfac3cfb74', commit.revision
|
32
|
-
assert_equal 'Update README', commit.message
|
33
|
-
assert_equal Time.parse("2012-02-21 10:11:30 UTC"), commit.time
|
34
|
-
assert_equal User.parse("oogabooga <twgosaas@gmail.com>"), commit.user
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
data/test/schedule_test.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module GoApiClient
|
4
|
-
class ScheduleTest < Test::Unit::TestCase
|
5
|
-
test "should schedule a build specified" do
|
6
|
-
stub_request(:post, "http://go-server.2.project:8153/go/api/pipelines/defaultPipeline/schedule")
|
7
|
-
GoApiClient.schedule_pipeline(:host => 'go-server.2.project')
|
8
|
-
|
9
|
-
assert_requested(:post, "http://go-server.2.project:8153/go/api/pipelines/defaultPipeline/schedule", :body => '')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|