go_api_client 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,40 @@
1
+ # Compiled source #
2
+ ###################
3
+ *.com
4
+ *.class
5
+ *.dll
6
+ *.exe
7
+ *.o
8
+ *.so
9
+
10
+ # Packages #
11
+ ############
12
+ # it's better to unpack these files and commit the raw source
13
+ # git has its own built in compression methods
14
+ *.7z
15
+ *.dmg
16
+ *.gz
17
+ *.iso
18
+ *.jar
19
+ *.rar
20
+ *.tar
21
+ *.zip
22
+
23
+ # Logs and databases #
24
+ ######################
25
+ *.log
26
+ *.sql
27
+ *.sqlite
28
+
29
+ # OS generated files #
30
+ ######################
31
+ .DS_Store*
32
+ ehthumbs.db
33
+ Icon?
34
+ Thumbs.db
35
+
36
+
37
+
38
+ \#*\#
39
+ .\#*
40
+ TAGS
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in go_api_client.gemspec
4
+ gemspec
5
+
6
+ gem "webmock"
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ go_api_client (0.0.1)
5
+ nokogiri
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ addressable (2.2.7)
11
+ crack (0.3.1)
12
+ nokogiri (1.5.0)
13
+ webmock (1.8.0)
14
+ addressable (>= 2.2.7)
15
+ crack (>= 0.1.7)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ go_api_client!
22
+ webmock
data/README.textile ADDED
@@ -0,0 +1,36 @@
1
+ h2. Go API Client Gem
2
+
3
+ This gem provides API access to the go api.
4
+
5
+ h2. Installation
6
+
7
+ <pre>$ [sudo] gem install go_api_client</pre>
8
+
9
+ h2. Usage
10
+
11
+ h2. License
12
+
13
+ Go API Client Gem is MIT Licensed
14
+
15
+ The MIT License
16
+
17
+ Copyright (c) 2012 ThoughtWorks, Inc. (http://thoughtworks.com)
18
+
19
+ Permission is hereby granted, free of charge, to any person obtaining a copy
20
+ of this software and associated documentation files (the "Software"), to deal
21
+ in the Software without restriction, including without limitation the rights
22
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
23
+ copies of the Software, and to permit persons to whom the Software is
24
+ furnished to do so, subject to the following conditions:
25
+
26
+ The above copyright notice and this permission notice shall be included in
27
+ all copies or substantial portions of the Software.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
33
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
34
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
35
+ THE SOFTWARE.
36
+
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ task :test do
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/**/*test.rb']
8
+ t.verbose = true
9
+ end
10
+ end
11
+
12
+ task :default => :test
13
+
data/bin/go_api_client ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "go_api_client"
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "go_api_client/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "go_api_client"
7
+ s.version = GoApiClient::VERSION
8
+ s.authors = ["Nikhil Mungel"]
9
+ s.email = ["hyfather@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Client to parse Go CI atom feed}
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
+
14
+ s.rubyforge_project = "go_api_client"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "nokogiri"
24
+ end
@@ -0,0 +1,18 @@
1
+ module GoApiClient
2
+ module Atom
3
+ class Author
4
+ attr_accessor :name, :email, :uri
5
+ def initialize(root)
6
+ @root = root
7
+ end
8
+
9
+ def parse!
10
+ self.name = @root.xpath('xmlns:name').first.content
11
+ self.email = @root.xpath('xmlns:email').first.content rescue nil
12
+ self.uri = @root.xpath('xmlns:uri').first.content rescue nil
13
+ @root = nil
14
+ self
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ module GoApiClient
2
+ module Atom
3
+ class Entry
4
+ attr_accessor :authors, :id, :updated_at, :title, :stage_href, :pipelines
5
+
6
+ def initialize(root)
7
+ @root = root
8
+ end
9
+
10
+ def parse!
11
+ self.updated_at = @root.xpath('xmlns:updated').first.content
12
+ self.id = @root.xpath('xmlns:id').first.content
13
+ self.title = @root.xpath('xmlns:title').first.content
14
+ self.stage_href = @root.
15
+ xpath("xmlns:link[@type='application/vnd.go+xml' and @rel='alternate']").
16
+ first.
17
+ attributes["href"]
18
+
19
+ self.authors = @root.xpath('xmlns:author').collect do |author|
20
+ Author.new(author).parse!
21
+ end
22
+ @root = nil
23
+ self
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,85 @@
1
+ module GoApiClient
2
+ module Atom
3
+ class Feed
4
+ attr_accessor :updated_at
5
+ attr_accessor :next_page
6
+ attr_accessor :url
7
+ attr_accessor :entries
8
+
9
+ def initialize(root)
10
+ @root = root
11
+ end
12
+
13
+ def parse!
14
+ self.updated_at = @root.xpath('xmlns:updated').first.content
15
+ self.next_page = @root.xpath("xmlns:link[@rel='next']").first.attribute('href').value
16
+ self.url = @root.xpath("xmlns:link[@rel='self']").first.attribute('href').value
17
+
18
+ self.entries = @root.xpath("xmlns:entry").collect do |entry|
19
+ Entry.new(entry).parse!
20
+ end
21
+ self
22
+ end
23
+
24
+ def self.construct
25
+ doc = Nokogiri::XML(open("http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml"))
26
+ feed = GoApiClient::Atom::Feed.new(doc.root).parse!
27
+ pipelines = []
28
+ feed.entries.collect do |entry|
29
+ pipelines = Stage.new(entry, pipelines).fetch
30
+ end
31
+ pipelines
32
+ end
33
+ end
34
+ end
35
+
36
+
37
+ class Stage
38
+ attr_reader :authors, :details_link, :name, :result
39
+
40
+ def initialize(entry, pipelines)
41
+ @authors = entry.authors
42
+ @details_link = entry.stage_href
43
+ @pipelines = pipelines
44
+ end
45
+
46
+ def fetch
47
+ doc = Nokogiri::XML(open(self.details_link))
48
+ @name = doc.root.xpath("@name").first.value
49
+ @result = doc.root.xpath("//result").first.content
50
+
51
+ pipeline_link = doc.root.xpath("//pipeline").first.attributes["href"].value
52
+ existing_pipeline = @pipelines.find {|p| p.same?(pipeline_link)}
53
+
54
+ if existing_pipeline
55
+ existing_pipeline.stages << self
56
+ else
57
+ new_pipeline = Pipeline.new(pipeline_link).fetch
58
+ new_pipeline.stages << self
59
+ @pipelines << new_pipeline
60
+ end
61
+ @pipelines
62
+ end
63
+ end
64
+
65
+ class Pipeline
66
+ attr_reader :details_link, :id
67
+ attr_accessor :stages
68
+
69
+ def initialize(details_link)
70
+ @details_link = details_link
71
+ @stages = []
72
+ end
73
+
74
+ def fetch
75
+ doc = Nokogiri::XML(open(self.details_link))
76
+ @label = doc.root.attributes["label"].value
77
+ @id = doc.root.xpath("//id").first.content
78
+ self
79
+ end
80
+
81
+ def same?(link)
82
+ @details_link == link
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,4 @@
1
+ require 'go_api_client/atom/author'
2
+ require 'go_api_client/atom/entry'
3
+ require 'go_api_client/atom/feed'
4
+
@@ -0,0 +1,91 @@
1
+ require 'ostruct'
2
+ module GoApiClient
3
+ class StubHttpFetcher
4
+ # Careful : this will respond to any call with nil
5
+ class HashStruct < OpenStruct
6
+ def [](key)
7
+ self.headers[key]
8
+ end
9
+ end
10
+
11
+ module Response
12
+ def invoked!
13
+ @invoked = true
14
+ end
15
+
16
+ def invoked?
17
+ !!@invoked
18
+ end
19
+ end
20
+
21
+ class StringResponse
22
+ include Response
23
+ def initialize(content, code = 200, headers = {})
24
+ @content = content
25
+ @code = code.to_s
26
+ @headers = headers
27
+ end
28
+
29
+ def execute
30
+ HashStruct.new(:body => @content, :code => @code, :headers => @headers)
31
+ end
32
+
33
+ end
34
+
35
+ class ErrorResponse
36
+ include Response
37
+ def initialize(error)
38
+ @error = error
39
+ end
40
+
41
+ def execute
42
+ raise @error
43
+ end
44
+ end
45
+
46
+ def get(url)
47
+ if body = interweb[:get][url]
48
+ body.invoked!
49
+ return body.execute
50
+ else
51
+ raise "404 - Could not find #{url}. Available URLs are #{@interweb[:get].keys.inspect}"
52
+ end
53
+ end
54
+
55
+ def post(url, params = {})
56
+ if body = interweb[:post][url]
57
+ response = body.execute
58
+ if response.headers == params
59
+ body.invoked!
60
+ return response
61
+ end
62
+ end
63
+
64
+ raise "404 - Could not find a url listening to #{url.inspect} that responds to post params #{params.inspect}. Available URLs are #{@interweb[:post].keys.inspect}"
65
+ end
66
+
67
+ def invoked?(url, type = :get, params = {})
68
+ if body = interweb[type][url]
69
+ response = body.execute
70
+ if response.headers == params
71
+
72
+ body.invoked?
73
+ end
74
+ end
75
+ end
76
+
77
+ def register_content(content, url, type = :get, headers = {})
78
+ interweb[type][url] = StringResponse.new(content, 200, headers)
79
+ end
80
+
81
+ def register_error(url, type = :get, error)
82
+ interweb[type][url] = ErrorResponse.new(error)
83
+ end
84
+
85
+ def interweb
86
+ @interweb ||= {:get => {}, :post => {}}
87
+ end
88
+
89
+ end
90
+ end
91
+
@@ -0,0 +1 @@
1
+ require 'go_api_client/test/stub_http_fetcher.rb'
@@ -0,0 +1,3 @@
1
+ module GoApiClient
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,16 @@
1
+ require 'nokogiri'
2
+ require "go_api_client/version"
3
+ require "go_api_client/atom"
4
+ require "open-uri"
5
+ module GoApiClient
6
+ def self.runs(host)
7
+ doc = Nokogiri::XML(open("http://#{host}/go/api/pipelines/defaultPipeline/stages.xml"))
8
+ feed = GoApiClient::Atom::Feed.new(doc.root).parse!
9
+ pipelines = []
10
+ feed.entries.collect do |entry|
11
+ pipelines = Stage.new(entry, pipelines).fetch
12
+ end
13
+ pipelines
14
+ end
15
+
16
+ end
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <pipeline name="defaultPipeline" counter="1" label="1">
4
+ <link rel="self" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"/>
5
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1]]></id>
6
+ <scheduleTime>2012-02-23T17:16:15+05:30</scheduleTime>
7
+ <materials>
8
+ <material materialUri="http://localhost:8153/go/api/materials/1.xml" type="GitMaterial" url="git@github.com:oogabooga/zinger.git" branch="master">
9
+ <modifications>
10
+ <changeset changesetUri="http://localhost:8153/go/api/materials/1/changeset/9f77888d7a594699894a17f4d61fc9dfac3cfb74.xml">
11
+ <user><![CDATA[oogabooga <twgosaas@gmail.com>]]></user>
12
+ <checkinTime>2012-02-21T15:41:30+05:30</checkinTime>
13
+ <revision><![CDATA[9f77888d7a594699894a17f4d61fc9dfac3cfb74]]></revision>
14
+ <message><![CDATA[Update README]]></message>
15
+ <file name="README" action="modified"/>
16
+ </changeset>
17
+ </modifications>
18
+ </material>
19
+ </materials>
20
+ <stages>
21
+ <stage href="http://localhost:8153/go/api/stages/1.xml"/>
22
+ <stage href="http://localhost:8153/go/api/stages/2.xml"/>
23
+ </stages>
24
+ <approvedBy><![CDATA[changes]]></approvedBy>
25
+ </pipeline>
@@ -0,0 +1,63 @@
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-02-23T17:19:31+05:30</updated>
8
+ <link rel="self" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml"/>
9
+
10
+
11
+ <link rel="next" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml?before=6"/>
12
+
13
+
14
+
15
+ <entry>
16
+ <title><![CDATA[defaultPipeline(1) stage Acceptance(1) Failed]]></title>
17
+ <updated>2012-02-23T17:19:31+05:30</updated>
18
+ <id>http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1</id>
19
+
20
+
21
+ <author>
22
+ <name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name>
23
+ </author>
24
+
25
+
26
+ <link title="Acceptance Stage Detail" href="http://localhost:8153/go/api/stages/2.xml" rel="alternate" type="application/vnd.go+xml"/>
27
+ <link title="Acceptance Stage Detail" href="http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1" rel="alternate" type="text/html"/>
28
+
29
+ <link title="defaultPipeline Pipeline Detail" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml" rel="http://www.thoughtworks-studios.com/ns/relations/go/pipeline" type="application/vnd.go+xml"/>
30
+ <link title="defaultPipeline Pipeline Detail" href="http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1/pipeline" rel="http://www.thoughtworks-studios.com/ns/relations/go/pipeline" type="text/html"/>
31
+
32
+
33
+
34
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="stage" label="Stage" />
35
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="completed" label="Completed" />
36
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="failed" label="Failed" />
37
+ </entry>
38
+
39
+ <entry>
40
+ <title><![CDATA[defaultPipeline(1) stage Units(1) Failed]]></title>
41
+ <updated>2012-02-23T17:16:41+05:30</updated>
42
+ <id>http://localhost:8153/go/pipelines/defaultPipeline/1/Units/1</id>
43
+
44
+
45
+ <author>
46
+ <name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name>
47
+ </author>
48
+
49
+
50
+ <link title="Units Stage Detail" href="http://localhost:8153/go/api/stages/1.xml" rel="alternate" type="application/vnd.go+xml"/>
51
+ <link title="Units Stage Detail" href="http://localhost:8153/go/pipelines/defaultPipeline/1/Units/1" rel="alternate" type="text/html"/>
52
+
53
+ <link title="defaultPipeline Pipeline Detail" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml" rel="http://www.thoughtworks-studios.com/ns/relations/go/pipeline" type="application/vnd.go+xml"/>
54
+ <link title="defaultPipeline Pipeline Detail" href="http://localhost:8153/go/pipelines/defaultPipeline/1/Units/1/pipeline" rel="http://www.thoughtworks-studios.com/ns/relations/go/pipeline" type="text/html"/>
55
+
56
+
57
+
58
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="stage" label="Stage" />
59
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="completed" label="Completed" />
60
+ <category scheme="http://www.thoughtworks-studios.com/ns/categories/go" term="failed" label="Failed" />
61
+ </entry>
62
+
63
+ </feed>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <stage name="Units" counter="1">
4
+ <link rel="self" href="http://localhost:8153/go/api/stages/1.xml"/>
5
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:stage-id:defaultPipeline:1:Units:1]]></id>
6
+ <pipeline name="defaultPipeline" counter="1" label="1" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"/>
7
+ <updated>2012-02-23T17:16:41+05:30</updated>
8
+ <result>Failed</result>
9
+ <state>Completed</state>
10
+ <approvedBy><![CDATA[changes]]></approvedBy>
11
+ <jobs>
12
+ <job href="http://localhost:8153/go/api/jobs/1.xml"/>
13
+ </jobs>
14
+ </stage>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <stage name="Acceptance" counter="1">
4
+ <link rel="self" href="http://localhost:8153/go/api/stages/2.xml"/>
5
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:stage-id:defaultPipeline:1:Acceptance:1]]></id>
6
+ <pipeline name="defaultPipeline" counter="1" label="1" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"/>
7
+ <updated>2012-02-23T17:19:31+05:30</updated>
8
+ <result>Failed</result>
9
+ <state>Completed</state>
10
+ <approvedBy><![CDATA[anonymous]]></approvedBy>
11
+ <jobs>
12
+ <job href="http://localhost:8153/go/api/jobs/2.xml"/>
13
+ </jobs>
14
+ </stage>
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ class IntegrationTest < Test::Unit::TestCase
4
+
5
+ def test_end_to_end
6
+ stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages.xml"))
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
+ pipelines = GoApiClient.runs("localhost:8153")
11
+ assert_equal 1, pipelines.count
12
+ stages = pipelines.first.stages
13
+ assert_equal 2, stages.count
14
+ stages.each do |stage|
15
+ assert_equal "oogabooga <twgosaas@gmail.com>", stage.authors.first.name
16
+ assert_equal "Failed", stage.result
17
+ end
18
+ assert_equal "Acceptance", stages.first.name
19
+ assert_equal "Units", stages.last.name
20
+ end
21
+
22
+ def file_contents(file_name)
23
+ File.read(File.expand_path("../../fixtures/#{file_name}", __FILE__))
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+ require 'go_api_client/test'
3
+
4
+ require 'go_api_client'
5
+
6
+ require 'webmock/test_unit'
7
+
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: go_api_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nikhil Mungel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: &70232878359900 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70232878359900
25
+ description: This gem parses atom feed generated by the Go Continuous Integration
26
+ server and provides an OO representation of the pipelines and stages.
27
+ email:
28
+ - hyfather@gmail.com
29
+ executables:
30
+ - go_api_client
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.textile
38
+ - Rakefile
39
+ - bin/go_api_client
40
+ - go_api_client.gemspec
41
+ - lib/go_api_client.rb
42
+ - lib/go_api_client/atom.rb
43
+ - lib/go_api_client/atom/author.rb
44
+ - lib/go_api_client/atom/entry.rb
45
+ - lib/go_api_client/atom/feed.rb
46
+ - lib/go_api_client/test.rb
47
+ - lib/go_api_client/test/stub_http_fetcher.rb
48
+ - lib/go_api_client/version.rb
49
+ - test/fixtures/pipelines_1.xml
50
+ - test/fixtures/stages.xml
51
+ - test/fixtures/stages_1.xml
52
+ - test/fixtures/stages_2.xml
53
+ - test/go_api_client/integration_test.rb
54
+ - test/test_helper.rb
55
+ homepage: ''
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project: go_api_client
75
+ rubygems_version: 1.8.15
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Client to parse Go CI atom feed
79
+ test_files:
80
+ - test/fixtures/pipelines_1.xml
81
+ - test/fixtures/stages.xml
82
+ - test/fixtures/stages_1.xml
83
+ - test/fixtures/stages_2.xml
84
+ - test/go_api_client/integration_test.rb
85
+ - test/test_helper.rb