jiraSOAP 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,17 @@
1
+ Version 0.5
2
+
3
+ * Begin summarizing changes in a changelog
4
+ * Begin abstracting parts of JIRA model
5
+
6
+ * Fixed RemoteAPI#add_version_to_project_with_key
7
+
8
+ * Added RemoteAPI#get_server_configuration
9
+
10
+ * Changed use of factories to constructors in the model
11
+ * Changed FieldValue#id to FieldValue#field_name
12
+ * Changed CustomField to CustomFieldValue
13
+ * Changed User#name to User#username
14
+ * Changed Scheme#type to return the class name
15
+ * Changed some RemoteAPI method names to be more descriptive
16
+ * Changed Avatar#content_type to Avatar#mime_type
17
+ * Various documentation updates
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Mark Rada
1
+ Copyright (c) 2010 Mark Rada
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -3,6 +3,8 @@ jiraSOAP - Ruby interface to the JIRA SOAP API
3
3
 
4
4
  Uses [handsoap](http://wiki.github.com/unwire/handsoap/) to build a client for the JIRA SOAP API that works on MacRuby as well as Ruby 1.9.
5
5
 
6
+ Read the documentation [here](http://rdoc.info/github/Marketcircle/jiraSOAP/master/frames). The meat of the service is in the `RemoteAPI` module.
7
+
6
8
 
7
9
  Motivation
8
10
  ----------
@@ -18,6 +20,7 @@ Pick up where `jira4r` left off:
18
20
  - Implement the current API; `jira4r` does not implement APIs from JIRA 4.x
19
21
  - More natural interface; not adhering to the API when the API is weird
20
22
  - Speed; network latency is bad enough
23
+ - Excellent documentation, since the documentation given by Atlassian is so terse
21
24
 
22
25
 
23
26
  Getting Started
@@ -44,22 +47,16 @@ Once that ugliness is over with, you can run a quick demo (making appropriate su
44
47
 
45
48
  db.logout
46
49
 
47
- Get the [Gist](http://gist.github.com/612186).
48
-
49
- Read the documentation [here](http://rdoc.info/github/Marketcircle/jiraSOAP/master/frames). The meat of the service is in the `RemoteAPI` module.
50
-
51
50
 
52
51
  TODO
53
52
  ----
54
53
 
54
+ - Finish implementing all of the API
55
+ - Stabilize API
55
56
  - Performance optimizations; there are a number of places that can be optimized
56
57
  + Using GCD/Threads for parsing arrays of results; a significant speed up for large types and large arrays (ie. creating issues from JQL searches)
57
- - Refactor for a smaller code base
58
- - Fix type hacks;. dates should be `NSDate`s and URLs should be `NSURL`s, right now they are all strings
59
58
  - Public test suite
60
59
  + Needs a mock server
61
- - Error handling
62
- - Finish implementing all of the API
63
60
 
64
61
 
65
62
  Note on Patches/Pull Requests
data/lib/jiraSOAP.rb CHANGED
@@ -7,10 +7,10 @@ Handsoap.http_driver = :net_http
7
7
 
8
8
  require 'jiraSOAP/url.rb'
9
9
  require 'jiraSOAP/handsoap_extensions.rb'
10
- require 'jiraSOAP/remoteEntities.rb'
11
- require 'jiraSOAP/remoteAPI.rb'
10
+ require 'jiraSOAP/entities.rb'
11
+ require 'jiraSOAP/api.rb'
12
12
 
13
13
  require 'jiraSOAP/JIRAservice.rb'
14
14
 
15
15
  #overrides and additions
16
- require 'lib/macruby_stuff.rb' if RUBY_ENGINE == 'macruby'
16
+ require 'lib/jiraSOAP/macruby_bonuses.rb' if RUBY_ENGINE == 'macruby'
@@ -20,9 +20,13 @@ class JIRAService < Handsoap::Service
20
20
 
21
21
  # @return [String]
22
22
  attr_reader :auth_token
23
+
23
24
  # @return [String]
24
25
  attr_reader :user
25
26
 
27
+ # @return [String]
28
+ attr_reader :endpoint_url
29
+
26
30
  # Factory method to initialize and login.
27
31
  # @param [String] url URL for the JIRA server
28
32
  # @param [String] user JIRA user name to login with
@@ -37,8 +41,6 @@ class JIRAService < Handsoap::Service
37
41
  # Slightly hacky in order to set the endpoint at the initialization.
38
42
  # @param endpoint_url URL for the JIRA server
39
43
  def initialize(endpoint_url)
40
- super
41
-
42
44
  @endpoint_url = endpoint_url
43
45
  endpoint_data = {
44
46
  :uri => "#{endpoint_url}/rpc/soap/jirasoapservice-v2",
@@ -52,8 +54,9 @@ class JIRAService < Handsoap::Service
52
54
  def method_missing(method, *args)
53
55
  message = "#{method} is not a valid method. Check the documentation; the "
54
56
  message << 'method may not be implemented or has changed in recent '
55
- message << 'revisions. The client side API has not been stabilized yet.'
56
- raise NoMethodError, message, caller
57
+ message << 'revisions. The API has not been stabilized yet.'
58
+ STDERR.puts message
59
+ super method, *args
57
60
  end
58
61
 
59
62
  protected
@@ -1,7 +1,15 @@
1
1
  # Contains the API defined by Atlassian for the JIRA SOAP service. The JavaDoc
2
2
  # for the SOAP API is located at http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/com/atlassian/jira/rpc/soap/JiraSoapService.html.
3
3
  # @todo exception handling
4
+ # @todo logging
4
5
  # @todo code refactoring and de-duplication
6
+ # @todo break the API down by task, like Apple's developer documentation
7
+ # @todo deleteProjectAvatar [target v0.5]
8
+ # @todo setProjectAvatar (change to different existing) [target v0.5]
9
+ # @todo setNewProjectAvatar (upload new and set it) [target v0.5]
10
+ # @todo createProjectRole [v0.6]
11
+ # @todo getAvailableActions [target v0.7]
12
+ # @todo progressWorkflowAction [target v0.7]
5
13
  module RemoteAPI
6
14
  # XPath constant to get a node containing a response array.
7
15
  # This could be used for all responses, but is only used in cases where we
@@ -11,7 +19,7 @@ module RemoteAPI
11
19
  # The first method to call; other methods will fail until you are logged in.
12
20
  # @param [String] user JIRA user name to login with
13
21
  # @param [String] password
14
- # @return [true] true if successful, otherwise an exception is thrown
22
+ # @return [boolean] true if successful, otherwise an exception is thrown
15
23
  def login(user, password)
16
24
  response = invoke('soap:login') { |msg|
17
25
  msg.add 'soap:in0', user
@@ -25,12 +33,12 @@ module RemoteAPI
25
33
 
26
34
  # You only need to call this to make an explicit logout; normally, a session
27
35
  # will automatically expire after a set time (configured on the server).
28
- # @return [true] true if successful, otherwise false
36
+ # @return [boolean] true if successful, otherwise false
29
37
  def logout
30
38
  response = invoke('soap:logout') { |msg|
31
39
  msg.add 'soap:in0', @auth_token
32
40
  }
33
- response.document.xpath('//logoutReturn').first.to_s == 'true'
41
+ response.document.xpath('//logoutReturn').to_boolean
34
42
  end
35
43
 
36
44
  # @return [[JIRA::Priority]]
@@ -39,8 +47,7 @@ module RemoteAPI
39
47
  msg.add 'soap:in0', @auth_token
40
48
  }
41
49
  response.document.xpath("#{RESPONSE_XPATH}/getPrioritiesReturn").map {
42
- |frag|
43
- JIRA::Priority.priority_with_xml_fragment frag
50
+ |frag| JIRA::Priority.new_with_xml_fragment frag
44
51
  }
45
52
  end
46
53
 
@@ -50,8 +57,7 @@ module RemoteAPI
50
57
  msg.add 'soap:in0', @auth_token
51
58
  }
52
59
  response.document.xpath("#{RESPONSE_XPATH}/getResolutionsReturn").map {
53
- |frag|
54
- JIRA::Resolution.resolution_with_xml_fragment frag
60
+ |frag| JIRA::Resolution.new_with_xml_fragment frag
55
61
  }
56
62
  end
57
63
 
@@ -61,8 +67,7 @@ module RemoteAPI
61
67
  msg.add 'soap:in0', @auth_token
62
68
  }
63
69
  response.document.xpath("#{RESPONSE_XPATH}/getCustomFieldsReturn").map {
64
- |frag|
65
- JIRA::Field.field_with_xml_fragment frag
70
+ |frag| JIRA::Field.new_with_xml_fragment frag
66
71
  }
67
72
  end
68
73
 
@@ -72,8 +77,7 @@ module RemoteAPI
72
77
  msg.add 'soap:in0', @auth_token
73
78
  }
74
79
  response.document.xpath("#{RESPONSE_XPATH}/getIssueTypesReturn").map {
75
- |frag|
76
- JIRA::IssueType.issue_type_with_xml_fragment frag
80
+ |frag| JIRA::IssueType.new_with_xml_fragment frag
77
81
  }
78
82
  end
79
83
 
@@ -83,19 +87,17 @@ module RemoteAPI
83
87
  msg.add 'soap:in0', @auth_token
84
88
  }
85
89
  response.document.xpath("#{RESPONSE_XPATH}/getStatusesReturn").map {
86
- |frag|
87
- JIRA::Status.status_with_xml_fragment frag
90
+ |frag| JIRA::Status.new_with_xml_fragment frag
88
91
  }
89
92
  end
90
93
 
91
- # @return [[JIRA::Scheme]]
94
+ # @return [[JIRA::NotificationScheme]]
92
95
  def get_notification_schemes
93
96
  response = invoke('soap:getNotificationSchemes') { |msg|
94
97
  msg.add 'soap:in0', @auth_token
95
98
  }
96
99
  response.document.xpath("#{RESPONSE_XPATH}/getNotificationSchemesReturn").map {
97
- |frag|
98
- JIRA::Scheme.scheme_with_xml_fragment frag
100
+ |frag| JIRA::NotificationScheme.new_with_xml_fragment frag
99
101
  }
100
102
  end
101
103
 
@@ -107,11 +109,13 @@ module RemoteAPI
107
109
  msg.add 'soap:in1', project_key
108
110
  }
109
111
  response.document.xpath("#{RESPONSE_XPATH}/getVersionsReturn").map {
110
- |frag|
111
- JIRA::Version.version_with_xml_fragment frag
112
+ |frag| JIRA::Version.new_with_xml_fragment frag
112
113
  }
113
114
  end
114
115
 
116
+ # You need to explicitly ask for schemes in order to get them. By
117
+ # default, most project fetching methods purposely leave out all
118
+ # the scheme information as permission schemes can be very large.
115
119
  # @param [String] project_key
116
120
  # @return [JIRA::Project]
117
121
  def get_project_with_key(project_key)
@@ -119,8 +123,7 @@ module RemoteAPI
119
123
  msg.add 'soap:in0', @auth_token
120
124
  msg.add 'soap:in1', project_key
121
125
  }
