rally_api 0.7.2 → 0.7.3
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.
- data/README.rdoc +15 -9
- data/lib/rally_api/custom_http_header.rb +1 -1
- data/lib/rally_api/rally_object.rb +5 -0
- data/lib/rally_api/rally_query.rb +2 -2
- data/lib/rally_api/rally_rest_json.rb +19 -21
- data/lib/rally_api/version.rb +1 -1
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -32,8 +32,14 @@ RallyAPI is a wrapper of Rally's Web Service API Json endpoints using rest-clien
|
|
32
32
|
|
33
33
|
|
34
34
|
=== Querying Rally
|
35
|
+
|
36
|
+
#type names are stored in rally.rally_objects hash, you can inspect there for a list
|
37
|
+
#Look at the TypePath for all typedefs and this is the key to each hash.
|
38
|
+
#If you pass in a symbol (for code using versions prior to 0.7.3), it will be downcased and turned into a string
|
39
|
+
# examples are: "defect", "hierarchicalrequirement", "portfolioitem/feature"
|
40
|
+
|
35
41
|
test_query = RallyAPI::RallyQuery.new()
|
36
|
-
test_query.type =
|
42
|
+
test_query.type = "defect"
|
37
43
|
test_query.fetch = "Name"
|
38
44
|
test_query.workspace = {"_ref" => "https://rally1.rallydev.com/slm/webservice/1.25/workspace/12345.js" } #optional
|
39
45
|
test_query.project = {"_ref" => "https://rally1.rallydev.com/slm/webservice/1.25/project/12345.js" } #optional
|
@@ -56,16 +62,16 @@ RallyAPI is a wrapper of Rally's Web Service API Json endpoints using rest-clien
|
|
56
62
|
|
57
63
|
#for people comfortable passing around blocks:
|
58
64
|
results = @rally.find do |q|
|
59
|
-
q.type =
|
65
|
+
q.type = "defect"
|
60
66
|
q.fetch = "Name,FormattedID"
|
61
67
|
q.query_string = "(Priority = \"Low\")"
|
62
68
|
end
|
63
69
|
|
64
70
|
|
65
71
|
=== Reading an Artifact
|
66
|
-
defect = @rally.read(
|
72
|
+
defect = @rally.read("defect", 12345) #by ObjectID
|
67
73
|
#or
|
68
|
-
defect = @rally.read(
|
74
|
+
defect = @rally.read("defect", "FormattedID|DE42") #by FormattedID
|
69
75
|
#or if you already have an object like from a query
|
70
76
|
results = @rally.find(RallyAPI::RallyQuery.new({:type => :defect, :query_string => "(FormattedID = DE42)"}))
|
71
77
|
defect = results.first
|
@@ -85,25 +91,25 @@ RallyAPI is a wrapper of Rally's Web Service API Json endpoints using rest-clien
|
|
85
91
|
=== Creating an Artifact
|
86
92
|
obj = {}
|
87
93
|
obj["Name"] = "Test Defect created #{DateTime.now()}"
|
88
|
-
new_de = @rally.create(
|
94
|
+
new_de = @rally.create("defect", obj)
|
89
95
|
puts new_de["FormattedID"]
|
90
96
|
|
91
97
|
=== Updating an Artifact
|
92
98
|
fields = {}
|
93
99
|
fields["Severity"] = "Critical"
|
94
100
|
fields["Description"] = "Description for the issue"
|
95
|
-
updated_defect = @rally.update(
|
101
|
+
updated_defect = @rally.update("defect", 12345, fields) #by ObjectID
|
96
102
|
#or
|
97
|
-
updated_defect = @rally.update(
|
103
|
+
updated_defect = @rally.update("defect", "FormattedID|DE42", fields) #by FormattedID
|
98
104
|
# or
|
99
|
-
defect = @rally.read(
|
105
|
+
defect = @rally.read("defect", 12345) #by lookup then udpating via the object
|
100
106
|
field_updates = {"Description" => "Changed Description"}
|
101
107
|
defect.update(field_updates)
|
102
108
|
|
103
109
|
=== Utils
|
104
110
|
#allowed values: pass the Artifact type string or downcased symbol and the Display Name of the field
|
105
111
|
@rally.allowed_values("Defect", "Severity")
|
106
|
-
@rally.allowed_values(
|
112
|
+
@rally.allowed_values("story", "ScheduleState")
|
107
113
|
|
108
114
|
#re-ranking: rank_above and rank_below
|
109
115
|
story1.rank_above(story2) #in a drag and drop workspace move story1 relative to story2
|
@@ -22,7 +22,7 @@ module RallyAPI
|
|
22
22
|
@os = RUBY_PLATFORM
|
23
23
|
@platform = "Ruby #{RUBY_VERSION}"
|
24
24
|
@library = "RallyRestJson version #{RallyAPI::VERSION}"
|
25
|
-
@name = "
|
25
|
+
@name = "RallyRestJsonRuby"
|
26
26
|
|
27
27
|
if custom_vals.keys.length > 0
|
28
28
|
@name = custom_vals[:name]
|
@@ -74,7 +74,7 @@ module RallyAPI
|
|
74
74
|
errors.push("Project - #{@project} - must have a ref") if @project["_ref"].nil?
|
75
75
|
end
|
76
76
|
|
77
|
-
if (allowed_objects[@type].nil?)
|
77
|
+
if (allowed_objects[@type.to_s].nil?)
|
78
78
|
errors.push( "Object Type #{@type} is not query-able: inspect RallyRestJson.rally_objects for allowed types" )
|
79
79
|
end
|
80
80
|
|
@@ -84,7 +84,7 @@ module RallyAPI
|
|
84
84
|
private
|
85
85
|
|
86
86
|
def parse_query_hash(query_hash)
|
87
|
-
@type = query_hash[:type]
|
87
|
+
@type = query_hash[:type].to_s
|
88
88
|
@query_string = query_hash[:query_string]
|
89
89
|
@fetch = query_hash[:fetch]
|
90
90
|
@project_scope_down = query_hash[:project_scope_down]
|
@@ -71,8 +71,8 @@ module RallyAPI
|
|
71
71
|
@rally_connection.set_client_user(@rally_url, @rally_user, @rally_password)
|
72
72
|
@rally_connection.logger = @logger unless @logger.nil?
|
73
73
|
|
74
|
-
@rally_objects = {
|
75
|
-
|
74
|
+
@rally_objects = { "typedefinition" => "TypeDefinition", "user" => "User", "subscription" => "Subscription",
|
75
|
+
"workspace" => "Workspace", "project" => "Project" }
|
76
76
|
|
77
77
|
if !@rally_workspace_name.nil?
|
78
78
|
@rally_default_workspace = find_workspace(@rally_workspace_name)
|
@@ -131,7 +131,7 @@ module RallyAPI
|
|
131
131
|
|
132
132
|
def user
|
133
133
|
args = { :method => :get }
|
134
|
-
json_response = @rally_connection.send_request(make_get_url(@rally_objects[
|
134
|
+
json_response = @rally_connection.send_request(make_get_url(@rally_objects["user"]), args)
|
135
135
|
rally_type = json_response.keys[0]
|
136
136
|
RallyObject.new(self, json_response[rally_type])
|
137
137
|
end
|
@@ -278,12 +278,12 @@ module RallyAPI
|
|
278
278
|
#todo - check support for portfolio item fields
|
279
279
|
def allowed_values(type, field)
|
280
280
|
if type.class == Symbol
|
281
|
-
query_type = @rally_objects[type]
|
281
|
+
query_type = @rally_objects[type.to_s]
|
282
282
|
else
|
283
283
|
query_type = type
|
284
284
|
end
|
285
285
|
type_defs_query = RallyQuery.new()
|
286
|
-
type_defs_query.type =
|
286
|
+
type_defs_query.type = "typedefinition"
|
287
287
|
type_defs_query.fetch = true
|
288
288
|
type_defs_query.query_string= "(ElementName = \"#{query_type}\")"
|
289
289
|
type_defs = find(type_defs_query)
|
@@ -324,10 +324,11 @@ module RallyAPI
|
|
324
324
|
end
|
325
325
|
|
326
326
|
def check_type(type_name)
|
327
|
-
|
327
|
+
type = @rally_objects[type_name.to_s]
|
328
|
+
if type.nil?
|
328
329
|
raise StandardError, "The object type #{type_name} is not valid for the wsapi"
|
329
330
|
end
|
330
|
-
|
331
|
+
type.gsub(" ", "") #for wsapi no space is expected
|
331
332
|
end
|
332
333
|
|
333
334
|
#ref should be like https://rally1.rallydev.com/slm/webservice/1.25/defect/12345.js
|
@@ -353,7 +354,7 @@ module RallyAPI
|
|
353
354
|
|
354
355
|
def ref_by_formatted_id(type, fid)
|
355
356
|
query = RallyQuery.new()
|
356
|
-
query.type = type.downcase
|
357
|
+
query.type = type.downcase
|
357
358
|
query.query_string = "(FormattedID = #{fid})"
|
358
359
|
query.limit = 20
|
359
360
|
query.fetch = "FormattedID"
|
@@ -378,32 +379,29 @@ module RallyAPI
|
|
378
379
|
fields
|
379
380
|
end
|
380
381
|
|
381
|
-
|
382
382
|
def cache_rally_objects()
|
383
383
|
type_defs_query = RallyQuery.new()
|
384
|
-
type_defs_query.type =
|
384
|
+
type_defs_query.type = "typedefinition"
|
385
385
|
type_defs_query.fetch = "Name,Parent,TypePath"
|
386
386
|
type_defs_query.workspace = @rally_default_workspace unless @rally_default_workspace.nil?
|
387
387
|
|
388
388
|
type_defs = find(type_defs_query)
|
389
389
|
type_defs.each do |td|
|
390
|
-
|
391
|
-
url_path =
|
392
|
-
@rally_objects[type_sym] = url_path
|
390
|
+
url_path = td.TypePath.nil? ? td.ElementName : td.TypePath
|
391
|
+
@rally_objects[url_path.downcase] = url_path
|
393
392
|
|
394
393
|
parent_type = td.Parent
|
395
|
-
if !parent_type.nil? && (@rally_objects[parent_type.
|
396
|
-
url_path = parent_type.TypePath.nil? ? parent_type.
|
397
|
-
@rally_objects[
|
394
|
+
if !parent_type.nil? && (@rally_objects[parent_type.TypePath].nil?)
|
395
|
+
url_path = parent_type.TypePath.nil? ? parent_type.ElementName : parent_type.TypePath
|
396
|
+
@rally_objects[url_path.downcase] = url_path
|
398
397
|
end
|
399
398
|
end
|
400
399
|
|
401
400
|
#some convenience keys to help people - someday we'll fix the api and make HR called story
|
402
|
-
@rally_objects[
|
403
|
-
@rally_objects[
|
404
|
-
@rally_objects[
|
405
|
-
@rally_objects[
|
406
|
-
|
401
|
+
@rally_objects["useriterationcapacity"] = "User Iteration Capacity"
|
402
|
+
@rally_objects["userpermission"] = "User Permission"
|
403
|
+
@rally_objects["story"] = "Hierarchical Requirement"
|
404
|
+
@rally_objects["userstory"] = "Hierarchical Requirement"
|
407
405
|
end
|
408
406
|
|
409
407
|
end
|
data/lib/rally_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rally_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httpclient
|
16
|
-
requirement: &
|
16
|
+
requirement: &70253413466180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 2.2.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70253413466180
|
25
25
|
description: API wrapper for Rally's JSON REST web services api
|
26
26
|
email:
|
27
27
|
- dsmith@rallydev.com
|