go_api_client 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -6,3 +6,6 @@ pkg/*
6
6
  /vendor/ruby
7
7
  .idea/*
8
8
  TAGS
9
+ .yardoc
10
+ doc
11
+ /bin/
@@ -0,0 +1,6 @@
1
+ --no-private
2
+ --protected
3
+ --markup="textile" lib/**/*.rb
4
+ --main README.textile
5
+ --hide-tag todo
6
+ -
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- go_api_client (0.3.0)
4
+ go_api_client (0.4.0)
5
5
  nokogiri
6
6
 
7
7
  GEM
@@ -1,6 +1,6 @@
1
1
  h2. Go API Client Gem
2
2
 
3
- This gem provides API access to the go api.
3
+ This gem provides access to the "ThoughtWorks Studios Go":http://www.thoughtworks-studios.com/go-continuous-delivery API, it is capable of parsing out the atom feed and generate an object graph with all the pipelines/stages/jobs and committer information.
4
4
 
5
5
  h2. Installation
6
6
 
@@ -8,6 +8,34 @@ h2. Installation
8
8
 
9
9
  h2. Usage
10
10
 
11
+ See "GoApiClient":http://rubydoc.info/github/ThoughtWorksInc/go-api-client/GoApiClient for supported options and more details.
12
+
13
+ <pre>
14
+ require 'go_api_client'
15
+
16
+ # check if the server is building
17
+ GoApiClient.build_in_progress?(:host => 'go.example.com')
18
+
19
+ # check if the build has finished
20
+ GoApiClient.build_finished?(:host => 'go.example.com')
21
+
22
+ # schedule a pipeline
23
+ GoApiClient.schedule_pipeline(:host => 'go.example.com', :pipeline_name => 'MyProject')
24
+
25
+ # fetch a list of all pipelines
26
+ latest_atom_entry_id = nil
27
+ while true
28
+ last_run = GoApiClient.runs(:host => 'go.example.com', :pipeline_name => 'MyProject', :latest_atom_entry_id => latest_atom_entry_id)
29
+ latest_atom_entry_id = last_run.latest_atom_entry_id # => the last stage that was seen by the api client, keep this for further calls to #runs
30
+
31
+ pipelines = last_run.pipelines
32
+ last_pipeline = pipelines.last
33
+ puts "Finished running stage #{last_pipeline.stages.last.name} from pipeline #{last_pipeline.name}."
34
+ puts "The last commit(#{last_pipeline.commits.last.revision}) was checked in by #{last_pipeline.commits.last.user}"
35
+ sleep 10
36
+ end
37
+ </pre>
38
+
11
39
  h2. License
12
40
 
13
41
  Go API Client Gem is MIT Licensed
@@ -10,51 +10,91 @@ require 'go_api_client/atom'
10
10
  require 'go_api_client/pipeline'
11
11
  require 'go_api_client/stage'
12
12
  require 'go_api_client/job'
13
+ require 'go_api_client/artifact'
13
14
  require 'go_api_client/commit'
14
15
  require 'go_api_client/user'
15
16
 
16
-
17
17
  module GoApiClient
18
- def self.runs(options)
19
- options = ({:protocol => 'http', :port => 8153, :username => nil, :password => nil, :latest_atom_entry_id => nil, :pipeline_name => 'defaultPipeline'}).merge(options)
20
-
21
- http_fetcher = GoApiClient::HttpFetcher.new(:username => options[:username], :password => options[:password])
22
18
 
23
- feed_url = "#{options[:protocol]}://#{options[:host]}:#{options[:port]}/go/api/pipelines/#{options[:pipeline_name]}/stages.xml"
19
+ # A wrapper that contains the last run information of scraping the go atom feed
20
+ class LastRun
21
+ # A list of pipelines
22
+ # @return [Array<Pipeline>]
23
+ # @see GoApiClient.runs
24
+ attr_reader :pipelines
24
25
 
25
- feed = GoApiClient::Atom::Feed.new(feed_url, options[:latest_atom_entry_id])
26
- feed.fetch!(http_fetcher)
26
+ # The most recent atom entry when the feed was last fetched
27
+ attr_reader :latest_atom_entry_id
27
28
 
28
- pipelines = {}
29
- stages = feed.entries.collect do |entry|
30
- Stage.from(entry.stage_href, :authors => entry.authors, :pipeline_cache => pipelines, :http_fetcher => http_fetcher)
29
+ def initialize(pipelines, latest_atom_entry_id)
30
+ @pipelines = pipelines
31
+ @latest_atom_entry_id = latest_atom_entry_id
31
32
  end
