rally_api 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -9
- data/lib/rally_api.rb +1 -1
- data/lib/rally_api/custom_http_header.rb +1 -1
- data/lib/rally_api/lookback_api_query.rb +1 -1
- data/lib/rally_api/rally_collection.rb +1 -1
- data/lib/rally_api/rally_json_connection.rb +1 -1
- data/lib/rally_api/rally_object.rb +9 -23
- data/lib/rally_api/rally_query.rb +1 -1
- data/lib/rally_api/rally_query_result.rb +1 -1
- data/lib/rally_api/rally_rest_json.rb +54 -21
- data/lib/rally_api/version.rb +2 -2
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 330bb4339cde6317ad030f5a9db668b3efa37604
|
4
|
+
data.tar.gz: 538376f2077a0ba28b57def35ddc9bc7bf667cc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd3a8bd2011162e285f2ec2822d86f207460e1d55a18d7be5ae6337ccdb487f69506a640af2e579e412ea2ba6bd5cb13a4c6f01f0281fc514ce1f0d171cf7fb8
|
7
|
+
data.tar.gz: b14a2ca16e3762eb8e3e9c001aff81ef10c374096976860812cce14d128a07e8a1ee9ec838f385c74094ad81af65b015ddcc3b686bbe82844cd7b9c6b7933b58
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
## License
|
2
2
|
|
3
|
-
Copyright (c) Rally Software Development Corp.
|
3
|
+
Copyright (c) Rally Software Development Corp. 2015 Distributed under the MIT License.
|
4
4
|
|
5
5
|
## Warranty
|
6
6
|
|
@@ -16,7 +16,7 @@ RallyAPI (rally_api) -- a wrapper for Rally's REST Web Services API
|
|
16
16
|
|
17
17
|
[![Stories in Ready](http://badge.waffle.io/RallyTools/RallyRestToolkitForRuby.png)](http://waffle.io/RallyTools/RallyRestToolkitForRuby)
|
18
18
|
|
19
|
-
RallyAPI is a wrapper of Rally's Web Service API
|
19
|
+
RallyAPI is a wrapper of Rally's Web Service API JSON endpoints using rest-client and native json parsing
|
20
20
|
Check the examples directory for more detailed samples.
|
21
21
|
|
22
22
|
### Installation
|
@@ -70,8 +70,8 @@ A Rally API Key can be used for user authentication. If an API Key is provided,
|
|
70
70
|
test_query = RallyAPI::RallyQuery.new()
|
71
71
|
test_query.type = "defect"
|
72
72
|
test_query.fetch = "Name"
|
73
|
-
test_query.workspace = {"_ref" => "https://rally1.rallydev.com/slm/webservice/
|
74
|
-
test_query.project = {"_ref" => "https://rally1.rallydev.com/slm/webservice/
|
73
|
+
test_query.workspace = {"_ref" => "https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345" } #optional
|
74
|
+
test_query.project = {"_ref" => "https://rally1.rallydev.com/slm/webservice/v2.0/project/12345" } #optional
|
75
75
|
test_query.page_size = 200 #optional - default is 200
|
76
76
|
test_query.limit = 1000 #optional - default is 99999
|
77
77
|
test_query.project_scope_up = false
|
@@ -114,8 +114,8 @@ A Rally API Key can be used for user authentication. If an API Key is provided,
|
|
114
114
|
#If you query with a specific fetch string, for example query defect and fetch Name,Severity,Description
|
115
115
|
#You will *only* get back those fields defect.Priority will be nil, but may not be null in Rally
|
116
116
|
#Use object.read or @rally.read to make sure you read the whole object if you want what is in Rally
|
117
|
-
# This is done for speed - lazy loading (going back to get a value from Rally) can be
|
118
|
-
# *Pick
|
117
|
+
# This is done for speed - lazy loading (going back to get a value from Rally) can be unnecessarily slow
|
118
|
+
# *Pick your fetch strings wisely* fetch everything you need and don't rely on read if you don't need it, the speed is worth it.
|
119
119
|
|
120
120
|
### Creating an Artifact
|
121
121
|
obj = {}
|
@@ -147,10 +147,16 @@ A Rally API Key can be used for user authentication. If an API Key is provided,
|
|
147
147
|
story1.rank_to_top
|
148
148
|
|
149
149
|
### Revision History
|
150
|
+
|
151
|
+
Version 1.2.0 (April 2015) - set default WSAPI version to 2.0, fix paging issue in reread,
|
152
|
+
can now use DisplayName for custom fields in create and update operations.
|
153
|
+
Set httpclient gem runtime dependency to '= 2.5.0'.
|
154
|
+
|
155
|
+
Version 1.1.2 (October 2014) - Set httpclient gem runtime dependency to '~> 2.4.0'.
|
156
|
+
|
157
|
+
Version 1.1.1 (October 2014) - Relax httpclient gem runtime dependency to '>= 2.3.0'.
|
158
|
+
|
150
159
|
Version 1.1.0 (September 2014) - Appends workspace to Rally API requests to enable correct retrieval
|
151
160
|
of allowed values from a user's non-default workspace. Updates gem development dependencies and
|
152
161
|
test files structure.
|
153
162
|
|
154
|
-
Version 1.1.1 (October 2014) - Relax version requirement of httpclient runtime
|
155
|
-
dependency to '>= 2.3.0'.
|
156
|
-
|
data/lib/rally_api.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#Copyright (c) 2002-
|
1
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
2
2
|
#Your use of this Software is governed by the terms and conditions
|
3
3
|
#of the applicable Subscription Agreement between your company and
|
4
4
|
#Rally Software Development Corp.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#Copyright (c) 2002-
|
1
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
2
2
|
#Your use of this Software is governed by the terms and conditions
|
3
3
|
#of the applicable Subscription Agreement between your company and
|
4
4
|
#Rally Software Development Corp.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :stopdoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :stopdoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
@@ -2,7 +2,7 @@ require "httpclient"
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
# :stopdoc:
|
5
|
-
#Copyright (c) 2002-
|
5
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
6
6
|
#Your use of this Software is governed by the terms and conditions
|
7
7
|
#of the applicable Subscription Agreement between your company and
|
8
8
|
#Rally Software Development Corp.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :stopdoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
@@ -15,14 +15,15 @@ module RallyAPI
|
|
15
15
|
|
16
16
|
def initialize(rally_rest, json_hash, warnings = {})
|
17
17
|
# handle that we might not get a _ref or a _type
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
@type = "unknown"
|
19
|
+
if json_hash["_type"] && !json_hash["_type"].empty?
|
20
|
+
@type = json_hash["_type"]
|
21
|
+
elsif json_hash["_ref"] && !json_hash["_ref"].empty?
|
22
|
+
@type = json_hash["_ref"].split("/")[-2]
|
23
|
+
end
|
23
24
|
@rally_object = json_hash
|
24
|
-
@rally_rest
|
25
|
-
@warnings
|
25
|
+
@rally_rest = rally_rest
|
26
|
+
@warnings = warnings[:warnings]
|
26
27
|
end
|
27
28
|
|
28
29
|
def update(fields, params = {})
|
@@ -150,21 +151,6 @@ module RallyAPI
|
|
150
151
|
ret_val
|
151
152
|
end
|
152
153
|
|
153
|
-
#def get_val(field)
|
154
|
-
# return_val = rally_object[field]
|
155
|
-
#
|
156
|
-
# if return_val.class == Hash
|
157
|
-
# return RallyObject.new(@rally_rest, return_val)
|
158
|
-
# end
|
159
|
-
#
|
160
|
-
# if return_val.class == Array
|
161
|
-
# make_object_array(field)
|
162
|
-
# return_val = rally_object[field]
|
163
|
-
# end
|
164
|
-
#
|
165
|
-
# return_val
|
166
|
-
#end
|
167
|
-
|
168
154
|
def get_val(field)
|
169
155
|
return_val = @rally_object[field]
|
170
156
|
return_val = @rally_object["c_#{field}"] if return_val.nil?
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :stopdoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :stopdoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
@@ -5,7 +5,7 @@
|
|
5
5
|
#require "rally_query_result"
|
6
6
|
|
7
7
|
# --
|
8
|
-
#Copyright (c) 2002-
|
8
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
9
9
|
#Your use of this Software is governed by the terms and conditions
|
10
10
|
#of the applicable Subscription Agreement between your company and
|
11
11
|
#Rally Software Development Corp.
|
@@ -44,7 +44,7 @@ module RallyAPI
|
|
44
44
|
|
45
45
|
#Main Class to instantiate when using the tool
|
46
46
|
class RallyRestJson
|
47
|
-
DEFAULT_WSAPI_VERSION = "
|
47
|
+
DEFAULT_WSAPI_VERSION = "v2.0"
|
48
48
|
|
49
49
|
attr_accessor :rally_url, :rally_workspace_name, :rally_project_name, :wsapi_version,
|
50
50
|
:rally_headers, :rally_default_workspace, :rally_default_project, :low_debug, :proxy_info,
|
@@ -96,12 +96,13 @@ module RallyAPI
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def send_request(url = nil, args = nil, params = {})
|
99
|
+
url += '.js' if @wsapi_version !~ /^v2/ && url !~ /\.js$/ # append ".js" if it is needed
|
99
100
|
if params[:workspace].nil? && rally_workspace_object
|
100
101
|
params[:workspace] = rally_workspace_object['_ref']
|
101
102
|
end
|
102
103
|
if params[:workspace]
|
103
104
|
wksp_id = params[:workspace].match(/workspace\/(\d*)/)[1]
|
104
|
-
url += "
|
105
|
+
url += "?workspace=workspace/#{wksp_id}"
|
105
106
|
end
|
106
107
|
@rally_connection.send_request(url, args, params)
|
107
108
|
end
|
@@ -181,15 +182,15 @@ module RallyAPI
|
|
181
182
|
params[:workspace] = ws_ref
|
182
183
|
|
183
184
|
fields = RallyAPI::RallyRestJson.fix_case(fields) if @rally_rest_api_compat
|
184
|
-
|
185
|
+
postable_fields = check_fields(fields)
|
186
|
+
postable_fields = adjust_for_custom(type, postable_fields) if @wsapi_version =~ /^v2/
|
187
|
+
object2create = { type => postable_fields }
|
185
188
|
args = { :method => :post, :payload => object2create }
|
186
|
-
#json_response = @rally_connection.create_object(make_create_url(rally_type), args, object2create)
|
187
189
|
json_response = send_request(make_create_url(type), args, params)
|
188
190
|
#todo - check for warnings
|
189
191
|
RallyObject.new(self, json_response["CreateResult"]["Object"], warnings(json_response)).read()
|
190
192
|
end
|
191
193
|
|
192
|
-
|
193
194
|
def read(type, obj_id, params = {})
|
194
195
|
type = check_type(type)
|
195
196
|
ref = check_id(type.to_s, obj_id)
|
@@ -224,7 +225,7 @@ module RallyAPI
|
|
224
225
|
pagesize = params[:pagesize] || 200
|
225
226
|
full_collection = []
|
226
227
|
start.step(collection_count, pagesize).each do |page_start|
|
227
|
-
page = reread(collection_hash, {:pagesize => 200, :
|
228
|
+
page = reread(collection_hash, {:pagesize => 200, :start => page_start})
|
228
229
|
full_collection.concat(page["Results"])
|
229
230
|
end
|
230
231
|
{"Results" => full_collection}
|
@@ -234,7 +235,9 @@ module RallyAPI
|
|
234
235
|
type = check_type(type)
|
235
236
|
ref = check_id(type.to_s, obj_id)
|
236
237
|
fields = RallyAPI::RallyRestJson.fix_case(fields) if @rally_rest_api_compat
|
237
|
-
|
238
|
+
update_fields = check_fields(fields)
|
239
|
+
update_fields = adjust_for_custom(type.to_s, update_fields) if @wsapi_version =~ /^v2/
|
240
|
+
json_update = {type.to_s => update_fields}
|
238
241
|
args = {:method => :post, :payload => json_update}
|
239
242
|
json_response = send_request(ref, args, params)
|
240
243
|
#todo check for warnings on json_response["OperationResult"]
|
@@ -247,8 +250,8 @@ module RallyAPI
|
|
247
250
|
#test_query = RallyAPI::RallyQuery.new()
|
248
251
|
#test_query.type = :defect
|
249
252
|
#test_query.fetch = "Name"
|
250
|
-
#test_query.workspace = {"_ref" => "https://rally1.rallydev.com/slm/webservice/
|
251
|
-
#test_query.project = {"_ref" => "https://rally1.rallydev.com/slm/webservice/
|
253
|
+
#test_query.workspace = {"_ref" => "https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345" } #optional
|
254
|
+
#test_query.project = {"_ref" => "https://rally1.rallydev.com/slm/webservice/v2.0/project/12345" } #optional
|
252
255
|
#test_query.page_size = 200 #optional - default is 200
|
253
256
|
#test_query.limit = 1000 #optional - default is 99999
|
254
257
|
#test_query.project_scope_up = false
|
@@ -279,6 +282,7 @@ module RallyAPI
|
|
279
282
|
end
|
280
283
|
|
281
284
|
query_url = make_query_url(@rally_url, @wsapi_version, check_type(query_obj.type.to_s))
|
285
|
+
query_url += '.js' if @wsapi_version !~ /^v2/
|
282
286
|
query_params = query_obj.make_query_params
|
283
287
|
args = {:method => :get}
|
284
288
|
json_response = @rally_connection.get_all_json_results(query_url, args, query_params, query_obj.limit)
|
@@ -290,7 +294,7 @@ module RallyAPI
|
|
290
294
|
end
|
291
295
|
|
292
296
|
#rankAbove=%2Fhierarchicalrequirement%2F4624552599
|
293
|
-
#{"hierarchicalrequirement":{"_ref":"https://rally1.rallydev.com/slm/webservice/
|
297
|
+
#{"hierarchicalrequirement":{"_ref":"https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement/4616818613"}}
|
294
298
|
def rank_above(ref_to_rank, relative_ref)
|
295
299
|
ref = ref_to_rank
|
296
300
|
params = {}
|
@@ -389,28 +393,33 @@ module RallyAPI
|
|
389
393
|
end
|
390
394
|
|
391
395
|
def make_get_url(type)
|
392
|
-
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}
|
396
|
+
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}"
|
393
397
|
end
|
394
398
|
|
395
399
|
def security_url
|
396
|
-
"#{@rally_url}/webservice/#{@wsapi_version}/security/authorize
|
400
|
+
"#{@rally_url}/webservice/#{@wsapi_version}/security/authorize"
|
397
401
|
end
|
398
402
|
|
399
403
|
def make_read_url(type,oid)
|
400
|
-
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}/#{oid}
|
404
|
+
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}/#{oid}"
|
401
405
|
end
|
402
406
|
|
403
407
|
def make_create_url(type)
|
404
|
-
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}/create
|
408
|
+
"#{@rally_url}/webservice/#{@wsapi_version}/#{type}/create"
|
405
409
|
end
|
406
410
|
|
407
411
|
def make_query_url(rally_url, wsapi_version, type)
|
408
|
-
"#{rally_url}/webservice/#{wsapi_version}/#{type}
|
412
|
+
"#{rally_url}/webservice/#{wsapi_version}/#{type}"
|
409
413
|
end
|
410
414
|
|
411
415
|
def short_ref(long_ref)
|
412
|
-
|
413
|
-
|
416
|
+
if @wsapi_version =~ /^v2/
|
417
|
+
path_components = long_ref.split("/")
|
418
|
+
path_components[-2..-1].join("/")
|
419
|
+
else
|
420
|
+
ref_pieces = long_ref.split("/")
|
421
|
+
"/#{ref_pieces[-2]}/#{ref_pieces[-1].split(".js")[0]}"
|
422
|
+
end
|
414
423
|
end
|
415
424
|
|
416
425
|
def warnings(json_obj)
|
@@ -425,12 +434,16 @@ module RallyAPI
|
|
425
434
|
return type_name
|
426
435
|
end
|
427
436
|
|
428
|
-
#ref should be like https://rally1.rallydev.com/slm/webservice/
|
437
|
+
#ref should be like https://rally1.rallydev.com/slm/webservice/v2.0/defect/12345
|
429
438
|
def has_ref?(json_object)
|
430
439
|
if json_object["_ref"].nil?
|
431
440
|
return false
|
432
441
|
end
|
433
|
-
|
442
|
+
if @wsapi_version =~ /^v2/
|
443
|
+
return true if json_object["_ref"] =~ /^https:\/\/\S*(\/slm\/webservice)\S*$/
|
444
|
+
else
|
445
|
+
return true if json_object["_ref"] =~ /^https:\/\/\S*(\/slm\/webservice)\S*.js$/
|
446
|
+
end
|
434
447
|
false
|
435
448
|
end
|
436
449
|
|
@@ -460,7 +473,7 @@ module RallyAPI
|
|
460
473
|
nil
|
461
474
|
end
|
462
475
|
|
463
|
-
#eg https://rally1.rallydev.com/slm/webservice/
|
476
|
+
#eg https://rally1.rallydev.com/slm/webservice/v2.0/defect/12345
|
464
477
|
def get_type_from_ref(ref)
|
465
478
|
ref.split("/")[-2]
|
466
479
|
end
|
@@ -468,6 +481,7 @@ module RallyAPI
|
|
468
481
|
def check_fields(fields)
|
469
482
|
fields.each do |key, val|
|
470
483
|
fields[key] = make_ref_field(val)
|
484
|
+
|
471
485
|
if val.class == Time
|
472
486
|
fields[key] = val.iso8601
|
473
487
|
end
|
@@ -493,6 +507,25 @@ module RallyAPI
|
|
493
507
|
val
|
494
508
|
end
|
495
509
|
|
510
|
+
def adjust_for_custom(type, fields)
|
511
|
+
# only needed for when using WSAPI v2.x or later, custom fields must be prefixed with 'c_'
|
512
|
+
begin
|
513
|
+
type_custom_fields = custom_fields_for(type)
|
514
|
+
rescue => ex
|
515
|
+
return fields
|
516
|
+
end
|
517
|
+
transform = {}
|
518
|
+
fields.each do |name, value|
|
519
|
+
is_custom = type_custom_fields.select {|fn| fn.downcase == name.downcase}
|
520
|
+
if is_custom.length > 0
|
521
|
+
transform[is_custom.first.last] = value
|
522
|
+
else
|
523
|
+
transform[name] = value
|
524
|
+
end
|
525
|
+
end
|
526
|
+
transform
|
527
|
+
end
|
528
|
+
|
496
529
|
def self.fix_case(values)
|
497
530
|
values.inject({}) do |new_values, (key, value)|
|
498
531
|
new_values[camel_case_word(key)] = value.is_a?(Hash) ? fix_case(value) : value
|
data/lib/rally_api/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# :nodoc:
|
2
|
-
#Copyright (c) 2002-
|
2
|
+
#Copyright (c) 2002-2015 Rally Software Development Corp. All Rights Reserved.
|
3
3
|
#Your use of this Software is governed by the terms and conditions
|
4
4
|
#of the applicable Subscription Agreement between your company and
|
5
5
|
#Rally Software Development Corp.
|
6
6
|
module RallyAPI
|
7
|
-
VERSION = "1.
|
7
|
+
VERSION = "1.2.0"
|
8
8
|
end
|
metadata
CHANGED
@@ -1,30 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rally_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Smith
|
8
|
-
- Rylee Keys
|
8
|
+
- Rylee Keys
|
9
|
+
- Kip Lehman
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: httpclient
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
18
|
requirements:
|
18
|
-
- -
|
19
|
+
- - '='
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.
|
21
|
+
version: 2.5.0
|
21
22
|
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
|
-
- -
|
26
|
+
- - '='
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.
|
28
|
+
version: 2.5.0
|
28
29
|
- !ruby/object:Gem::Dependency
|
29
30
|
name: simplecov
|
30
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,6 +86,7 @@ description: API wrapper for Rally's JSON REST web services api
|
|
85
86
|
email:
|
86
87
|
- dsmith@rallydev.com
|
87
88
|
- rylee@rallydev.com
|
89
|
+
- klehman@rallydev.com
|
88
90
|
executables: []
|
89
91
|
extensions: []
|
90
92
|
extra_rdoc_files: []
|
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
123
|
version: '0'
|
122
124
|
requirements: []
|
123
125
|
rubyforge_project: rally_api
|
124
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.4.5
|
125
127
|
signing_key:
|
126
128
|
specification_version: 4
|
127
129
|
summary: A wrapper for the Rally Web Services API using json
|