rally_api 0.6.0 → 0.7.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.
- data/lib/rally_api/rally_json_connection.rb +46 -99
- data/lib/rally_api/rally_object.rb +1 -1
- data/lib/rally_api/rally_rest_json.rb +37 -21
- data/lib/rally_api/version.rb +1 -1
- metadata +6 -6
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "httpclient"
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
# :stopdoc:
|
@@ -15,70 +15,30 @@ module RallyAPI
|
|
15
15
|
|
16
16
|
DEFAULT_PAGE_SIZE = 200
|
17
17
|
|
18
|
-
attr_accessor :rally_headers, :
|
18
|
+
attr_accessor :rally_headers, :low_debug, :logger
|
19
19
|
|
20
20
|
def initialize(headers, low_debug, proxy_info)
|
21
21
|
@rally_headers = headers
|
22
22
|
@low_debug = low_debug
|
23
23
|
@logger = nil
|
24
24
|
|
25
|
-
@
|
26
|
-
@
|
25
|
+
@rally_http_client = HTTPClient.new
|
26
|
+
@rally_http_client.receive_timeout = 300
|
27
|
+
@rally_http_client.send_timeout = 300
|
28
|
+
@rally_http_client.transparent_gzip_decompression = true
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
+
#passed in proxy setup overrides env level proxy
|
31
|
+
env_proxy = ENV["http_proxy"]
|
32
|
+
if (!env_proxy.nil?) && (proxy_info.nil?)
|
33
|
+
@rally_http_client.proxy = env_proxy
|
30
34
|
end
|
31
|
-
|
32
|
-
if !proxy_info.nil?
|
33
|
-
RestClient.proxy = proxy_info
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def read_object(url, args, params = nil)
|
39
|
-
args[:method] = :get
|
40
|
-
result = send_json_request(url, args, params)
|
41
|
-
log_info(result) if @low_debug
|
42
|
-
rally_type = result.keys[0]
|
43
|
-
result[rally_type]
|
44
|
-
end
|
45
|
-
|
46
|
-
def create_object(url, args, rally_object)
|
47
|
-
args[:method] = :post
|
48
|
-
text_json = rally_object.to_json
|
49
|
-
args[:payload] = text_json
|
50
|
-
log_info("create - payload json: #{text_json}") if @low_debug
|
51
|
-
result = send_json_request(url, args)
|
52
|
-
log_info("create - result: #{result}") if @low_debug
|
53
|
-
result["CreateResult"]["Object"]
|
54
|
-
end
|
55
|
-
|
56
|
-
def update_object(url, args, rally_fields)
|
57
|
-
args[:method] = :post
|
58
|
-
text_json = rally_fields.to_json
|
59
|
-
args[:payload] = text_json
|
60
|
-
log_info("update payload json: #{text_json}") if @low_debug
|
61
|
-
result = send_json_request(url, args)
|
62
|
-
log_info("update - result: #{result}") if @low_debug
|
63
|
-
result["OperationResult"]
|
64
|
-
end
|
65
|
-
|
66
|
-
def put_object(url, args, put_params, rally_fields)
|
67
|
-
args[:method] = :put
|
68
|
-
text_json = rally_fields.to_json
|
69
|
-
args[:payload] = text_json
|
70
|
-
result = send_json_request(url, args, put_params)
|
71
|
-
result["OperationResult"]
|
35
|
+
@rally_http_client.proxy = proxy_info unless !proxy_info.nil?
|
72
36
|
end
|
73
37
|
|
74
|
-
def
|
75
|
-
|
76
|
-
result = send_json_request(url,args)
|
77
|
-
log_info("delete result - #{result}") if @low_debug
|
78
|
-
result["OperationResult"]
|
38
|
+
def set_client_user(base_url, user, password)
|
39
|
+
@rally_http_client.set_basic_auth(base_url, user, password)
|
79
40
|
end
|
80
41
|
|
81
|
-
#---------------------------------------------
|
82
42
|
def get_all_json_results(url, args, query_params, limit = 99999)
|
83
43
|
all_results = []
|
84
44
|
args[:method] = :get
|
@@ -87,7 +47,8 @@ module RallyAPI
|
|
87
47
|
params[:start] = 1
|
88
48
|
params = params.merge(query_params)
|
89
49
|
|
90
|
-
query_result = send_json_request(url, args, params)
|
50
|
+
#query_result = send_json_request(url, args, params)
|
51
|
+
query_result = send_request(url, args, params)
|
91
52
|
all_results.concat(query_result["QueryResult"]["Results"])
|
92
53
|
totals = query_result["QueryResult"]["TotalResultCount"]
|
93
54
|
|
@@ -110,6 +71,36 @@ module RallyAPI
|
|
110
71
|
query_result
|
111
72
|
end
|
112
73
|
|
74
|
+
#args should have :method
|
75
|
+
def send_request(url, args, url_params = {})
|
76
|
+
method = args[:method]
|
77
|
+
req_args = { :query => url_params }
|
78
|
+
|
79
|
+
req_headers = @rally_headers.headers
|
80
|
+
if (args[:method] == :post) || (args[:method] == :put)
|
81
|
+
req_headers["Content-Type"] = "application/json"
|
82
|
+
req_headers["Accept"] = "application/json"
|
83
|
+
text_json =args[:payload].to_json
|
84
|
+
req_args[:body] = text_json
|
85
|
+
end
|
86
|
+
req_args[:header] = req_headers
|
87
|
+
|
88
|
+
begin
|
89
|
+
log_info("Rally API calling #{method} - #{url} with #{req_args}") if @low_debug
|
90
|
+
response = @rally_http_client.request(method, url, req_args)
|
91
|
+
rescue Exception => ex
|
92
|
+
msg = "Rally Rest Json: - rescued exception - #{ex.message} on request to #{url} with params #{url_params}"
|
93
|
+
log_info(msg)
|
94
|
+
raise StandardError, msg
|
95
|
+
end
|
96
|
+
|
97
|
+
log_info("RallyAPI response was - #{response.inspect}") if @low_debug
|
98
|
+
json_obj = JSON.parse(response.body) #todo handle null post error
|
99
|
+
errs = check_for_errors(json_obj)
|
100
|
+
raise StandardError, "\nError on request - #{url} - \n#{errs}" if errs[:errors].length > 0
|
101
|
+
json_obj
|
102
|
+
end
|
103
|
+
|
113
104
|
private
|
114
105
|
|
115
106
|
def run_threads(query_array)
|
@@ -132,57 +123,13 @@ module RallyAPI
|
|
132
123
|
Thread.new do
|
133
124
|
thread_results = []
|
134
125
|
request_array.each do |req|
|
135
|
-
page_res =
|
126
|
+
page_res = send_request(req[:url], req[:args], req[:params])
|
136
127
|
thread_results.push({:page_num => req[:page_num], :results => page_res})
|
137
128
|
end
|
138
129
|
thread_results
|
139
130
|
end
|
140
131
|
end
|
141
132
|
|
142
|
-
def send_json_request(url, args, url_params = nil)
|
143
|
-
request_args = {}
|
144
|
-
request_args[:url] = url
|
145
|
-
request_args[:user] = args[:user]
|
146
|
-
request_args[:password] = args[:password]
|
147
|
-
request_args[:method] = args[:method]
|
148
|
-
request_args[:timeout] = 120
|
149
|
-
request_args[:open_timeout] = 120
|
150
|
-
|
151
|
-
r_headers = @rally_headers.headers
|
152
|
-
r_headers[:params] = url_params
|
153
|
-
|
154
|
-
if (args[:method] == :post) || (args[:method] == :put)
|
155
|
-
r_headers[:content_type] = :json
|
156
|
-
r_headers[:accept] = :json
|
157
|
-
request_args[:payload] = args[:payload]
|
158
|
-
end
|
159
|
-
|
160
|
-
request_args[:headers] = r_headers
|
161
|
-
|
162
|
-
begin
|
163
|
-
req = RestClient::Request.new(request_args)
|
164
|
-
log_info(req.url) if @low_debug
|
165
|
-
response = req.execute
|
166
|
-
rescue => ex
|
167
|
-
msg = "Rally Rest Json: - rescued exception - #{ex.message} on request to #{url} with params #{url_params}"
|
168
|
-
log_info(msg)
|
169
|
-
if !@retry_list.has_key?(req.url)
|
170
|
-
@retry_list[req.url] = 0
|
171
|
-
end
|
172
|
-
if (@retries > 0) && (retry_list[req.url] < @retries)
|
173
|
-
@retry_list[req.url] += 1
|
174
|
-
retry
|
175
|
-
end
|
176
|
-
raise StandardError, msg
|
177
|
-
end
|
178
|
-
@retry_list.delete(req.url)
|
179
|
-
log_info(response) if @low_debug
|
180
|
-
json_obj = JSON.parse(response.body) #todo handle null post error
|
181
|
-
errs = check_for_errors(json_obj)
|
182
|
-
raise StandardError, "\nError on request - #{url} - \n#{errs}" if errs[:errors].length > 0
|
183
|
-
json_obj
|
184
|
-
end
|
185
|
-
|
186
133
|
def log_info(message)
|
187
134
|
puts message if @logger.nil?
|
188
135
|
@logger.debug(message) unless @logger.nil?
|
@@ -68,6 +68,7 @@ module RallyAPI
|
|
68
68
|
@logger = args[:logger] || nil #assumes this is an instance of Logger
|
69
69
|
|
70
70
|
@rally_connection = RallyJsonConnection.new(@rally_headers, @low_debug, @proxy_info)
|
71
|
+
@rally_connection.set_client_user(@rally_url, @rally_user, @rally_password)
|
71
72
|
@rally_connection.logger = @logger unless @logger.nil?
|
72
73
|
@rally_connection.retries = @retries if @retries > 0
|
73
74
|
|
@@ -128,9 +129,10 @@ module RallyAPI
|
|
128
129
|
end
|
129
130
|
|
130
131
|
def user
|
131
|
-
args = {:
|
132
|
-
json_response = @rally_connection.
|
133
|
-
|
132
|
+
args = { :method => :get }
|
133
|
+
json_response = @rally_connection.send_request(make_get_url(@rally_objects[:user]), args)
|
134
|
+
rally_type = json_response.keys[0]
|
135
|
+
RallyObject.new(self, json_response[rally_type])
|
134
136
|
end
|
135
137
|
|
136
138
|
|
@@ -142,29 +144,38 @@ module RallyAPI
|
|
142
144
|
fields["Project"] = @rally_default_project._ref unless @rally_default_project.nil?
|
143
145
|
end
|
144
146
|
|
145
|
-
args = {:user => @rally_user, :password => @rally_password }
|
146
147
|
object2create = { rally_type => make_ref_fields(fields) }
|
147
|
-
|
148
|
-
|
148
|
+
args = { :method => :post, :payload => object2create }
|
149
|
+
#json_response = @rally_connection.create_object(make_create_url(rally_type), args, object2create)
|
150
|
+
json_response = @rally_connection.send_request(make_create_url(rally_type), args, object2create)
|
151
|
+
#todo - check for warnings
|
152
|
+
RallyObject.new(self, json_response["CreateResult"]["Object"]).read()
|
149
153
|
end
|
150
154
|
|
151
155
|
|
152
156
|
def read(type, obj_id, params = nil)
|
153
157
|
rally_type = check_type(type)
|
154
158
|
ref = check_id(rally_type, obj_id)
|
155
|
-
args = {:
|
156
|
-
json_response = @rally_connection.read_object(ref, args, params)
|
157
|
-
|
159
|
+
args = { :method => :get }
|
160
|
+
#json_response = @rally_connection.read_object(ref, args, params)
|
161
|
+
json_response = @rally_connection.send_request(ref, args, params)
|
162
|
+
rally_type = json_response.keys[0]
|
163
|
+
RallyObject.new(self, json_response[rally_type])
|
158
164
|
end
|
159
165
|
|
160
166
|
def delete(ref_to_delete)
|
161
|
-
args = {:
|
162
|
-
@rally_connection.delete_object(ref_to_delete, args)
|
167
|
+
args = { :method => :delete }
|
168
|
+
#json_response = @rally_connection.delete_object(ref_to_delete, args)
|
169
|
+
json_response = @rally_connection.send_request(ref_to_delete, args)
|
170
|
+
json_response["OperationResult"]
|
163
171
|
end
|
164
172
|
|
165
173
|
def reread(json_object, params = nil)
|
166
|
-
args = {:
|
167
|
-
@rally_connection.read_object(json_object["_ref"], args, params)
|
174
|
+
args = { :method => :get }
|
175
|
+
#json_response = @rally_connection.read_object(json_object["_ref"], args, params)
|
176
|
+
json_response = @rally_connection.send_request(json_object["_ref"], args, params)
|
177
|
+
rally_type = json_response.keys[0]
|
178
|
+
json_response[rally_type]
|
168
179
|
end
|
169
180
|
|
170
181
|
|
@@ -172,8 +183,10 @@ module RallyAPI
|
|
172
183
|
rally_type = check_type(type)
|
173
184
|
ref = check_id(rally_type, obj_id)
|
174
185
|
json_update = { rally_type => make_ref_fields(fields) }
|
175
|
-
args = {:
|
176
|
-
@rally_connection.update_object(ref, args, json_update)
|
186
|
+
args = { :method => :post, :payload => json_update }
|
187
|
+
#json_response = @rally_connection.update_object(ref, args, json_update)
|
188
|
+
json_response = @rally_connection.send_request(ref, args)
|
189
|
+
#todo check for warnings on json_response["OperationResult"]
|
177
190
|
RallyObject.new(self, reread({"_ref" => ref}))
|
178
191
|
end
|
179
192
|
|
@@ -228,9 +241,10 @@ module RallyAPI
|
|
228
241
|
params[:rankAbove] = short_ref(relative_ref)
|
229
242
|
params[:fetch] = "true"
|
230
243
|
json_update = { get_type_from_ref(ref_to_rank) => {"_ref" => ref_to_rank} }
|
231
|
-
args = {:
|
232
|
-
update = @rally_connection.put_object(ref, args, params, json_update)
|
233
|
-
|
244
|
+
args = { :method => :put, :payload => json_update }
|
245
|
+
#update = @rally_connection.put_object(ref, args, params, json_update)
|
246
|
+
update = @rally_connection.send_request(ref, args, params)
|
247
|
+
RallyObject.new(self, update["OperationResult"]["Object"])
|
234
248
|
end
|
235
249
|
|
236
250
|
#ref to object.js? rankBelow=%2Fhierarchicalrequirement%2F4624552599
|
@@ -240,11 +254,13 @@ module RallyAPI
|
|
240
254
|
params[:rankBelow] = short_ref(relative_ref)
|
241
255
|
params[:fetch] = "true"
|
242
256
|
json_update = { get_type_from_ref(ref_to_rank) => {"_ref" => ref_to_rank} }
|
243
|
-
args = {:
|
244
|
-
update = @rally_connection.put_object(ref, args, params, json_update)
|
245
|
-
|
257
|
+
args = { :method => :put, :payload => json_update }
|
258
|
+
#update = @rally_connection.put_object(ref, args, params, json_update)
|
259
|
+
update = @rally_connection.send_request(ref, args, params)
|
260
|
+
RallyObject.new(self, update["OperationResult"]["Object"])
|
246
261
|
end
|
247
262
|
|
263
|
+
#todo - check support for portfolio item fields
|
248
264
|
def allowed_values(type, field)
|
249
265
|
if type.class == Symbol
|
250
266
|
query_type = @rally_objects[type]
|
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.
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: httpclient
|
16
|
+
requirement: &70172871514240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 2.2.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70172871514240
|
25
25
|
description: API wrapper for Rally's JSON REST web services api
|
26
26
|
email:
|
27
27
|
- dsmith@rallydev.com
|