33
+ end
34
+
35
+ class << self
36
+ # Connects to the a go server via the "Atom Feed API":http://www.thoughtworks-studios.com/docs/go/current/help/Feeds_API.html
37
+ # and fetches entire the pipeline history for that pipeline. Since this this is a wrapper around an atom feed,
38
+ # it is important to remember the last atom feed entry that was seen in order to prevent crawling the entire atom feed
39
+ # over and over again and slow the process down.
40
+ #
41
+ # @return [LastRun] an object containing a list of all pipelines ordered by their counter along with the last stage that ran in the pipeline
42
+ # @param [Hash] options the connection options
43
+ # @option options [String] :host ("localhost") Host to connect to.
44
+ # @option options [Ingeger] :port (8153) Port to connect to.
45
+ # @option options [Boolean] :ssl (false) If connection should be made over ssl.
46
+ # @option options [String] :username (nil) The username to be used if server or the pipeline requires authorization.
47
+ # @option options [String] :password (nil) The password to be used if server or the pipeline requires authorization.
48
+ # @option options [String] :pipeline_name ("defaultPipeline") The name of the pipeline that should be fetched.
49
+ # @option options [String] :latest_atom_entry_id (nil) The id of the last atom feed entry
50
+ def runs(options={})
51
+ options = ({:ssl => false, :host => 'localhost', :port => 8153, :username => nil, :password => nil, :latest_atom_entry_id => nil, :pipeline_name => 'defaultPipeline'}).merge(options)
52
+
53
+ http_fetcher = GoApiClient::HttpFetcher.new(:username => options[:username], :password => options[:password])
54
+
55
+ feed_url = "#{options[:ssl] ? 'https' : 'http'}://#{options[:host]}:#{options[:port]}/go/api/pipelines/#{options[:pipeline_name]}/stages.xml"
56
+
57
+ feed = GoApiClient::Atom::Feed.new(feed_url, options[:latest_atom_entry_id])
58
+ feed.fetch!(http_fetcher)
59
+
60
+ pipelines = {}
61
+ stages = feed.entries.collect do |entry|
62
+ Stage.from(entry.stage_href, :authors => entry.authors, :pipeline_cache => pipelines, :http_fetcher => http_fetcher)
63
+ end
32
64
 
33
- pipelines.values.each do |p|
34
- p.stages = p.stages.sort_by {|s| s.completed_at }
65
+ pipelines.values.each do |p|
66
+ p.stages = p.stages.sort_by {|s| s.completed_at }
67
+ end
68
+
69
+ pipelines = pipelines.values.sort_by {|p| p.counter}
70
+ latest_atom_entry_id = stages.empty? ? options[:latest_atom_entry_id] : feed.entries.first.id
71
+ return LastRun.new(pipelines, latest_atom_entry_id)
35
72
  end
36
73
 
37
- return {
38
- :pipelines => pipelines.values.sort_by {|p| p.counter},
39
- :latest_atom_entry_id => stages.empty? ? options[:latest_atom_entry_id] : feed.entries.first.id
40
- }
41
- end
74
+ # Answers if a build is in progress. For the list of supported connection options see {GoApiClient.runs #runs}
75
+ # @see .build_finished?
76
+ def build_in_progress?(options={})
77
+ raise ArgumentError("Hostname is mandatory") unless options[:host]
78
+ options = ({:ssl => false, :port => 8153, :username => nil, :password => nil, :pipeline_name => 'defaultPipeline'}).merge(options)
79
+ http_fetcher = GoApiClient::HttpFetcher.new(:username => options[:username], :password => options[:password])
80
+ url = "#{options[:ssl] ? 'https' : 'http'}://#{options[:host]}:#{options[:port]}/go/cctray.xml"
81
+ doc = Nokogiri::XML(http_fetcher.get_response_body(url))
82
+ doc.css("Project[activity='Building'][name^='#{options[:pipeline_name]} ::']").count > 0
83
+ end
42
84
 
43
- def self.build_in_progress?(options)
44
- raise ArgumentError("Hostname is mandatory") unless options[:host]
45
- options = ({:protocol => 'http', :port => 8153, :username => nil, :password => nil}).merge(options)
46
- http_fetcher = GoApiClient::HttpFetcher.new(:username => options[:username], :password => options[:password])
47
- url = "#{options[:protocol]}://#{options[:host]}:#{options[:port]}/go/cctray.xml"
48
- doc = Nokogiri::XML(http_fetcher.get_response_body(url))
49
- doc.xpath("//Project[contains(@activity, 'Building')]").count > 0
50
- end
85
+ # Answers if a build is in completed. For the list of supported connection options see {GoApiClient.runs #runs}
86
+ # @see .build_in_progress?
87
+ def build_finished?(options)
88
+ !build_in_progress?(options)
89
+ end
51
90
 