122
- frag = response.document.xpath '//getProjectByKeyReturn'
123
- JIRA::Project.project_with_xml_fragment frag
126
+ JIRA::Project.new_with_xml_fragment response.document.xpath('//getProjectByKeyReturn').first
124
127
  end
125
128
 
126
129
  # @param [String] user_name
@@ -130,7 +133,7 @@ module RemoteAPI
130
133
  msg.add 'soap:in0', @auth_token
131
134
  msg.add 'soap:in1', user_name
132
135
  }
133
- JIRA::User.user_with_xml_fragment response.document.xpath '//getUserReturn'
136
+ JIRA::User.new_with_xml_fragment response.document.xpath('//getUserReturn').first
134
137
  end
135
138
 
136
139
  # Gets you the default avatar image for a project; if you want all
@@ -142,11 +145,11 @@ module RemoteAPI
142
145
  msg.add 'soap:in0', @auth_token
143
146
  msg.add 'soap:in1', project_key
144
147
  }
145
- JIRA::Avatar.avatar_with_xml_fragment response.document.xpath '//getProjectAvatarReturn'
148
+ JIRA::Avatar.new_with_xml_fragment response.document.xpath('//getProjectAvatarReturn').first
146
149
  end
147
150
 
148
- # Gets ALL avatars for a given project use this method; if you
149
- # just want the default avatar, use {#get_project_avatar_for_key}.
151
+ # Gets ALL avatars for a given project with this method; if you
152
+ # just want the project avatar, use {#get_project_avatar_for_key}.
150
153
  # @param [String] project_key
