fuci-team_city 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/README.md +66 -5
- data/Rakefile +9 -0
- data/bin/fuci +7 -0
- data/fuci-team_city.gemspec +2 -1
- data/lib/fuci/team_city.rb +17 -2
- data/lib/fuci/team_city/build.rb +64 -0
- data/lib/fuci/team_city/builds.rb +27 -0
- data/lib/fuci/team_city/cli_options.rb +17 -0
- data/lib/fuci/team_city/project.rb +44 -0
- data/lib/fuci/team_city/request.rb +61 -0
- data/lib/fuci/team_city/server.rb +20 -0
- data/lib/fuci/team_city/version.rb +1 -1
- data/lib/fuci/team_city/xml_doc_builder.rb +14 -0
- data/spec/lib/fuci/team_city/build_spec.rb +128 -0
- data/spec/lib/fuci/team_city/builds_spec.rb +54 -0
- data/spec/lib/fuci/team_city/cli_options_spec.rb +31 -0
- data/spec/lib/fuci/team_city/project_spec.rb +71 -0
- data/spec/lib/fuci/team_city/request_spec.rb +99 -0
- data/spec/lib/fuci/team_city/server_spec.rb +46 -0
- data/spec/lib/fuci/team_city/xml_doc_builder_spec.rb +20 -0
- data/spec/lib/fuci/team_city_spec.rb +53 -0
- data/spec/sample_data/builds.xml +103 -0
- data/spec/sample_data/project.xml +21 -0
- data/spec/spec_helper.rb +30 -0
- metadata +52 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26887219a4a45976ed4b1b41f7012572accc8bab
|
4
|
+
data.tar.gz: 7b36cd9c0cf6a38531849d4eec307ca680913f43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f4ead566bffbd57f898a64eed0d43624380969e49c02bfa49f5dd546e9732989eb1f7d88a6b10755203e207d313ffae6b66c9931c8701898a6fd1cd0214be80
|
7
|
+
data.tar.gz: d3d1f03fee61c17c3577eeb802f1b44431ffc76bde4e3330dacbcd328746d05eac512a832f43322a4b586e091049cd29f1399f872fad0eb72b16be9cb1d515e3
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,24 +1,85 @@
|
|
1
1
|
# Fuci::TeamCity
|
2
|
+
[](https://travis-ci.org/davejachimiak/fuci-team_city)
|
2
3
|
|
3
|
-
|
4
|
+
Run TeamCity failures locally. A
|
5
|
+
[Fuci](https://github.com/davejachimiak/fuci) server extension.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
8
10
|
|
9
|
-
gem 'fuci-team_city'
|
11
|
+
gem 'fuci-team_city', '~> 0.1'
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
13
15
|
$ bundle
|
14
16
|
|
15
|
-
|
17
|
+
Bundling the binstub is highly recommended:
|
16
18
|
|
17
|
-
$
|
19
|
+
$ bundle binstubs fuci-team_city
|
20
|
+
|
21
|
+
## Configuration file
|
22
|
+
To configure itself, fuci-team_city looks for a file called
|
23
|
+
".fuci-team_city.rb" in your project's root directory. You should create
|
24
|
+
that file and configure fuci-team_city there. The configuration must
|
25
|
+
include your TeamCity username and password. **Therefore, you should
|
26
|
+
include ./.fuci-team_city.rb in .gitignore.**
|
27
|
+
|
28
|
+
You must configure the following variables in .fuci-team_city.rb:
|
29
|
+
|
30
|
+
1. TeamCity host site
|
31
|
+
2. project name
|
32
|
+
3. default branch
|
33
|
+
4. username
|
34
|
+
5. password
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
Fuci::TeamCity.configure do |fu|
|
38
|
+
fu.host = 'teamcity.myserver.com:8111'
|
39
|
+
fu.project = 'my_app'
|
40
|
+
fu.default_branch = 'my-ci'
|
41
|
+
fu.username = 'username'
|
42
|
+
fu.password = 'password'
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
### Adding custom tester plugins
|
47
|
+
|
48
|
+
Fuci tester plugins should return two things: Whether a failed build has
|
49
|
+
failed with a specific testing framework (e.g. RSpec, Cucumber) and the
|
50
|
+
command-line command that runs those specific failures. As of now, Fuci
|
51
|
+
ships with RSpec and Cucumber tester plugins. If you want to add custom
|
52
|
+
testers, add them in the configuration:
|
53
|
+
```ruby
|
54
|
+
Fuci::Travis.configure do |fu|
|
55
|
+
...
|
56
|
+
...
|
57
|
+
fu.add_testers Fuci::Spec, Fuci::AnotherTestingFramework
|
58
|
+
...
|
59
|
+
...
|
60
|
+
end
|
61
|
+
```
|
62
|
+
|
63
|
+
See the [base Fuci repo](https://github.com/davejachimiak/fuci#creating-tester-extensions)
|
64
|
+
for more information on custom testers.
|
18
65
|
|
19
66
|
## Usage
|
20
67
|
|
21
|
-
|
68
|
+
See the
|
69
|
+
[base Fuci repo](https://github.com/davejachimiak/fuci#native-command-line-options)
|
70
|
+
for command-line options native to Fuci.
|
71
|
+
|
72
|
+
Run your latest ci failures locally:
|
73
|
+
```sh
|
74
|
+
$ fuci
|
75
|
+
```
|
76
|
+
|
77
|
+
Call `fuci` with a branch name to run a specific branch's failures
|
78
|
+
branch. For example, this will run the failures from the latest master
|
79
|
+
build on your local code:
|
80
|
+
```sh
|
81
|
+
$ fuci master
|
82
|
+
```
|
22
83
|
|
23
84
|
## Contributing
|
24
85
|
|
data/Rakefile
CHANGED
data/bin/fuci
ADDED
data/fuci-team_city.gemspec
CHANGED
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'fuci', '~> 0.
|
21
|
+
spec.add_dependency 'fuci', '~> 0.4'
|
22
|
+
spec.add_dependency 'nokogiri'
|
22
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
24
|
spec.add_development_dependency "minitest-spec-expect", "~> 0.1"
|
24
25
|
spec.add_development_dependency "mocha", "~> 0.14"
|
data/lib/fuci/team_city.rb
CHANGED
@@ -1,7 +1,22 @@
|
|
1
|
-
require
|
1
|
+
require 'fuci'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'fuci/configurable'
|
4
|
+
require 'fuci/team_city/server'
|
5
|
+
require 'fuci/team_city/project'
|
6
|
+
require 'fuci/team_city/version'
|
2
7
|
|
3
8
|
module Fuci
|
9
|
+
configure do |fu|
|
10
|
+
fu.server = Fuci::TeamCity::Server
|
11
|
+
end
|
12
|
+
|
4
13
|
module TeamCity
|
5
|
-
|
14
|
+
include Fuci::Configurable
|
15
|
+
|
16
|
+
class << self
|
17
|
+
extend Forwardable
|
18
|
+
def_delegator :Fuci, :add_testers
|
19
|
+
attr_accessor :host, :project, :default_branch, :username, :password
|
20
|
+
end
|
6
21
|
end
|
7
22
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'fuci/team_city/request'
|
2
|
+
require 'fuci/team_city/project'
|
3
|
+
require 'fuci/team_city/cli_options'
|
4
|
+
require 'fuci/team_city/xml_doc_builder'
|
5
|
+
|
6
|
+
module Fuci
|
7
|
+
module TeamCity
|
8
|
+
class Build < Struct.new :element
|
9
|
+
ERROR = 'ERROR'
|
10
|
+
SUCCESS = 'SUCCESS'
|
11
|
+
LOG_RESOURCE = lambda { |id| "/downloadBuildLog.html?buildId=#{id}" }
|
12
|
+
|
13
|
+
def status_code
|
14
|
+
case status
|
15
|
+
when ERROR
|
16
|
+
:red
|
17
|
+
when SUCCESS
|
18
|
+
:green
|
19
|
+
else
|
20
|
+
:yellow
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def log
|
25
|
+
Request.new(log_resource).call
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.create
|
29
|
+
if branch_name = Fuci::TeamCity::CliOptions.branch
|
30
|
+
project.latest_build_from branch_name
|
31
|
+
else
|
32
|
+
create_with_default_branch
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def status
|
39
|
+
element['status']
|
40
|
+
end
|
41
|
+
|
42
|
+
def log_resource
|
43
|
+
LOG_RESOURCE.(id)
|
44
|
+
end
|
45
|
+
|
46
|
+
def id
|
47
|
+
element['id']
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.project
|
51
|
+
Fuci::TeamCity::Project.from_name
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.create_with_default_branch
|
55
|
+
if branch_name = Fuci::TeamCity.default_branch
|
56
|
+
project.latest_build_from branch_name
|
57
|
+
else
|
58
|
+
puts 'No default branch is configured.'
|
59
|
+
exit
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fuci/team_city/xml_doc_builder'
|
2
|
+
require 'fuci/team_city/build'
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Fuci
|
6
|
+
module TeamCity
|
7
|
+
class Builds < Struct.new :xml_doc
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def_delegator :xml_doc, :xpath
|
11
|
+
|
12
|
+
def each
|
13
|
+
xpath('//build').each { |element| yield Build.new(element) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.from_resource resource
|
17
|
+
new xml_doc(resource)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.xml_doc resource
|
23
|
+
XmlDocBuilder.from_resource resource
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'fuci/team_city/xml_doc_builder'
|
2
|
+
require 'fuci/team_city/builds'
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Fuci
|
6
|
+
module TeamCity
|
7
|
+
class Project < Struct.new :xml_doc
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
RESOURCE = lambda { |name| "/httpAuth/app/rest/projects/name:#{name}" }
|
11
|
+
|
12
|
+
def_delegator :xml_doc, :xpath
|
13
|
+
|
14
|
+
def latest_build_from branch_name
|
15
|
+
builds_from(branch_name).first
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.from_name
|
19
|
+
new xml_doc
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def builds_from branch_name
|
25
|
+
Builds.from_resource builds_resource(branch_name)
|
26
|
+
end
|
27
|
+
|
28
|
+
def builds_resource branch_name
|
29
|
+
xpath("//buildType[@name=\"#{branch_name}\"]").
|
30
|
+
attr('href').
|
31
|
+
value +
|
32
|
+
'/builds'
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.xml_doc
|
36
|
+
XmlDocBuilder.from_resource RESOURCE.(project_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.project_name
|
40
|
+
Fuci::TeamCity.project
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Fuci
|
4
|
+
module TeamCity
|
5
|
+
class Request < Struct.new :resource
|
6
|
+
SCHEME = 'http'
|
7
|
+
|
8
|
+
def call
|
9
|
+
request_obj.basic_auth username, password
|
10
|
+
start.body
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def request_obj
|
16
|
+
@request_obj ||=
|
17
|
+
begin
|
18
|
+
Net::HTTP::Get.new uri
|
19
|
+
rescue NoMethodError
|
20
|
+
# account for Ruby versions that that have request
|
21
|
+
# object initializers that take only strings
|
22
|
+
Net::HTTP::Get.new full_url
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def full_url
|
27
|
+
base_url + resource
|
28
|
+
end
|
29
|
+
|
30
|
+
def username
|
31
|
+
Fuci::TeamCity.username
|
32
|
+
end
|
33
|
+
|
34
|
+
def password
|
35
|
+
Fuci::TeamCity.password
|
36
|
+
end
|
37
|
+
|
38
|
+
def uri
|
39
|
+
@uri ||= URI full_url
|
40
|
+
end
|
41
|
+
|
42
|
+
def base_url
|
43
|
+
"#{scheme}://#{host}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def scheme
|
47
|
+
SCHEME
|
48
|
+
end
|
49
|
+
|
50
|
+
def host
|
51
|
+
Fuci::TeamCity.host
|
52
|
+
end
|
53
|
+
|
54
|
+
def start
|
55
|
+
Net::HTTP.start uri.host, uri.port do |http|
|
56
|
+
http.request request_obj
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'fuci/team_city/build'
|
2
|
+
require 'fuci/server'
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Fuci
|
6
|
+
module TeamCity
|
7
|
+
class Server < Fuci::Server
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def_delegator :build, :status_code, :build_status
|
11
|
+
def_delegator :build, :log, :fetch_log
|
12
|
+
|
13
|
+
attr_accessor :build
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@build = Fuci::TeamCity::Build.create
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/build'
|
3
|
+
|
4
|
+
stub_class 'Fuci::TeamCity::CliOptions'
|
5
|
+
|
6
|
+
describe Fuci::TeamCity::Build do
|
7
|
+
before do
|
8
|
+
xml = File.read 'spec/sample_data/builds.xml'
|
9
|
+
xml_doc = Nokogiri::XML xml
|
10
|
+
@element = xml_doc.xpath('//build').first
|
11
|
+
@build = Fuci::TeamCity::Build.new @element
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#initialize' do
|
15
|
+
it 'sets the xml_doc passed in' do
|
16
|
+
expect(@build.element).to_equal @element
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#status_code' do
|
21
|
+
before { @status = @build.stubs :status }
|
22
|
+
|
23
|
+
describe 'when status is ERROR' do
|
24
|
+
before { @status.returns 'ERROR' }
|
25
|
+
|
26
|
+
it 'returns :red' do
|
27
|
+
expect(@build.status_code).to_equal :red
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'when status is passed' do
|
32
|
+
before { @status.returns 'SUCCESS' }
|
33
|
+
|
34
|
+
it 'returns :green' do
|
35
|
+
expect(@build.status_code).to_equal :green
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'when status is something else' do
|
40
|
+
it 'returns :yellow' do
|
41
|
+
expect(@build.status_code).to_equal :yellow
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#log' do
|
47
|
+
it 'makes a request with the log resource' do
|
48
|
+
@build.stubs(:id).returns id = 12345
|
49
|
+
resource = "/downloadBuildLog.html?buildId=#{id}"
|
50
|
+
Fuci::TeamCity::Request.stubs(:new).
|
51
|
+
with(resource).returns request = mock
|
52
|
+
request.stubs(:call).returns log = mock
|
53
|
+
|
54
|
+
expect(@build.log).to_equal log
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#status' do
|
59
|
+
it 'returns the status from the xml doc' do
|
60
|
+
expect(@build.send :status ).to_equal 'ERROR'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#id' do
|
65
|
+
it 'returns the id from the xml doc' do
|
66
|
+
expect(@build.send :id ).to_equal '8134'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '.project' do
|
71
|
+
it 'Calls Project.from_name' do
|
72
|
+
Fuci::TeamCity::Project.stubs(:from_name).returns project = mock
|
73
|
+
expect(Fuci::TeamCity::Build.send :project ).to_equal project
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '.create' do
|
78
|
+
before do
|
79
|
+
@branch = Fuci::TeamCity::CliOptions.stubs :branch
|
80
|
+
end
|
81
|
+
|
82
|
+
describe 'when a branch is passed in the cli' do
|
83
|
+
before do
|
84
|
+
@branch_name = 'branch'
|
85
|
+
@branch.returns @branch_name
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'creates a new build with the branch passed in' do
|
89
|
+
Fuci::TeamCity::Build.stubs(:project).
|
90
|
+
returns project = mock
|
91
|
+
project.stubs(:latest_build_from).
|
92
|
+
with(@branch_name).returns build = mock
|
93
|
+
expect(Fuci::TeamCity::Build.create).to_equal build
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 'when a branch is not passed in the cli' do
|
98
|
+
before do
|
99
|
+
@default_branch = Fuci::TeamCity.stubs :default_branch
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'when a default branch is configured' do
|
103
|
+
before do
|
104
|
+
@branch_name = 'branch'
|
105
|
+
@default_branch.returns @branch_name
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'creates a new build with the default branch' do
|
109
|
+
Fuci::TeamCity::Build.stubs(:project).
|
110
|
+
returns project = mock
|
111
|
+
project.stubs(:latest_build_from).
|
112
|
+
with(@branch_name).returns build = mock
|
113
|
+
expect(Fuci::TeamCity::Build.create).to_equal build
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe 'when a default branch is not configured' do
|
118
|
+
it 'logs that no default branch is configured' do
|
119
|
+
Fuci::TeamCity::Build.expects(:puts).
|
120
|
+
with 'No default branch is configured.'
|
121
|
+
Fuci::TeamCity::Build.expects :exit
|
122
|
+
|
123
|
+
Fuci::TeamCity::Build.create
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/builds'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
describe Fuci::TeamCity::Builds do
|
6
|
+
before do
|
7
|
+
xml = File.read 'spec/sample_data/builds.xml'
|
8
|
+
@xml_doc = Nokogiri::XML xml
|
9
|
+
@builds = Fuci::TeamCity::Builds.new @xml_doc
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'composition' do
|
13
|
+
it 'inherits from Enumerable' do
|
14
|
+
expect(@builds).to_be_kind_of Enumerable
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#initialize' do
|
19
|
+
it 'sets the xml_doc' do
|
20
|
+
expect(@builds.xml_doc).to_equal @xml_doc
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#each' do
|
25
|
+
it 'instantiates each build node with Build' do
|
26
|
+
(xml_doc = mock).stubs(:xpath).
|
27
|
+
with('//build').
|
28
|
+
returns [element = mock]
|
29
|
+
@builds.stubs(:xml_doc).returns xml_doc
|
30
|
+
Fuci::TeamCity::Build.stubs(:new).
|
31
|
+
with(element).
|
32
|
+
returns build = mock
|
33
|
+
|
34
|
+
expects(:puts).with build
|
35
|
+
|
36
|
+
@builds.each { |build| puts build }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.from_resource' do
|
41
|
+
it 'returns a new Builds object an xml doc' do
|
42
|
+
Fuci::TeamCity::XmlDocBuilder.stubs(:from_resource).
|
43
|
+
with(resource = '/resource').
|
44
|
+
returns xml_doc = mock
|
45
|
+
Fuci::TeamCity::Builds.stubs(:new).
|
46
|
+
with(xml_doc).
|
47
|
+
returns builds = mock
|
48
|
+
|
49
|
+
from_resource = Fuci::TeamCity::Builds.from_resource resource
|
50
|
+
|
51
|
+
expect(from_resource).to_equal builds
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/cli_options'
|
3
|
+
|
4
|
+
describe Fuci::TeamCity::CliOptions do
|
5
|
+
describe '.branch' do
|
6
|
+
before { @argv = Fuci::TeamCity::CliOptions.stubs :argv }
|
7
|
+
|
8
|
+
describe 'when a branch is passed in' do
|
9
|
+
before { @argv.returns [@branch = 'cool_ci_branch'] }
|
10
|
+
|
11
|
+
it 'returns the first argument of argv' do
|
12
|
+
expect(Fuci::TeamCity::CliOptions.branch).to_equal @branch
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'when a branch is not passed in' do
|
17
|
+
before { @argv.returns [] }
|
18
|
+
|
19
|
+
it 'returns nil' do
|
20
|
+
expect(Fuci::TeamCity::CliOptions.branch).to_be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.argv' do
|
26
|
+
it 'delegates to Fuci::CliOptions' do
|
27
|
+
Fuci::CliOptions.stubs(:argv).returns argv = ['an option']
|
28
|
+
expect(Fuci::TeamCity::CliOptions.argv).to_equal argv
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/project'
|
3
|
+
|
4
|
+
describe Fuci::TeamCity::Project do
|
5
|
+
before do
|
6
|
+
xml = File.read('spec/sample_data/project.xml')
|
7
|
+
@xml_doc = Nokogiri::XML xml
|
8
|
+
@project = Fuci::TeamCity::Project.new @xml_doc
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
it 'instantiates the xml_doc' do
|
13
|
+
expect(@project.xml_doc).to_equal @xml_doc
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#latest_build_from' do
|
18
|
+
it 'returns a wrapped build from the branch name' do
|
19
|
+
@project.stubs(:builds_from).
|
20
|
+
with(branch_name = 'branch_name').
|
21
|
+
returns builds = OpenStruct.new(first: build = mock)
|
22
|
+
|
23
|
+
expect(@project.latest_build_from branch_name ).to_equal build
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#builds_resource' do
|
28
|
+
it 'returns the build resource from the xml_doc' do
|
29
|
+
resource = '/httpAuth/app/rest/buildTypes/id:bt2/builds'
|
30
|
+
expect(@project.send :builds_resource, 'master' ).to_equal resource
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#builds_from' do
|
35
|
+
it 'calls from_resource on Builds with the builds resource' do
|
36
|
+
@project.stubs(:builds_resource).
|
37
|
+
with(branch_name = 'branch name').
|
38
|
+
returns resource = mock
|
39
|
+
Fuci::TeamCity::Builds.stubs(:from_resource).
|
40
|
+
with(resource).
|
41
|
+
returns builds = mock
|
42
|
+
|
43
|
+
builds_from = @project.send :builds_from, branch_name
|
44
|
+
|
45
|
+
expect(builds_from).to_equal builds
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.from_name' do
|
50
|
+
it 'creates a new project object with an xml doc from the response' do
|
51
|
+
resource = "/httpAuth/app/rest/projects/name:#{name = 'name'}"
|
52
|
+
Fuci::TeamCity::Project.stubs(:project_name).returns name
|
53
|
+
Fuci::TeamCity::XmlDocBuilder.stubs(:from_resource).
|
54
|
+
with(resource).
|
55
|
+
returns xml_doc = mock
|
56
|
+
Fuci::TeamCity::Project.stubs(:new).
|
57
|
+
with(xml_doc).
|
58
|
+
returns project = mock
|
59
|
+
|
60
|
+
from_name = Fuci::TeamCity::Project.from_name
|
61
|
+
expect(from_name).to_equal project
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '.name' do
|
66
|
+
it 'delegates to Fuci::TeamCity.project' do
|
67
|
+
Fuci::TeamCity.stubs(:project).returns project = mock
|
68
|
+
expect(Fuci::TeamCity::Project.project_name).to_equal project
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/request'
|
3
|
+
|
4
|
+
stub_class 'Net::HTTP::Get'
|
5
|
+
|
6
|
+
describe Fuci::TeamCity::Request do
|
7
|
+
before do
|
8
|
+
@request = Fuci::TeamCity::Request.new @resource = 'resource'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
it 'sets the resource passed in' do
|
13
|
+
expect(@request.resource).to_equal @resource
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#call' do
|
18
|
+
before do
|
19
|
+
@body = 'body'
|
20
|
+
@request.stubs(:start).returns OpenStruct.new(body: @body)
|
21
|
+
@request.stubs(:request_obj).returns request_obj = mock
|
22
|
+
@request.stubs(:username).returns username = 'username'
|
23
|
+
@request.stubs(:password).returns password = 'password'
|
24
|
+
request_obj.expects(:basic_auth).with username, password
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'it returns the body of the response' do
|
28
|
+
expect(@request.call).to_equal @body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#request_obj' do
|
33
|
+
it 'returns a HTTP::Get object' do
|
34
|
+
@request.stubs(:uri).returns uri = mock
|
35
|
+
Net::HTTP::Get.stubs(:new).with(uri).returns get = mock
|
36
|
+
expect(@request.send :request_obj ).to_equal get
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#username' do
|
41
|
+
it 'delegates to Fuci::TeamCity' do
|
42
|
+
Fuci::TeamCity.stubs(:username).returns username = 'username'
|
43
|
+
expect(@request.send :username ).to_equal username
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#password' do
|
48
|
+
it 'delegates to Fuci::TeamCity' do
|
49
|
+
Fuci::TeamCity.stubs(:password).returns password = 'password'
|
50
|
+
expect(@request.send :password ).to_equal password
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#uri' do
|
55
|
+
it 'wraps the url passed in a URI' do
|
56
|
+
base_url = 'base url'
|
57
|
+
url = base_url + @resource
|
58
|
+
@request.stubs(:base_url).returns base_url
|
59
|
+
@request.stubs(:URI).with(url).returns uri = mock
|
60
|
+
|
61
|
+
expect(@request.send :uri ).to_equal uri
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#base_url' do
|
66
|
+
it 'concats the scheme and the domain' do
|
67
|
+
@request.stubs(:scheme).returns scheme = 'http'
|
68
|
+
@request.stubs(:host).returns host = 'www.domain.com'
|
69
|
+
base_url = "#{scheme}://#{host}"
|
70
|
+
|
71
|
+
expect(@request.send :base_url ).to_equal base_url
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#scheme' do
|
76
|
+
it 'returns http' do
|
77
|
+
expect(@request.send :scheme ).to_equal 'http'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#host' do
|
82
|
+
it 'delegates to Fuci::TeamCity' do
|
83
|
+
Fuci::TeamCity.stubs(:host).returns host = 'host'
|
84
|
+
expect(@request.send :host ).to_equal host
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#start' do
|
89
|
+
it 'starts a request with the uri hostname and uri port' do
|
90
|
+
host = 'host'
|
91
|
+
port = 8012
|
92
|
+
uri = OpenStruct.new(host: host, port: port)
|
93
|
+
@request.stubs(:uri).returns uri
|
94
|
+
Net::HTTP.expects(:start).with host, port
|
95
|
+
|
96
|
+
@request.send :start
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/server'
|
3
|
+
|
4
|
+
stub_class 'Fuci::TeamCity::Build' do
|
5
|
+
public
|
6
|
+
def self.create
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe Fuci::TeamCity::Server do
|
11
|
+
before do
|
12
|
+
Fuci::TeamCity::Build.stubs(:create).
|
13
|
+
returns @build = mock
|
14
|
+
@server = Fuci::TeamCity::Server.new
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'composition' do
|
18
|
+
it 'inherits from Fuci::Server' do
|
19
|
+
expect(@server).to_be_kind_of Fuci::Server
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#initialize' do
|
24
|
+
it 'sets build' do
|
25
|
+
expect(@server.build).to_equal @build
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#build_status' do
|
30
|
+
it 'delegates to #build' do
|
31
|
+
@server.stubs(:build).returns build = mock
|
32
|
+
build.stubs(:status_code).returns build_status = mock
|
33
|
+
|
34
|
+
expect(@server.build_status).to_equal build_status
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#fetch_log' do
|
39
|
+
it 'delegates to #build' do
|
40
|
+
@server.stubs(:build).returns build = mock
|
41
|
+
build.stubs(:log).returns log = mock
|
42
|
+
|
43
|
+
expect(@server.fetch_log).to_equal log
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/team_city/xml_doc_builder'
|
3
|
+
|
4
|
+
stub_class 'Fuci::TeamCity::Request'
|
5
|
+
|
6
|
+
describe Fuci::TeamCity::XmlDocBuilder do
|
7
|
+
describe '.from_resource' do
|
8
|
+
it 'returns an xml document from the resource passed in' do
|
9
|
+
response = '<response/>'
|
10
|
+
resource = "/httpAuth/app/rest"
|
11
|
+
Fuci::TeamCity::Request.stubs(:new).
|
12
|
+
with(resource).returns request = mock
|
13
|
+
request.stubs(:call).returns response
|
14
|
+
Nokogiri.stubs(:XML).with(response).returns xml_doc = mock
|
15
|
+
|
16
|
+
from_resource = Fuci::TeamCity::XmlDocBuilder.from_resource resource
|
17
|
+
expect(from_resource).to_equal xml_doc
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
module Fuci
|
4
|
+
def self.configure; end;
|
5
|
+
end
|
6
|
+
|
7
|
+
require_relative '../../../lib/fuci/team_city'
|
8
|
+
stub_class 'Fuci::TeamCity::Project'
|
9
|
+
|
10
|
+
describe Fuci::TeamCity do
|
11
|
+
describe 'composition' do
|
12
|
+
it 'includes Fuci::Configurable' do
|
13
|
+
expect(Fuci::TeamCity.ancestors).to_include Fuci::Configurable
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#host' do
|
18
|
+
it('is an accessor') { assert_accessor :host }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#username' do
|
22
|
+
it('is an accessor') { assert_accessor :username }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#password' do
|
26
|
+
it('is an accessor') { assert_accessor :password }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#default_branch' do
|
30
|
+
it('is an accessor') { assert_accessor :default_branch }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#project' do
|
34
|
+
it('is an accessor') { assert_accessor :project }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.add_testers' do
|
38
|
+
it 'delegates to Fuci' do
|
39
|
+
Fuci.expects(:add_testers).with testers = mock
|
40
|
+
Fuci::TeamCity.add_testers testers
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_accessor accessor
|
46
|
+
object = Object.new
|
47
|
+
|
48
|
+
expect(Fuci::TeamCity.send accessor).to_be_nil
|
49
|
+
Fuci::TeamCity.send :"#{accessor.to_s}=", object
|
50
|
+
expect(Fuci::TeamCity.send accessor).to_equal object
|
51
|
+
|
52
|
+
Fuci::TeamCity.instance_variable_set :"@#{accessor.to_s}", nil
|
53
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<builds count="100" nextHref="/httpAuth/app/rest/buildTypes/id:bt36/builds?count=100&start=100">
|
3
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8134" id="8134" number="354" startDate="20130808T171657-0400" status="ERROR" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8134&buildTypeId=bt36"/>
|
4
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8111" id="8111" number="353" startDate="20130806T100535-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8111&buildTypeId=bt36"/>
|
5
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8110" id="8110" number="352" startDate="20130806T094353-0400" status="ERROR" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8110&buildTypeId=bt36"/>
|
6
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8106" id="8106" number="351" startDate="20130805T165809-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8106&buildTypeId=bt36"/>
|
7
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8105" id="8105" number="350" startDate="20130805T165006-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8105&buildTypeId=bt36"/>
|
8
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8102" id="8102" number="349" startDate="20130805T144634-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8102&buildTypeId=bt36"/>
|
9
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8095" id="8095" number="348" startDate="20130805T111519-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8095&buildTypeId=bt36"/>
|
10
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8093" id="8093" number="347" startDate="20130805T100639-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8093&buildTypeId=bt36"/>
|
11
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8092" id="8092" number="346" startDate="20130802T173345-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8092&buildTypeId=bt36"/>
|
12
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8090" id="8090" number="345" startDate="20130802T151544-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8090&buildTypeId=bt36"/>
|
13
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8083" id="8083" number="344" startDate="20130801T133518-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8083&buildTypeId=bt36"/>
|
14
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8080" id="8080" number="343" startDate="20130801T104827-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8080&buildTypeId=bt36"/>
|
15
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8079" id="8079" number="342" startDate="20130801T102430-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8079&buildTypeId=bt36"/>
|
16
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8078" id="8078" number="341" startDate="20130801T093637-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8078&buildTypeId=bt36"/>
|
17
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8073" id="8073" number="340" startDate="20130731T153803-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8073&buildTypeId=bt36"/>
|
18
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8051" id="8051" number="339" startDate="20130725T170437-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8051&buildTypeId=bt36"/>
|
19
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8045" id="8045" number="338" startDate="20130725T100205-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8045&buildTypeId=bt36"/>
|
20
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8029" id="8029" number="337" startDate="20130718T143027-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8029&buildTypeId=bt36"/>
|
21
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8024" id="8024" number="336" startDate="20130718T105659-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8024&buildTypeId=bt36"/>
|
22
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8005" id="8005" number="335" startDate="20130717T110123-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8005&buildTypeId=bt36"/>
|
23
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:8001" id="8001" number="334" startDate="20130717T090737-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=8001&buildTypeId=bt36"/>
|
24
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7999" id="7999" number="333" startDate="20130716T160512-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7999&buildTypeId=bt36"/>
|
25
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7997" id="7997" number="332" startDate="20130716T155713-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7997&buildTypeId=bt36"/>
|
26
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7996" id="7996" number="331" startDate="20130716T155335-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7996&buildTypeId=bt36"/>
|
27
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7995" id="7995" number="330" startDate="20130716T152619-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7995&buildTypeId=bt36"/>
|
28
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7982" id="7982" number="329" startDate="20130715T134525-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7982&buildTypeId=bt36"/>
|
29
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7981" id="7981" number="328" startDate="20130715T114610-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7981&buildTypeId=bt36"/>
|
30
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7979" id="7979" number="327" startDate="20130715T110008-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7979&buildTypeId=bt36"/>
|
31
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7978" id="7978" number="326" startDate="20130712T173828-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7978&buildTypeId=bt36"/>
|
32
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7975" id="7975" number="325" startDate="20130712T160252-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7975&buildTypeId=bt36"/>
|
33
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7972" id="7972" number="324" startDate="20130712T120627-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7972&buildTypeId=bt36"/>
|
34
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7971" id="7971" number="323" startDate="20130712T115417-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7971&buildTypeId=bt36"/>
|
35
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7966" id="7966" number="322" startDate="20130712T093439-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7966&buildTypeId=bt36"/>
|
36
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7964" id="7964" number="321" startDate="20130711T170753-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7964&buildTypeId=bt36"/>
|
37
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7962" id="7962" number="320" startDate="20130711T165153-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7962&buildTypeId=bt36"/>
|
38
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7955" id="7955" number="319" startDate="20130711T155625-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7955&buildTypeId=bt36"/>
|
39
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7937" id="7937" number="317" startDate="20130710T171042-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7937&buildTypeId=bt36"/>
|
40
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7934" id="7934" number="316" startDate="20130710T112008-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7934&buildTypeId=bt36"/>
|
41
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7932" id="7932" number="315" startDate="20130709T163555-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7932&buildTypeId=bt36"/>
|
42
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7929" id="7929" number="314" startDate="20130709T141530-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7929&buildTypeId=bt36"/>
|
43
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7928" id="7928" number="313" startDate="20130709T140450-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7928&buildTypeId=bt36"/>
|
44
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7562" id="7562" number="312" startDate="20130513T135844-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7562&buildTypeId=bt36"/>
|
45
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7557" id="7557" number="311" startDate="20130509T160943-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7557&buildTypeId=bt36"/>
|
46
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7548" id="7548" number="310" startDate="20130509T133457-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7548&buildTypeId=bt36"/>
|
47
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7495" id="7495" number="309" startDate="20130506T090142-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7495&buildTypeId=bt36"/>
|
48
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7467" id="7467" number="308" startDate="20130502T165608-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7467&buildTypeId=bt36"/>
|
49
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7434" id="7434" number="307" startDate="20130502T094036-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7434&buildTypeId=bt36"/>
|
50
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7433" id="7433" number="306" startDate="20130502T093204-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7433&buildTypeId=bt36"/>
|
51
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7432" id="7432" number="305" startDate="20130502T090611-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7432&buildTypeId=bt36"/>
|
52
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7431" id="7431" number="304" startDate="20130502T085749-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7431&buildTypeId=bt36"/>
|
53
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7429" id="7429" number="303" startDate="20130502T084748-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7429&buildTypeId=bt36"/>
|
54
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7421" id="7421" number="301" startDate="20130501T162212-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7421&buildTypeId=bt36"/>
|
55
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7413" id="7413" number="300" startDate="20130501T141753-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7413&buildTypeId=bt36"/>
|
56
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7354" id="7354" number="299" startDate="20130429T142246-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7354&buildTypeId=bt36"/>
|
57
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7352" id="7352" number="298" startDate="20130429T133346-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7352&buildTypeId=bt36"/>
|
58
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7350" id="7350" number="297" startDate="20130429T130331-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7350&buildTypeId=bt36"/>
|
59
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7348" id="7348" number="296" startDate="20130429T115825-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7348&buildTypeId=bt36"/>
|
60
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7338" id="7338" number="295" startDate="20130426T163023-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7338&buildTypeId=bt36"/>
|
61
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7291" id="7291" number="293" startDate="20130425T110649-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7291&buildTypeId=bt36"/>
|
62
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7262" id="7262" number="292" startDate="20130419T101530-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7262&buildTypeId=bt36"/>
|
63
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7253" id="7253" number="291" startDate="20130418T154947-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7253&buildTypeId=bt36"/>
|
64
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7244" id="7244" number="290" startDate="20130418T142548-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7244&buildTypeId=bt36"/>
|
65
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7238" id="7238" number="289" startDate="20130418T114430-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7238&buildTypeId=bt36"/>
|
66
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7222" id="7222" number="286" startDate="20130417T145041-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7222&buildTypeId=bt36"/>
|
67
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7221" id="7221" number="285" startDate="20130417T144715-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7221&buildTypeId=bt36"/>
|
68
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7220" id="7220" number="284" startDate="20130417T144000-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7220&buildTypeId=bt36"/>
|
69
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7214" id="7214" number="282" startDate="20130417T140830-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7214&buildTypeId=bt36"/>
|
70
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7190" id="7190" number="281" startDate="20130416T171533-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7190&buildTypeId=bt36"/>
|
71
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7189" id="7189" number="280" startDate="20130416T170215-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7189&buildTypeId=bt36"/>
|
72
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7161" id="7161" number="279" startDate="20130411T164736-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7161&buildTypeId=bt36"/>
|
73
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7160" id="7160" number="278" startDate="20130411T164410-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7160&buildTypeId=bt36"/>
|
74
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7119" id="7119" number="274" startDate="20130409T090807-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7119&buildTypeId=bt36"/>
|
75
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7118" id="7118" number="273" startDate="20130409T090213-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7118&buildTypeId=bt36"/>
|
76
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7089" id="7089" number="272" startDate="20130404T172646-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7089&buildTypeId=bt36"/>
|
77
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7087" id="7087" number="271" startDate="20130404T172337-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7087&buildTypeId=bt36"/>
|
78
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7083" id="7083" number="270" startDate="20130404T164748-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7083&buildTypeId=bt36"/>
|
79
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7080" id="7080" number="269" startDate="20130404T162706-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7080&buildTypeId=bt36"/>
|
80
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7079" id="7079" number="268" startDate="20130404T162303-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7079&buildTypeId=bt36"/>
|
81
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7078" id="7078" number="267" startDate="20130404T161833-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7078&buildTypeId=bt36"/>
|
82
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:7077" id="7077" number="266" startDate="20130404T161448-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=7077&buildTypeId=bt36"/>
|
83
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6978" id="6978" number="265" startDate="20130401T144711-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6978&buildTypeId=bt36"/>
|
84
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6976" id="6976" number="264" startDate="20130401T144258-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6976&buildTypeId=bt36"/>
|
85
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6966" id="6966" number="263" startDate="20130401T120137-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6966&buildTypeId=bt36"/>
|
86
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6965" id="6965" number="262" startDate="20130401T115711-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6965&buildTypeId=bt36"/>
|
87
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6943" id="6943" number="261" startDate="20130329T132107-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6943&buildTypeId=bt36"/>
|
88
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6941" id="6941" number="260" startDate="20130329T114849-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6941&buildTypeId=bt36"/>
|
89
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6940" id="6940" number="259" startDate="20130329T114524-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6940&buildTypeId=bt36"/>
|
90
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6938" id="6938" number="258" startDate="20130329T112457-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6938&buildTypeId=bt36"/>
|
91
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6935" id="6935" number="257" startDate="20130329T102402-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6935&buildTypeId=bt36"/>
|
92
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6932" id="6932" number="256" startDate="20130329T090355-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6932&buildTypeId=bt36"/>
|
93
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6931" id="6931" number="255" startDate="20130329T083847-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6931&buildTypeId=bt36"/>
|
94
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6929" id="6929" number="254" startDate="20130328T170512-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6929&buildTypeId=bt36"/>
|
95
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6928" id="6928" number="253" startDate="20130328T160845-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6928&buildTypeId=bt36"/>
|
96
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6927" id="6927" number="252" startDate="20130328T160136-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6927&buildTypeId=bt36"/>
|
97
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6903" id="6903" number="249" startDate="20130328T111616-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6903&buildTypeId=bt36"/>
|
98
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6875" id="6875" number="248" startDate="20130327T103052-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6875&buildTypeId=bt36"/>
|
99
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6873" id="6873" number="247" startDate="20130326T161508-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6873&buildTypeId=bt36"/>
|
100
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6871" id="6871" number="246" startDate="20130326T151415-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6871&buildTypeId=bt36"/>
|
101
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6869" id="6869" number="245" startDate="20130326T142200-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6869&buildTypeId=bt36"/>
|
102
|
+
<build buildTypeId="bt36" href="/httpAuth/app/rest/builds/id:6868" id="6868" number="244" startDate="20130326T134942-0400" status="SUCCESS" webUrl="http://subdomain.domain.com:8101/viewLog.html?buildId=6868&buildTypeId=bt36"/>
|
103
|
+
</builds>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<project description="" archived="false" webUrl="http://subdomain.domain.com:8101/project.html?projectId=project2" id="project2" name="sloth_finder" href="/httpAuth/app/rest/projects/id:project2">
|
3
|
+
<buildTypes>
|
4
|
+
<buildType id="bt15" name="me-ci" href="/httpAuth/app/rest/buildTypes/id:bt15" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt15"/>
|
5
|
+
<buildType id="bt36" name="you-ci" href="/httpAuth/app/rest/buildTypes/id:bt36" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt36"/>
|
6
|
+
<buildType id="bt38" name="ya-ci" href="/httpAuth/app/rest/buildTypes/id:bt38" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt38"/>
|
7
|
+
<buildType id="bt14" name="durk-ci" href="/httpAuth/app/rest/buildTypes/id:bt14" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt14"/>
|
8
|
+
<buildType id="bt16" name="moin-ci" href="/httpAuth/app/rest/buildTypes/id:bt16" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt16"/>
|
9
|
+
<buildType id="bt2" name="master" href="/httpAuth/app/rest/buildTypes/id:bt2" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt2"/>
|
10
|
+
<buildType id="bt32" name="cray-ci" href="/httpAuth/app/rest/buildTypes/id:bt32" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt32"/>
|
11
|
+
<buildType id="bt11" name="kurnk-ci" href="/httpAuth/app/rest/buildTypes/id:bt11" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt11"/>
|
12
|
+
<buildType id="bt9" name="norla-ci" href="/httpAuth/app/rest/buildTypes/id:bt9" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt9"/>
|
13
|
+
<buildType id="bt10" name="production" href="/httpAuth/app/rest/buildTypes/id:bt10" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt10"/>
|
14
|
+
<buildType id="bt12" name="larry-ci" href="/httpAuth/app/rest/buildTypes/id:bt12" projectName="sloth_finder" projectId="project2" webUrl="http://subdomain.domain.com:8101/viewType.html?buildTypeId=bt12"/>
|
15
|
+
</buildTypes>
|
16
|
+
<templates>
|
17
|
+
<buildType id="btTemplate3" name="BranchExtractedFromName" href="/httpAuth/app/rest/buildTypes/id:(template:btTemplate3)" projectName="sloth_finder" projectId="project2"/>
|
18
|
+
<buildType id="btTemplate6" name="BranchExtractedFromNameBackup" href="/httpAuth/app/rest/buildTypes/id:(template:btTemplate6)" projectName="sloth_finder" projectId="project2"/>
|
19
|
+
</templates>
|
20
|
+
<parameters/>
|
21
|
+
</project>
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest/spec/expect'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'mocha/setup'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
def stub_class klass
|
7
|
+
objects = klass.split '::'
|
8
|
+
|
9
|
+
klass = objects.inject(Object) do |memo, obj|
|
10
|
+
unless obj == objects.last
|
11
|
+
begin
|
12
|
+
memo.const_get obj
|
13
|
+
rescue
|
14
|
+
memo.const_set obj, Module.new
|
15
|
+
end
|
16
|
+
else
|
17
|
+
begin
|
18
|
+
memo.const_get obj
|
19
|
+
rescue
|
20
|
+
memo.const_set obj, Class.new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
memo.const_get obj
|
25
|
+
end
|
26
|
+
|
27
|
+
klass.class_eval do
|
28
|
+
yield if block_given?
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuci-team_city
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Jachimiak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fuci
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,18 +97,39 @@ dependencies:
|
|
83
97
|
description: A local runner for your TeamCity build failures.
|
84
98
|
email:
|
85
99
|
- dave.jachimiak@gmail.com
|
86
|
-
executables:
|
100
|
+
executables:
|
101
|
+
- fuci
|
87
102
|
extensions: []
|
88
103
|
extra_rdoc_files: []
|
89
104
|
files:
|
90
105
|
- .gitignore
|
106
|
+
- CHANGELOG.md
|
91
107
|
- Gemfile
|
92
108
|
- LICENSE.txt
|
93
109
|
- README.md
|
94
110
|
- Rakefile
|
111
|
+
- bin/fuci
|
95
112
|
- fuci-team_city.gemspec
|
96
113
|
- lib/fuci/team_city.rb
|
114
|
+
- lib/fuci/team_city/build.rb
|
115
|
+
- lib/fuci/team_city/builds.rb
|
116
|
+
- lib/fuci/team_city/cli_options.rb
|
117
|
+
- lib/fuci/team_city/project.rb
|
118
|
+
- lib/fuci/team_city/request.rb
|
119
|
+
- lib/fuci/team_city/server.rb
|
97
120
|
- lib/fuci/team_city/version.rb
|
121
|
+
- lib/fuci/team_city/xml_doc_builder.rb
|
122
|
+
- spec/lib/fuci/team_city/build_spec.rb
|
123
|
+
- spec/lib/fuci/team_city/builds_spec.rb
|
124
|
+
- spec/lib/fuci/team_city/cli_options_spec.rb
|
125
|
+
- spec/lib/fuci/team_city/project_spec.rb
|
126
|
+
- spec/lib/fuci/team_city/request_spec.rb
|
127
|
+
- spec/lib/fuci/team_city/server_spec.rb
|
128
|
+
- spec/lib/fuci/team_city/xml_doc_builder_spec.rb
|
129
|
+
- spec/lib/fuci/team_city_spec.rb
|
130
|
+
- spec/sample_data/builds.xml
|
131
|
+
- spec/sample_data/project.xml
|
132
|
+
- spec/spec_helper.rb
|
98
133
|
homepage: https://github.com/davejachimiak/fuci-team_city
|
99
134
|
licenses:
|
100
135
|
- MIT
|
@@ -119,5 +154,16 @@ rubygems_version: 2.0.6
|
|
119
154
|
signing_key:
|
120
155
|
specification_version: 4
|
121
156
|
summary: Run failures from your recent TeamCity builds locally.
|
122
|
-
test_files:
|
157
|
+
test_files:
|
158
|
+
- spec/lib/fuci/team_city/build_spec.rb
|
159
|
+
- spec/lib/fuci/team_city/builds_spec.rb
|
160
|
+
- spec/lib/fuci/team_city/cli_options_spec.rb
|
161
|
+
- spec/lib/fuci/team_city/project_spec.rb
|
162
|
+
- spec/lib/fuci/team_city/request_spec.rb
|
163
|
+
- spec/lib/fuci/team_city/server_spec.rb
|
164
|
+
- spec/lib/fuci/team_city/xml_doc_builder_spec.rb
|
165
|
+
- spec/lib/fuci/team_city_spec.rb
|
166
|
+
- spec/sample_data/builds.xml
|
167
|
+
- spec/sample_data/project.xml
|
168
|
+
- spec/spec_helper.rb
|
123
169
|
has_rdoc:
|