52
- def self.build_finished?(options)
53
- !build_in_progress?(options)
54
- end
91
+ # Schedule a particular pipeline with the latest available materials.
92
+ def schedule_pipeline(options)
93
+ raise ArgumentError("Hostname is mandatory") unless options[:host]
94
+ options = ({:ssl => false, :port => 8153, :username => nil, :password => nil, :pipeline_name => 'defaultPipeline'}).merge(options)
55
95
 
56
- def self.schedule_pipeline(host)
57
- uri = URI("http://#{host}:8153/go/api/pipelines/defaultPipeline/schedule")
58
- Net::HTTP.post_form(uri, {})
96
+ uri = "#{options[:ssl] ? 'https' : 'http'}://#{options[:host]}:#{options[:port]}/go/api/pipelines/#{options[:pipeline_name]}/schedule"
97
+ GoApiClient::HttpFetcher.new.post(uri)
98
+ end
59
99
  end
60
100
  end
@@ -0,0 +1,27 @@
1
+ module GoApiClient
2
+ class Artifact
3
+ attr_accessor :base_uri, :src, :dest, :artifact_type
4
+ include GoApiClient::Helpers::SimpleAttributesSupport
5
+
6
+ def initialize(attributes)
7
+ super(attributes)
8
+ end
9
+
10
+ def as_zip_file_url
11
+ "#{File.join(base_uri, src)}.zip"
12
+ end
13
+
14
+ class << self
15
+ def from(artifact_base_uri, artifact_element)
16
+ attributes = {
17
+ :base_uri => artifact_base_uri,
18
+ :src => artifact_element.attributes['src'].value,
19
+ :dest => artifact_element.attributes['dest'].value,
20
+ :artifact_type => artifact_element.attributes['type'].value,
21
+ }
22
+
23
+ self.new(attributes)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -20,7 +20,7 @@ module GoApiClient
20
20
 
21
21
  http = Net::HTTP.new(uri.host, uri.port)
22
22
  http.use_ssl = uri.scheme == 'https'
23
-
23
+
24
24
  res = http.start do |http|
25
25
  req = Net::HTTP::Get.new(uri.request_uri)
26
26
  req.basic_auth(username, password) if username || password
@@ -34,6 +34,35 @@ module GoApiClient
34
34
  res.error!
35
35
  end
36
36
 
37
+ def post(url, options={})
38
+ uri = URI.parse(url)
39
+
40
+ password = options[:password] || uri.password || @password
41
+ username = options[:username] || uri.user || @username
42
+ params = options[:params] || {}
43
+ headers = options[:headers] || {}
44
+
45
+ http = Net::HTTP.new(uri.host, uri.port)
46
+ http.use_ssl = uri.scheme == 'https'
47
+
48
+ req = Net::HTTP::Post.new(uri.request_uri)
49
+
50
+ headers.each do |header_name, value|
51
+ req[header_name] = value
52
+ end
53
+
54
+ req.basic_auth(username, password) if username || password
55
+
56
+ req.set_form_data(params)
57
+ res = http.request(req)
58
+
59
+ case res
60
+ when Net::HTTPSuccess
61
+ return res
62
+ end
63
+ res.error!
64
+ end
65
+
37
66
  def get_response_body(url, options={})
38
67
  get(url, options).body
39
68
  end
@@ -1,6 +1,6 @@
1
1
  module GoApiClient
2
2
  class Job
3
- attr_accessor :artifacts_uri, :console_log_url, :url, :identifier, :http_fetcher, :name
3
+ attr_accessor :artifacts_uri, :console_log_url, :url, :identifier, :http_fetcher, :name, :artifacts
4
4
 