151
154
  # @param [boolean] include_default_avatars
152
155
  # @return [[JIRA::Avatar]]
@@ -157,8 +160,7 @@ module RemoteAPI
157
160
  msg.add 'soap:in2', include_default_avatars
158
161
  }
159
162
  response.document.xpath("#{RESPONSE_XPATH}/getProjectAvatarsReturn").map {
160
- |frag|
161
- JIRA::Avatar.avatar_with_xml_fragment frag
163
+ |frag| JIRA::Avatar.new_with_xml_fragment frag
162
164
  }
163
165
  end
164
166
 
@@ -181,29 +183,27 @@ module RemoteAPI
181
183
  msg.add 'soap:in2', max_results
182
184
  }
183
185
  response.document.xpath("#{RESPONSE_XPATH}/getIssuesFromJqlSearchReturn").map {
184
- |frag|
185
- JIRA::Issue.issue_with_xml_fragment frag
186
+ |frag| JIRA::Issue.new_with_xml_fragment frag
186
187
  }
187
188
  end
188
189
 
189
- # This method can update most, but not all, issue fields.
190
+ # This method can update most, but not all, issue fields. Some limitations
191
+ # are because of how the API is designed, and some are because I have not
192
+ # yet implemented the ability to update fields made of custom objects (things
193
+ # in the JIRA module).
190
194
  #
