rally_api 1.1.2 → 1.2.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/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
|
[](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
|