5
5
  PROPERTIES = {
6
6
  :duration => :cruise_job_duration,
@@ -35,6 +35,10 @@ module GoApiClient
35
35
  self.url = href_from(@root.xpath("./link[@rel='self']"))
36
36
  self.identifier = @root.xpath('./id').first.content
37
37
  self.name = @root.attributes['name'].value
38
+ self.artifacts = @root.xpath("./artifacts/artifact").collect do |artifact_element|
39
+ Artifact.from(self.artifacts_uri, artifact_element)
40
+ end
41
+
38
42
  PROPERTIES.each do |variable, property_name|
39
43
  property_value = @root.xpath("./properties/property[@name='#{property_name}']").first.content rescue nil
40
44
 
@@ -1,7 +1,7 @@
1
1
  module GoApiClient
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 3
4
+ MINOR = 4
5
5
  PATCH = 0
6
6
  RELEASE = ENV['GO_PIPELINE_COUNTER']
7
7
  VERSION = [MAJOR, MINOR, PATCH, RELEASE].compact.join('.')
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <job name="rpm">
4
+ <link rel="self" href="https://ci.snap-ci.com/go/api/jobs/10360.xml"/>
5
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:Go-SaaS-Rails:898:Dist:1:rpm]]></id>
6
+ <pipeline name="Go-SaaS-Rails" counter="898" label="898"/>
7
+ <stage name="Dist" counter="1" href="https://ci.snap-ci.com/go/api/stages/10034.xml"/>
8
+ <result>Passed</result>
9
+ <state>Completed</state>
10
+ <properties>
11
+ <property name="cruise_agent"><![CDATA[ci-server]]></property>
12
+ <property name="cruise_job_duration"><![CDATA[402]]></property>
13
+ <property name="cruise_job_id"><![CDATA[10360]]></property>
14
+ <property name="cruise_job_result"><![CDATA[Passed]]></property>
15
+ <property name="cruise_pipeline_counter"><![CDATA[898]]></property>
16
+ <property name="cruise_pipeline_label"><![CDATA[898]]></property>
17
+ <property name="cruise_stage_counter"><![CDATA[1]]></property>
18
+ <property name="cruise_timestamp_01_scheduled"><![CDATA[2013-03-15T11:28:34Z]]></property>
19
+ <property name="cruise_timestamp_02_assigned"><![CDATA[2013-03-15T11:28:36Z]]></property>
20
+ <property name="cruise_timestamp_03_preparing"><![CDATA[2013-03-15T11:28:46Z]]></property>
21
+ <property name="cruise_timestamp_04_building"><![CDATA[2013-03-15T11:28:50Z]]></property>
22
+ <property name="cruise_timestamp_05_completing"><![CDATA[2013-03-15T11:35:29Z]]></property>
23
+ <property name="cruise_timestamp_06_completed"><![CDATA[2013-03-15T11:35:32Z]]></property>
24
+ </properties>
25
+ <agent uuid="fdcb5eaf-5a6e-428b-9907-cdcd7a149438"/>
26
+ <artifacts baseUri="https://ci.snap-ci.com/go/files/Go-SaaS-Rails/898/Dist/1/rpm" pathFromArtifactRoot="pipelines/Go-SaaS-Rails/898/Dist/1/rpm">
27
+ <artifact src="tmp" dest="" type="file"/>
28
+ <artifact src="log" dest="" type="directory"/>
29
+ </artifacts>
30
+ <resources/>
31
+ <environmentvariables>
32
+ <variable name="PATH"><![CDATA[/opt/local/ruby/1.9.2-p290/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin]]></variable>
33
+ <variable name="QMAKE"><![CDATA[/usr/bin/qmake-qt47]]></variable>
34
+ <variable name="COVERAGE"><![CDATA[true]]></variable>
35
+ </environmentvariables>
36
+ </job>
@@ -0,0 +1,15 @@
1
+ require "test_helper"
2
+
3
+ module GoApiClient
4
+ class ArtifactTest < Test::Unit::TestCase
5
+ test "should construct the artifacts from the job xml" do
6
+ stub_request(:get, "http://localhost:8153/go/api/jobs/3.xml").to_return(:body => file_contents("jobs_3.xml"))
7
+
8
+ link = "http://localhost:8153/go/api/jobs/3.xml"
9
+ job = GoApiClient::Job.from(link)
10
+ assert_equal 2, job.artifacts.count
11
+ assert_equal "https://ci.snap-ci.com/go/files/Go-SaaS-Rails/898/Dist/1/rpm/tmp.zip", job.artifacts.first.as_zip_file_url
12
+ assert_equal "https://ci.snap-ci.com/go/files/Go-SaaS-Rails/898/Dist/1/rpm/log.zip", job.artifacts.last.as_zip_file_url
13
+ end
14
+ end
15
+ end
@@ -3,30 +3,38 @@ require "test_helper"
3
3
  module GoApiClient