191
195
  # Fields known to not update via this method:
192
196
  # - status - use {#progress_workflow_action}
193
- # - attachments - use {#add_base64_encoded_attachment_to_issue}
197
+ # - attachments - use {#add_base64_encoded_attachments_to_issue_with_key}
194
198
  #
195
199
  # Though JIRA::FieldValue objects have an id field, they do not expect to be
196
200
  # given id values. You must use the name of the field you wish to update.
197
201
  # @example Usage With A Normal Field
198
- # summary = JIRA::FieldValue.new
199
- # summary.id = 'summary'
200
- # summary.values = ['My new summary']
202
+ # summary = JIRA::FieldValue.new 'summary', ['My new summary']
201
203
  # @example Usage With A Custom Field
202
- # custom_field = JIRA::FieldValue.new
203
- # custom_field.id = 'customfield_10060'
204
- # custom_field.values = ['123456']
204
+ # custom_field = JIRA::FieldValue.new 'customfield_10060', ['123456']
205
205
  # @example Setting a field to be blank/nil
206
- # description = JIRA::FieldValue.field_value_with_nil_values 'description'
206
+ # description = JIRA::FieldValue.new 'description'
207
207
  # @example Calling the method to update an issue
208
208
  # jira_service_instance.update_issue 'PROJECT-1', description, custom_field
209
209
  # @param [String] issue_key
@@ -217,8 +217,7 @@ module RemoteAPI
217
217
  field_values.each { |fv| fv.soapify_for submsg }
