ruby_vsts 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,25 @@
1
+ require 'rspec'
2
+ require 'webmock/rspec'
3
+ require 'simplecov'
4
+ require 'simplecov-json'
5
+ require 'codeclimate-test-reporter'
6
+
7
+ SimpleCov.configure do
8
+ root File.join(File.dirname(__FILE__), '..')
9
+ project_name 'Ruby VSTS Client'
10
+ add_filter 'spec'
11
+ end
12
+
13
+ SimpleCov.start
14
+
15
+ RSpec.configure do |config|
16
+ config.order = 'random'
17
+ end
18
+
19
+ WebMock.disable_net_connect!
20
+
21
+ require 'ruby_vsts'
22
+
23
+ def fixtures_path
24
+ File.dirname(__FILE__) + '/fixtures/'
25
+ end
@@ -0,0 +1,10 @@
1
+ require "spec_helper"
2
+
3
+ describe VSTS::BaseModel do
4
+ it "can convert camelcase to underlines" do
5
+ m = described_class.new
6
+ expect(m.underscore("AbcDef")).to eq("abc_def")
7
+ expect(m.underscore("ABCDef")).to eq("abc_def")
8
+ expect(m.underscore("abcDefGhi")).to eq("abc_def_ghi")
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe VSTS::Change do
4
+ before do
5
+ VSTS.reset
6
+ VSTS.configure do |config|
7
+ config.personal_access_token = "test_token"
8
+ config.base_url = "https://test.visualstudio.local/"
9
+ config.debug = false
10
+ end
11
+
12
+ # stub one changeset
13
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\?/)
14
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_by_id.json"))
15
+ # stub changes in a changeset
16
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\/changes\?/)
17
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_changes.json"))
18
+ end
19
+
20
+ let(:changes) { VSTS::Changeset.find(16).changes }
21
+
22
+ it "creates Item objects for changes" do
23
+ expect(changes[0].item).to be_a(VSTS::Item)
24
+ end
25
+ end
@@ -0,0 +1,145 @@
1
+ require "spec_helper"
2
+
3
+ # rubocop:disable Metrics/BlockLength
4
+ describe VSTS::Changeset do
5
+ before do
6
+ VSTS.reset
7
+ VSTS.configure do |config|
8
+ config.personal_access_token = "test_token"
9
+ config.base_url = "https://test.visualstudio.local/"
10
+ config.debug = false
11
+ end
12
+ end
13
+
14
+ describe "finding a single changeset" do
15
+ before do
16
+ # stub one changeset
17
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\?/)
18
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_by_id.json"))
19
+ end
20
+
21
+ let(:changeset) { described_class.find(16) }
22
+
23
+ it "can find a Changeset instance by id" do
24
+ expect(changeset).to be_a(described_class)
25
+ end
26
+
27
+ it "can create an Identity instance for the author of the changeset" do
28
+ expect(changeset.author).to be_a(VSTS::Identity)
29
+ end
30
+
31
+ it "can fill in Changeset instance fields from the response" do
32
+ expect(changeset.author.display_name).to eq("Chuck Reinhart")
33
+ end
34
+
35
+ it "can download changes" do
36
+ expect(changeset).to respond_to(:changes)
37
+ end
38
+ end
39
+
40
+ describe "finding a list of changesets" do
41
+ before do
42
+ # stub list of changesets (the same response for any query)
43
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\?/)
44
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changesets_list.json"))
45
+ end
46
+
47
+ let(:expected_url) { "https://test.visualstudio.local/DefaultCollection/_apis/tfvc/changesets" }
48
+
49
+ it "can find a list of changesets as an array" do
50
+ changeset_list = described_class.find_all
51
+ expect(changeset_list).to be_an(Array)
52
+ expect(changeset_list[0]).to be_a(described_class)
53
+ end
54
+
55
+ it "can find all changesets" do
56
+ changeset_list = described_class.find_all
57
+ expect(changeset_list.length).to eq(18)
58
+ end
59
+
60
+ it "can request a page at a time" do
61
+ described_class.find_all(top: 20, skip: 100)
62
+ query = {
63
+ "$top" => 20,
64
+ "$skip" => 100,
65
+ "api-version" => "1.0"
66
+ }
67
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
68
+ end
69
+
70
+ it "can sort results" do
71
+ described_class.find_all(orderBy: "id desc")
72
+ query = {
73
+ "$orderBy" => "id desc",
74
+ "api-version" => "1.0"
75
+ }
76
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
77
+ end
78
+
79
+ describe "filtering" do
80
+ it "can filter by item path" do
81
+ described_class.find_all(itemPath: "$/Fabrikam-Fiber-TFVC/Program.cs")
82
+ query = {
83
+ "searchCriteria.itemPath" => "$/Fabrikam-Fiber-TFVC/Program.cs",
84
+ "api-version" => "1.0"
85
+ }
86
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
87
+ end
88
+
89
+ it "can filter by author" do
90
+ described_class.find_all(author: "fabrikamfiber3@hotmail.com")
91
+ query = {
92
+ "searchCriteria.author" => "fabrikamfiber3@hotmail.com",
93
+ "api-version" => "1.0"
94
+ }
95
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
96
+ end
97
+
98
+ it "can filter by range of IDs" do
99
+ described_class.find_all(fromId: 10, toId: 20)
100
+ query = {
101
+ "searchCriteria.fromId" => 10,
102
+ "searchCriteria.toId" => 20,
103
+ "api-version" => "1.0"
104
+ }
105
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
106
+ end
107
+
108
+ it "can filter by date range" do
109
+ described_class.find_all(fromDate: "03-01-2017", toDate: "03-18-2017-2:00PM")
110
+ query = {
111
+ "searchCriteria.fromDate" => "03-01-2017",
112
+ "searchCriteria.toDate" => "03-18-2017-2:00PM",
113
+ "api-version" => "1.0"
114
+ }
115
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
116
+ end
117
+ end
118
+ end
119
+
120
+ describe "downloading changes in a changeset" do
121
+ before do
122
+ # stub one changeset
123
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\?/)
124
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_by_id.json"))
125
+ # stub changes in a changeset
126
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\/changes\?/)
127
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_changes.json"))
128
+ end
129
+
130
+ let(:changes) { described_class.find(16).changes }
131
+
132
+ it "can get changes as an Array" do
133
+ expect(changes).to be_an(Array)
134
+ end
135
+
136
+ it "creates the required amount of changes" do
137
+ expect(changes.length).to eq(1)
138
+ end
139
+
140
+ it "creates Change instances" do
141
+ expect(changes[0]).to be_a(VSTS::Change)
142
+ end
143
+ end
144
+ end
145
+ # rubocop:enable Metrics/BlockLength
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ # rubocop:disable Metrics/BlockLength
4
+ describe VSTS::Configuration do
5
+ before do
6
+ VSTS.reset
7
+ VSTS.configure do |config|
8
+ config.personal_access_token = "test_token"
9
+ config.base_url = "https://testurl.local/"
10
+ config.collection = "testcollection"
11
+ config.team_project = "testproject"
12
+ config.area = "testarea"
13
+ config.api_version = "9.9-test"
14
+ config.debug = true
15
+ end
16
+ end
17
+
18
+ it "has an accessible configuration" do
19
+ expect(VSTS.configuration).to be_a(described_class)
20
+ end
21
+
22
+ it "has its fields configured" do
23
+ expect(VSTS.configuration.personal_access_token).to eq("test_token")
24
+ expect(VSTS.configuration.base_url).to eq("https://testurl.local/")
25
+ expect(VSTS.configuration.collection).to eq("testcollection")
26
+ expect(VSTS.configuration.team_project).to eq("testproject")
27
+ expect(VSTS.configuration.area).to eq("testarea")
28
+ expect(VSTS.configuration.api_version).to eq("9.9-test")
29
+ expect(VSTS.configuration.debug).to eq(true)
30
+ end
31
+
32
+ it "can be reconfigured" do
33
+ VSTS.configuration.debug = false
34
+ expect(VSTS.configuration.debug).to eq(false)
35
+ end
36
+
37
+ it "can be reset" do
38
+ VSTS.reset
39
+ expect(VSTS.configuration.personal_access_token).to eq("")
40
+ expect(VSTS.configuration.base_url).to eq("")
41
+ end
42
+ end
43
+ # rubocop:enable Metrics/BlockLength
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ # rubocop:disable Metrics/BlockLength
4
+ describe VSTS::Item do
5
+ before do
6
+ VSTS.reset
7
+ VSTS.configure do |config|
8
+ config.personal_access_token = "test_token"
9
+ config.base_url = "https://test.visualstudio.local/"
10
+ config.debug = false
11
+ end
12
+
13
+ # stub one changeset
14
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\?/)
15
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_by_id.json"))
16
+ # stub changes in a changeset
17
+ stub_request(:get, /test.visualstudio.local\/.*?\/changesets\/\d+\/changes\?/)
18
+ .to_return(status: 200, body: File.new(fixtures_path + "tfvc_changeset_changes.json"))
19
+ # stub item download
20
+ stub_request(:get, /test.visualstudio.local\/.*?\/items(\/|\?)/)
21
+ .to_return(status: 200, body: "test file\ncontents")
22
+ end
23
+
24
+ let(:item) { VSTS::Changeset.find(16).changes[0].item }
25
+ let(:expected_url) { "https://test.visualstudio.local/DefaultCollection/_apis/tfvc/items" }
26
+
27
+ it "downloads from the correct URL" do
28
+ query = {
29
+ "path" => "$/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs",
30
+ "api-version" => "1.0"
31
+ }
32
+ item.get
33
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
34
+ end
35
+
36
+ it "can be downloaded" do
37
+ expect(item.get).to eq("test file\ncontents")
38
+ end
39
+
40
+ it "can download a specific version" do
41
+ query = {
42
+ "path" => "$/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs",
43
+ "versionType" => "changeset",
44
+ "version" => 1000,
45
+ "api-version" => "1.0"
46
+ }
47
+ item.get(versionType: :changeset, version: 1000)
48
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
49
+ end
50
+
51
+ it "can download the previous version before the latest" do
52
+ query = {
53
+ "path" => "$/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs",
54
+ "versionType" => "latest",
55
+ "versionOptions" => "previous",
56
+ "api-version" => "1.0"
57
+ }
58
+ item.get(versionType: :latest, versionOptions: :previous)
59
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
60
+ end
61
+
62
+ it "can download the previous version before a given changeset" do
63
+ query = {
64
+ "path" => "$/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs",
65
+ "versionType" => "changeset",
66
+ "version" => 1000,
67
+ "versionOptions" => "previous",
68
+ "api-version" => "1.0"
69
+ }
70
+ item.get(versionType: :changeset, version: 1000, versionOptions: :previous)
71
+ expect(a_request(:get, expected_url).with(query: query)).to have_been_made.once
72
+ end
73
+ end
74
+ # rubocop:enable Metrics/BlockLength
data/spec/vsts_spec.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe VSTS do
4
+ describe 'versioning' do
5
+ it 'has a proper version' do
6
+ expect(VSTS::VERSION).to match(/\A\d+\.\d+\.\d+(-\w+)?\z/)
7
+ end
8
+ end
9
+
10
+ describe 'logging' do
11
+ it 'has a logger' do
12
+ expect(described_class.logger).to be_a(Logger)
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,253 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_vsts
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Gabor Lengyel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMRIwEAYDVQQDDAlydWJ5
14
+ X3ZzdHMxGTAXBgoJkiaJk/IsZAEZFglwcm9kZXhpdHkxEzARBgoJkiaJk/IsZAEZ
15
+ FgNjb20wHhcNMTcwNDEyMDk1MzE1WhcNMTgwNDEyMDk1MzE1WjBEMRIwEAYDVQQD
16
+ DAlydWJ5X3ZzdHMxGTAXBgoJkiaJk/IsZAEZFglwcm9kZXhpdHkxEzARBgoJkiaJ
17
+ k/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnth7a
18
+ Innh/5+zT5rdwHMySmQG2qyuNh5ammn4ZleFvkZxDPpFb5Kn+BeoR8O3OWEe5WEs
19
+ 4FUR/43Ow1HzYMIJIIb6MxNZyZQj6Bm+cKZPctL/h0KjC7kG+2aRdUCsfFKoZvMZ
20
+ 69yHxtArNtbt6dIRsic8CHioQe0i6/7BVD/1OKKt600dt1K1zf7j7T8xWIdCwbO8
21
+ zWE4GpEBnEA4mBPMKqAZmd+DsqrbCWPie8TdfGeWo71/7rUuCbAUpMq4Rh3SpmfV
22
+ t0OQMShhuAaLoRLuIZ48hiC3ELAr9ZCK8rn5Ci2trLEVjyOvbq/QnwnGspydlyaN
23
+ xzGpH5p82DwcUP5TAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAd
24
+ BgNVHQ4EFgQUYZTJdcOOpive/ZTgo5EYhS98qUUwIgYDVR0RBBswGYEXcnVieV92
25
+ c3RzQHByb2RleGl0eS5jb20wIgYDVR0SBBswGYEXcnVieV92c3RzQHByb2RleGl0
26
+ eS5jb20wDQYJKoZIhvcNAQEFBQADggEBAFiM7TEAsjlwjCyCMlzw0Yq/igWgaaFP
27
+ of+iPXZUC49YMTpXnQjNl9sE+cxHzkJzyM00YdeJ18DDtquIZ44Hdd30J9oleJ5g
28
+ DgGCX4bCKg5WTBwqvd0ivATn9uxDxLF1VP/cl1MJPXhW8+Bhq2FzbyWvQuxHeFsI
29
+ jJNJdpaL4UgxvhYECxAd1gzvIpRFbSqJJZVr8T4tYjfxyaGJxf9T5GbtYazYcRmP
30
+ Pfk9fa2jjnmyUPewuJZHmwArB9oRryAdwWtOsvVZHZ1ulcmW+Pbo2IiYQHvl1zQH
31
+ Z5Mw91gFnDov+9F9be4W5sZmbj640vetlJGLdMFheEZ2HSX+4fEZu1k=
32
+ -----END CERTIFICATE-----
33
+ date: 2017-04-12 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rest-client
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: bundler
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.14'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.14'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rake
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '12.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '12.0'
77
+ - !ruby/object:Gem::Dependency
78
+ name: rspec
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3.5'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '3.5'
91
+ - !ruby/object:Gem::Dependency
92
+ name: webmock
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '3.0'
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '3.0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: simplecov
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.13'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '0.13'
119
+ - !ruby/object:Gem::Dependency
120
+ name: simplecov-json
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '0.2'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '0.2'
133
+ - !ruby/object:Gem::Dependency
134
+ name: rubocop
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '0.48'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '0.48'
147
+ - !ruby/object:Gem::Dependency
148
+ name: rubocop-rspec
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '1.15'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '1.15'
161
+ - !ruby/object:Gem::Dependency
162
+ name: codeclimate-test-reporter
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.0'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '1.0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: yard
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.9'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '0.9'
189
+ description: |2
190
+ An API client to the Microsoft Visual Studio online Rest APIs. It can connect to VSTS via the public API
191
+ and query VSTS with a personal access token. May also work with TFS.
192
+ email: ruby_vsts@prodexity.com
193
+ executables: []
194
+ extensions: []
195
+ extra_rdoc_files: []
196
+ files:
197
+ - ".codeclimate.yml"
198
+ - ".gitignore"
199
+ - ".rspec"
200
+ - ".rubocop.yml"
201
+ - ".yardopts"
202
+ - Gemfile
203
+ - LICENSE.txt
204
+ - README.md
205
+ - Rakefile
206
+ - certs/ruby_vsts-gem-public_cert.pem
207
+ - lib/ruby_vsts.rb
208
+ - lib/vsts/api_client.rb
209
+ - lib/vsts/api_response.rb
210
+ - lib/vsts/base_model.rb
211
+ - lib/vsts/change.rb
212
+ - lib/vsts/changeset.rb
213
+ - lib/vsts/configuration.rb
214
+ - lib/vsts/identity.rb
215
+ - lib/vsts/item.rb
216
+ - lib/vsts/version.rb
217
+ - ruby_vsts.gemspec
218
+ - spec/fixtures/tfvc_changeset_by_id.json
219
+ - spec/fixtures/tfvc_changeset_changes.json
220
+ - spec/fixtures/tfvc_changesets_list.json
221
+ - spec/spec_helper.rb
222
+ - spec/vsts/base_model_spec.rb
223
+ - spec/vsts/change_spec.rb
224
+ - spec/vsts/changeset_spec.rb
225
+ - spec/vsts/configuration_spec.rb
226
+ - spec/vsts/item_spec.rb
227
+ - spec/vsts_spec.rb
228
+ homepage: https://github.com/prodexity/ruby_vsts/
229
+ licenses:
230
+ - MIT
231
+ metadata: {}
232
+ post_install_message:
233
+ rdoc_options: []
234
+ require_paths:
235
+ - lib
236
+ required_ruby_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ required_rubygems_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ requirements: []
247
+ rubyforge_project:
248
+ rubygems_version: 2.5.1
249
+ signing_key:
250
+ specification_version: 4
251
+ summary: An unofficial Microsoft Visual Studio Team Services (VSTS) API client in
252
+ Ruby
253
+ test_files: []