4
4
  class BuildingTest < Test::Unit::TestCase
5
5
 
6
- test "should report that Go is building if atleast 1 project is building" do
6
+ test "should report that Go is building if atleast 1 stage in specified pipeline is building" do
7
7
  feed = %Q{
8
8
  <?xml version="1.0" encoding="utf-8"?>
9
9
  <Projects>
10
10
  <Project name="defaultPipeline :: RailsTests" activity="Building" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
11
- <Project name="defaultPipeline :: RailsTests :: Test" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/tab/build/detail/defaultPipeline/5/RailsTests/1/Test" />
11
+ <Project name="defaultPipeline :: SmokeTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
12
+
13
+ <Project name="anotherPipeline :: RailsTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
14
+ <Project name="anotherPipeline :: SmokeTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
12
15
  </Projects>
13
16
  }
14
17
  stub_request(:get, "http://go-server.2.project:8153/go/cctray.xml").
15
18
  to_return(:body => feed)
16
- assert GoApiClient.build_in_progress?(:host => 'go-server.2.project')
19
+ assert GoApiClient.build_in_progress?(:host => 'go-server.2.project', :pipeline_name => 'defaultPipeline')
20
+ assert_false GoApiClient.build_in_progress?(:host => 'go-server.2.project', :pipeline_name => 'anotherPipeline')
17
21
  end
18
22
 
19
- test "should report that Go is sleeping if all projects are sleeping" do
23
+ test "should report that Go is sleeping if all stages in specified pipeline are sleeping" do
20
24
  feed = %Q{
21
25
  <?xml version="1.0" encoding="utf-8"?>
22
26
  <Projects>
23
27
  <Project name="defaultPipeline :: RailsTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
24
- <Project name="defaultPipeline :: RailsTests :: Test" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/tab/build/detail/defaultPipeline/5/RailsTests/1/Test" />
28
+ <Project name="defaultPipeline :: SmokeTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
29
+
30
+ <Project name="anotherPipeline :: RailsTests" activity="Building" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
31
+ <Project name="anotherPipeline :: SmokeTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
25
32
  </Projects>
26
33
  }
27
34
  stub_request(:get, "http://go-server.2.project:8153/go/cctray.xml").
28
35
  to_return(:body => feed)
29
- assert_false GoApiClient.build_in_progress?(:host => 'go-server.2.project')
36
+ assert GoApiClient.build_finished?(:host => 'go-server.2.project', :pipeline_name => 'defaultPipeline')
37
+ assert_false GoApiClient.build_finished?(:host => 'go-server.2.project', :pipeline_name => 'anotherPipeline')
30
38
  end
31
39
 
32
40
  test "should handle empty feeds" do
@@ -34,5 +42,6 @@ module GoApiClient
34
42
  to_return(:body => nil)
35
43
  assert_false GoApiClient.build_in_progress?(:host => 'go-server.2.project')
36
44
  end
45
+
37
46
  end
38
47
  end
@@ -13,9 +13,9 @@ module GoApiClient
13
13
 
14
14
  runs = GoApiClient.runs(:host => 'go-server.2.project')
15
15
 
16
- assert_equal runs[:pipelines].collect(&:counter).sort, runs[:pipelines].collect(&:counter)
16
+ assert_equal runs.pipelines.collect(&:counter).sort, runs.pipelines.collect(&:counter)
17
17
 
18
- runs[:pipelines].each do |pipeline|
18
+ runs.pipelines.each do |pipeline|
19
19
  assert_equal pipeline.stages.collect(&:completed_at).sort, pipeline.stages.collect(&:completed_at)
20
20
  end
21
21
  end
@@ -29,8 +29,8 @@ module GoApiClient
29
29
 
30
30
  stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages.xml"))
31
31
  runs = GoApiClient.runs(:host => "localhost", :port => 8153)
32
- pipelines = runs[:pipelines]
33
- assert_equal "http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1", runs[:latest_atom_entry_id]
32
+ pipelines = runs.pipelines
33
+ assert_equal "http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1", runs.latest_atom_entry_id
34
34
  stages = pipelines.first.stages
35
35
 
36
36
  assert_equal 1, pipelines.count
@@ -38,7 +38,7 @@ module GoApiClient
38
38
 
39
39
  assert_equal "http://localhost:8153/go/api/stages/1.xml", stages.first.url
40
40
  assert_equal "http://localhost:8153/go/api/stages/2.xml", stages.last.url