218
218
  end
219
219
  }
220
- frag = response.document.xpath '//updateIssueReturn'
221
- JIRA::Issue.issue_with_xml_fragment frag
220
+ JIRA::Issue.new_with_xml_fragment response.document.xpath('//updateIssueReturn').first
222
221
  end
223
222
 
224
223
  # Some fields will be ignored when an issue is created.
@@ -238,8 +237,7 @@ module RemoteAPI
238
237
  issue.soapify_for submsg
239
238
  end
240
239
  }
241
- frag = response.document.xpath '//createIssueReturn'
242
- JIRA::Issue.issue_with_xml_fragment frag
240
+ JIRA::Issue.new_with_xml_fragment response.document.xpath('//createIssueReturn').first
243
241
  end
244
242
 
245
243
  # @param [String] issue_key
@@ -249,8 +247,7 @@ module RemoteAPI
249
247
  msg.add 'soap:in0', @auth_token
250
248
  msg.add 'soap:in1', issue_key
251
249
  }
252
- frag = response.document.xpath '//getIssueReturn'
253
- JIRA::Issue.issue_with_xml_fragment frag
250
+ JIRA::Issue.new_with_xml_fragment response.document.xpath('//getIssueReturn').first
254
251
  end
255
252
 
256
253
  # @param [String] issue_id
@@ -260,8 +257,7 @@ module RemoteAPI
260
257
  msg.add 'soap:in0', @auth_token
261
258
  msg.add 'soap:in1', issue_id
262
259
  }
263
- frag = response.document.xpath '//getIssueByIdReturn'
264
- JIRA::Issue.issue_with_xml_fragment frag
260
+ JIRA::Issue.new_with_xml_fragment response.document.xpath('//getIssueByIdReturn').first
265
261
  end
266
262
 
267
263
  # @param [String] issue_key
@@ -272,8 +268,7 @@ module RemoteAPI
272
268
  msg.add 'soap:in1', issue_key
273
269
  }
274
270
  response.document.xpath("#{RESPONSE_XPATH}/getAttachmentsFromIssueReturn").map {
275
- |frag|
276
- JIRA::AttachmentMetadata.attachment_with_xml_fragment frag
271
+ |frag| JIRA::AttachmentMetadata.new_with_xml_fragment frag
277
272
  }
278
273
  end
279
274
 
@@ -289,14 +284,13 @@ module RemoteAPI
289
284
  # @param [String] project_key
290
285
  # @param [JIRA::Version] version
291
286
  # @return [JIRA::Version]
292
- def add_version_to_project(project_key, version)
287
+ def add_version_to_project_with_key(project_key, version)
293
288
  response = invoke('soap:addVersion') { |msg|
294
289
  msg.add 'soap:in0', @auth_token
295
290
  msg.add 'soap:in1', project_key
296
291
  msg.add 'soap:in2' do |submsg| version.soapify_for submsg end
297
292
  }
298
- frag = response.document.xpath '//addVersionReturn'
299
- JIRA::Version.version_with_xml_fragment frag
293
+ JIRA::Version.new_with_xml_fragment response.document.xpath('//addVersionReturn').first
300
294
  end
301
295
 
302
296
  # The archive state can only be set to true for versions that have not been
@@ -326,8 +320,7 @@ module RemoteAPI
326
320
  msg.add 'soap:in0', @auth_token
327
321
  msg.add 'soap:in1' do |submsg| project.soapify_for submsg end
328
322
  }
329
- frag = response.document.xpath '//createProjectFromObjectReturn'
330
- JIRA::Project.project_with_xml_fragment frag
323
+ JIRA::Project.new_with_xml_fragment response.document.xpath('//createProjectFromObjectReturn').first
331
324
  end
332
325
 
333
326
  # You can set the release state for a project with this method.
@@ -352,8 +345,7 @@ module RemoteAPI
352
345
  msg.add 'soap:in0', @auth_token
353
346
  msg.add 'soap:in1' do |submsg| project.soapify_for submsg end
354
347
  }
355
- frag = response.document.xpath '//updateProjectReturn'
356
- JIRA::Project.project_with_xml_fragment frag
348
+ JIRA::Project.new_with_xml_fragment response.document.xpath('//updateProjectReturn').first
357
349
  end
358
350
 
359
351
  # It seems that creating a user without any permission groups will trigger
@@ -374,8 +366,7 @@ module RemoteAPI
374
366
  msg.add 'soap:in3', full_name
375
367
  msg.add 'soap:in4', email
376
368
  }
377
- frag = response.document.xpath '//createUserReturn'
378
- JIRA::User.user_with_xml_fragment frag
369
+ JIRA::User.new_with_xml_fragment response.document.xpath('//createUserReturn').first
379
370
  end
380
371
 
381
372
  # @param [String] username
@@ -395,8 +386,7 @@ module RemoteAPI
395
386
  msg.add 'soap:in0', @auth_token
396
387
  msg.add 'soap:in1', project_id
397
388
  }
398
- frag = response.document.xpath '//getProjectByIdReturn'
399
- JIRA::Project.project_with_xml_fragment frag
389
+ JIRA::Project.new_with_xml_fragment response.document.xpath('//getProjectByIdReturn').first
400
390
  end
401
391
 
402
392
  # @todo parse the permission scheme
@@ -408,8 +398,7 @@ module RemoteAPI
408
398
  msg.add 'soap:in0', @auth_token
409
399
  msg.add 'soap:in1', project_id
410
400
  }
411
- frag = response.document.xpath '//getProjectWithSchemesByIdReturn'
412
- JIRA::Project.project_with_xml_fragment frag
401
+ JIRA::Project.new_with_xml_fragment response.document.xpath('//getProjectWithSchemesByIdReturn').first
413
402
  end
414
403
 
415
404
  # @param [String] issue_key
@@ -431,8 +420,7 @@ module RemoteAPI
431
420
  msg.add 'soap:in0', @auth_token
432
421
  msg.add 'soap:in1', id
433
422
  }
434
- frag = response.document.xpath '//getCommentReturn'
435
- JIRA::Comment.comment_with_xml_fragment frag
423
+ JIRA::Comment.new_with_xml_fragment response.document.xpath('//getCommentReturn').first
436
424
  end
437
425
 
438
426
  # @param [String] issue_key
@@ -443,8 +431,7 @@ module RemoteAPI
443
431
  msg.add 'soap:in1', issue_key
444
432
  }
445
433
  response.document.xpath("#{RESPONSE_XPATH}/getCommentsReturn").map {
446
- |frag|
447
- JIRA::Comment.comment_with_xml_fragment frag
434
+ |frag| JIRA::Comment.new_with_xml_fragment frag
448
435
  }
449
436
  end
450
437
 
@@ -456,8 +443,7 @@ module RemoteAPI
456
443
  msg.add 'soap:in1', project_id
457
444
  }
458
445
  response.document.xpath("#{RESPONSE_XPATH}/getIssueTypesForProjectReturn").map {
459
- |frag|
460
- JIRA::IssueType.issue_type_with_xml_fragment frag
446
+ |frag| JIRA::IssueType.new_with_xml_fragment frag
461
447
  }
462
448
  end
463
449
 
@@ -475,8 +461,7 @@ module RemoteAPI
475
461
  msg.add 'soap:in3', max_results
476
462
  }
477
463
  response.document.xpath("#{RESPONSE_XPATH}/getIssuesFromTextSearchWithLimitReturn").map {
478
- |frag|
479
- JIRA::Issue.issue_with_xml_fragment frag
464
+ |frag| JIRA::Issue.new_with_xml_fragment frag
480
465
  }
481
466
  end
482
467
 
@@ -487,8 +472,8 @@ module RemoteAPI
487
472
  msg.add 'soap:in0', @auth_token