41
-
41
+
42
42
  assert_equal 1, stages.first.counter
43
43
  assert_equal 1, stages.last.counter
44
44
 
@@ -69,7 +69,7 @@ module GoApiClient
69
69
  stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages_empty.xml"))
70
70
  runs = GoApiClient.runs(:host => "localhost", :port => 8153)
71
71
 
72
- assert runs[:pipelines].empty?
72
+ assert runs.pipelines.empty?
73
73
  end
74
74
  end
75
75
  end
@@ -0,0 +1,12 @@
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-02-16 00:00:00.000000000 Z
14
+ date: 2013-03-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: webmock
@@ -105,12 +105,14 @@ extra_rdoc_files: []
105
105
  files:
106
106
  - .gitignore
107
107
  - .rvmrc
108
+ - .yardopts
108
109
  - Gemfile
109
110
  - Gemfile.lock
110
111
  - README.textile
111
112
  - Rakefile
112
113
  - go_api_client.gemspec
113
114
  - lib/go_api_client.rb
115
+ - lib/go_api_client/artifact.rb
114
116
  - lib/go_api_client/atom.rb
115
117
  - lib/go_api_client/atom/author.rb
116
118
  - lib/go_api_client/atom/entry.rb
@@ -141,6 +143,7 @@ files:
141
143
  - test/fixtures/job_2_console.log.txt
142
144
  - test/fixtures/jobs_1.xml
143
145
  - test/fixtures/jobs_2.xml
146
+ - test/fixtures/jobs_3.xml
144
147
  - test/fixtures/jobs_with_no_properties.xml
145
148
  - test/fixtures/ordering/go/api/jobs/1.xml
146
149
  - test/fixtures/ordering/go/api/jobs/10.xml
@@ -176,6 +179,7 @@ files:
176
179
  - test/fixtures/stages_1.xml
177
180
  - test/fixtures/stages_2.xml
178
181
  - test/fixtures/stages_empty.xml
182
+ - test/go_api_client/artifact_test.rb
179
183
  - test/go_api_client/atom/author_test.rb
180
184
  - test/go_api_client/atom/entry_test.rb
181
185
  - test/go_api_client/atom/feed_page_test.rb
@@ -186,6 +190,7 @@ files:
186
190
  - test/go_api_client/pipeline_test.rb
187
191
  - test/go_api_client/stage_test.rb
188
192
  - test/go_api_client/user_test.rb
193
+ - test/schedule_test.rb
189
194
  - test/test_helper.rb
190
195
  homepage: https://github.com/ThoughtWorksInc/go-api-client
191
196
  licenses: []
@@ -199,12 +204,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
204
  - - ! '>='
200
205
  - !ruby/object:Gem::Version
201
206
  version: '0'
207
+ segments:
208
+ - 0
209
+ hash: 4219299069108051820
202
210
  required_rubygems_version: !ruby/object:Gem::Requirement
203
211
  none: false
204
212
  requirements:
205
213
  - - ! '>='
206
214
  - !ruby/object:Gem::Version
207
215
  version: '0'
216
+ segments:
217
+ - 0
218
+ hash: 4219299069108051820
208
219
  requirements: []
209
220
  rubyforge_project: go_api_client
210
221
  rubygems_version: 1.8.25
@@ -228,6 +239,7 @@ test_files:
228
239
  - test/fixtures/job_2_console.log.txt
229
240
  - test/fixtures/jobs_1.xml
230
241
  - test/fixtures/jobs_2.xml
242
+ - test/fixtures/jobs_3.xml
231
243
  - test/fixtures/jobs_with_no_properties.xml
232
244
  - test/fixtures/ordering/go/api/jobs/1.xml
233
245
  - test/fixtures/ordering/go/api/jobs/10.xml
@@ -263,6 +275,7 @@ test_files:
263
275
  - test/fixtures/stages_1.xml
264
276
  - test/fixtures/stages_2.xml
265
277
  - test/fixtures/stages_empty.xml
278
+ - test/go_api_client/artifact_test.rb
266
279
  - test/go_api_client/atom/author_test.rb
267
280
  - test/go_api_client/atom/entry_test.rb
268
281
  - test/go_api_client/atom/feed_page_test.rb
@@ -273,4 +286,5 @@ test_files:
273
286
  - test/go_api_client/pipeline_test.rb
274
287
  - test/go_api_client/stage_test.rb
275
288
  - test/go_api_client/user_test.rb
289
+ - test/schedule_test.rb
276
290
  - test/test_helper.rb