488
473
  msg.add 'soap:in1' do |submsg| comment.soapify_for submsg end
489
474
  }
490
- frag = response.document.xpath '//editCommentReturn'
491
- JIRA::Comment.comment_with_xml_fragment frag
475
+ frag = response.document.xpath('//editCommentReturn').first
476
+ JIRA::Comment.new_with_xml_fragment frag
492
477
  end
493
478
 
494
479
  # @return [[JIRA::IssueType]]
@@ -497,8 +482,7 @@ module RemoteAPI
497
482
  msg.add 'soap:in0', @auth_token
498
483
  }
499
484
  response.document.xpath("#{RESPONSE_XPATH}/getSubTaskIssueTypesReturn").map {
500
- |frag|
501
- JIRA::IssueType.issue_type_with_xml_fragment frag
485
+ |frag| JIRA::IssueType.new_with_xml_fragment frag
502
486
  }
503
487
  end
504
488
 
@@ -510,8 +494,7 @@ module RemoteAPI
510
494
  msg.add 'soap:in1', project_id
511
495
  }
512
496
  response.document.xpath("#{RESPONSE_XPATH}/getSubtaskIssueTypesForProjectReturn").map {
513
- |frag|
514
- JIRA::IssueType.issue_type_with_xml_fragment frag
497
+ |frag| JIRA::IssueType.new_with_xml_fragment frag
515
498
  }
516
499
  end
517
500
 
@@ -532,8 +515,7 @@ module RemoteAPI
532
515
  msg.add 'soap:in0', @auth_token
533
516
  }
534
517
  response.document.xpath("#{RESPONSE_XPATH}/getFavouriteFiltersReturn").map {
535
- |frag|
536
- JIRA::Filter.filter_with_xml_fragment frag
518
+ |frag| JIRA::Filter.new_with_xml_fragment frag
537
519
  }
538
520
  end
539
521
 
@@ -549,8 +531,7 @@ module RemoteAPI
549
531
  msg.add 'soap:in3', max_results
550
532
  }
551
533
  response.document.xpath("#{RESPONSE_XPATH}/getIssuesFromFilterWithLimitReturn").map {
552
- |frag|
553
- JIRA::Issue.issue_with_xml_fragment frag
534
+ |frag| JIRA::Issue.new_with_xml_fragment frag
554
535
  }
555
536
  end
556
537
 
@@ -561,7 +542,7 @@ module RemoteAPI
561
542
  msg.add 'soap:in0', @auth_token
562
543
  msg.add 'soap:in1', id
563
544
  }
564
- response.document.xpath('//getIssueCountForFilterReturn').to_s.to_i
545
+ response.document.xpath('//getIssueCountForFilterReturn').to_i
565
546
  end
566
547
 
567
548
  # @todo optimize building the message, try a single pass
@@ -590,15 +571,14 @@ module RemoteAPI
590
571
  response = invoke('soap:getServerInfo') { |msg|
591
572
  msg.add 'soap:in0', @auth_token
592
573
  }
593
- frag = response.document.xpath '//getServerInfoReturn'
594
- JIRA::ServerInfo.server_info_with_xml_fragment frag
574
+ JIRA::ServerInfo.new_with_xml_fragment response.document.xpath('//getServerInfoReturn').first
595
575
  end
596
- end
597
576
 
598
- #TODO: v0.5
599
- # createProjectRole
600
- # deleteProjectAvatar
601
- # getAvailableActions
602
- # progressWorkflowAction
603
- # setProjectAvatar (change to different existing)
604
- # setNewProjectAvatar (upload new and set it)
577
+ # @return [JIRA::ServerConfiguration]
578
+ def get_server_configuration
579
+ response = invoke('soap:getConfiguration') { |msg|
580
+ msg.add 'soap:in0', @auth_token
581
+ }
582
+ JIRA::ServerConfiguration.new_with_xml_fragment response.document.xpath('//getConfigurationReturn').first
583
+ end
584
+ end