jiraSOAP 0.3.0 → 0.4.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/README.markdown CHANGED
@@ -23,7 +23,7 @@ Pick up where `jira4r` left off:
23
23
  Getting Started
24
24
  ---------------
25
25
 
26
- `jiraSOAP` should run on Ruby 1.9.2 and MacRuby 0.7. Right now you need to build from source, it will be available from gemcutter sometime around the 0.1.0 or 0.2.0 release.
26
+ `jiraSOAP` should run on Ruby 1.9.2 and MacRuby 0.8. You can install it using `gem`, or build from source:
27
27
 
28
28
  git clone git://github.com/Marketcircle/jiraSOAP.git
29
29
  rake build
@@ -18,12 +18,16 @@ module JIRA
18
18
  class JIRAService < Handsoap::Service
19
19
  include RemoteAPI
20
20
 
21
- attr_reader :auth_token, :user
21
+ # @return [String]
22
+ attr_reader :auth_token
23
+ # @return [String]
24
+ attr_reader :user
22
25
 
23
26
  # Factory method to initialize and login.
24
27
  # @param [String] url URL for the JIRA server
25
28
  # @param [String] user JIRA user name to login with
26
29
  # @param [String] password
30
+ # @return [JIRA::JIRAService]
27
31
  def self.instance_with_endpoint(url, user, password)
28
32
  jira = JIRAService.new url
29
33
  jira.login user, password
@@ -44,10 +48,11 @@ class JIRAService < Handsoap::Service
44
48
  end
45
49
 
46
50
  # Something to help users out until the rest of the API is implemented.
51
+ # @return [nil]
47
52
  def method_missing(method, *args)
48
- message = 'Check the documentation; the method may not be implemented or '
49
- message << 'has changed in recent revisions. The client side API has not '
50
- message << 'been stabilized yet.'
53
+ message = "#{method} is not a valid method. Check the documentation; the "
54
+ message << 'method may not be implemented or has changed in recent '
55
+ message << 'revisions. The client side API has not been stabilized yet.'
51
56
  raise NoMethodError, message, caller
52
57
  end
53
58
 
@@ -1,7 +1,7 @@
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
- #@todo exception handling
4
- #@todo code refactoring and de-duplication
3
+ # @todo exception handling
4
+ # @todo code refactoring and de-duplication
5
5
  module RemoteAPI
6
6
  # XPath constant to get a node containing a response array.
7
7
  # This could be used for all responses, but is only used in cases where we
@@ -168,6 +168,8 @@ module RemoteAPI
168
168
  # During my own testing, I found that HTTP requests could timeout for really
169
169
  # large requests (~2500 results). So I set a more reasonable upper limit;
170
170
  # feel free to override it, but be aware of the potential issues.
171
+ #
172
+ # The JIRA::Issue structure does not include any comments or attachments.
171
173
  # @param [String] jql_query JQL query as a string
172
174
  # @param [Fixnum] max_results limit on number of returned results;
173
175
  # the value may be overridden by the server if max_results is too large
@@ -328,20 +330,21 @@ module RemoteAPI
328
330
  JIRA::Project.project_with_xml_fragment frag
329
331
  end
330
332
 
331
- # @todo test this method
333
+ # You can set the release state for a project with this method.
332
334
  # @param [String] project_name
333
335
  # @param [JIRA::Version] version
334
336
  # @return [boolean] true, throws an exception otherwise
335
- def release_version_for_project(project_name, version)
337
+ def release_state_for_version_for_project(project_name, version)
336
338
  response = invoke('soap:releaseVersion') { |msg|
337
339
  msg.add 'soap:in0', @auth_token
338
340
  msg.add 'soap:in1', project_name
339
- msg.add 'soap:in2', version.id
341
+ msg.add 'soap:in2' do |submsg| version.soapify_for submsg end
340
342
  }
341
343
  true
342
344
  end
343
345
 
344
- # @todo test this method
346
+ # The id of the project is the only field that you cannot update. Or, at
347
+ # least the only field I know that you cannot update.
345
348
  # @param [JIRA::Project] project
346
349
  # @return [JIRA::Project]
347
350
  def update_project_with_project(project)
@@ -353,12 +356,16 @@ module RemoteAPI
353
356
  JIRA::Project.project_with_xml_fragment frag
354
357
  end
355
358
 
356
- # @todo test this method
359
+ # It seems that creating a user without any permission groups will trigger
360
+ # an exception on some versions of JIRA. The irony is that this method provides
361
+ # no way to add groups. The good news though, is that the creation will still
362
+ # happen; but the user will have no permissions.
357
363
  # @param [String] username
358
364
  # @param [String] password
359
365
  # @param [String] full_name
360
366
  # @param [String] email
361
- # @return [JIRA::User]
367
+ # @return [JIRA::User,nil] depending on your JIRA version, this method may
368
+ # always raise an exception instead of actually returning anythin
362
369
  def create_user(username, password, full_name, email)
363
370
  response = invoke('soap:createUser') { |msg|
364
371
  msg.add 'soap:in0', @auth_token
@@ -371,7 +378,6 @@ module RemoteAPI
371
378
  JIRA::User.user_with_xml_fragment frag
372
379
  end
373
380
 
374
- # @todo test this method
375
381
  # @param [String] username
376
382
  # @return [boolean] true if successful, throws an exception otherwise
377
383
  def delete_user_with_name(username)
@@ -382,7 +388,6 @@ module RemoteAPI
382
388
  true
383
389
  end
384
390
 
385
- # @todo test this method
386
391
  # @param [String] project_id
387
392
  # @return [JIRA::Project]
388
393
  def get_project_with_id(project_id)
@@ -394,10 +399,11 @@ module RemoteAPI
394
399
  JIRA::Project.project_with_xml_fragment frag
395
400
  end
396
401
 
397
- # @todo test this method
402
+ # @todo parse the permission scheme
403
+ # Note: this method does not yet include the permission scheme.
398
404
  # @param [String] project_id
399
405
  # @return [JIRA::Project]
400
- def get_project_including_schemes_by_id(project_id)
406
+ def get_project_including_schemes_with_id(project_id)
401
407
  response = invoke('soap:getProjectWithSchemesById') { |msg|
402
408
  msg.add 'soap:in0', @auth_token
403
409
  msg.add 'soap:in1', project_id
@@ -406,11 +412,10 @@ module RemoteAPI
406
412
  JIRA::Project.project_with_xml_fragment frag
407
413
  end
408
414
 
409
- # @todo test this method
410
415
  # @param [String] issue_key
411
416
  # @param [JIRA::Comment] comment
412
417
  # @return [boolean] true if successful, throws an exception otherwise
413
- def add_comment_to_issue(issue_key, comment)
418
+ def add_comment_to_issue_with_key(issue_key, comment)
414
419
  response = invoke('soap:addComment') { |msg|
415
420
  msg.add 'soap:in0', @auth_token
416
421
  msg.add 'soap:in1', issue_key
@@ -419,7 +424,6 @@ module RemoteAPI
419
424
  true
420
425
  end
421
426
 
422
- # @todo test this method
423
427
  # @param [String] id
424
428
  # @return [JIRA::Comment]
425
429
  def get_comment_with_id(id)
@@ -431,10 +435,9 @@ module RemoteAPI
431
435
  JIRA::Comment.comment_with_xml_fragment frag
432
436
  end
433
437
 
434
- # @todo test this method
435
438
  # @param [String] issue_key
436
439
  # @return [[JIRA::Comment]]
437
- def get_comments_for_issue(issue_key)
440
+ def get_comments_for_issue_with_key(issue_key)
438
441
  response = invoke('soap:getComments') { |msg|
439
442
  msg.add 'soap:in0', @auth_token
440
443
  msg.add 'soap:in1', issue_key
@@ -445,7 +448,6 @@ module RemoteAPI
445
448
  }
446
449
  end
447
450
 
448
- # @todo test this method
449
451
  # @param [String] project_name
450
452
  # @return [[JIRA::IssueType]]
451
453
  def get_issue_types_for_project_with_id(project_id)
@@ -459,7 +461,8 @@ module RemoteAPI
459
461
  }
460
462
  end
461
463
 
462
- # @todo test this method
464
+ # This method does not work right now for reasons that I do not understand.
465
+ # @todo fix this method
463
466
  # @param [String] query
464
467
  # @param [Fixnum] max_results
465
468
  # @param [Fixnum] offset
@@ -477,7 +480,6 @@ module RemoteAPI
477
480
  }
478
481
  end
479
482
 
480
- # @todo test this method
481
483
  # @param [JIRA::Comment] comment
482
484
  # @return [JIRA::Comment]
483
485
  def update_comment(comment)
@@ -489,19 +491,17 @@ module RemoteAPI
489
491
  JIRA::Comment.comment_with_xml_fragment frag
490
492
  end
491
493
 
492
- # @todo test this method
493
494
  # @return [[JIRA::IssueType]]
494
495
  def get_subtask_issue_types
495
496
  response = invoke('soap:getSubTaskIssueTypes') { |msg|
496
497
  msg.add 'soap:in0', @auth_token
497
498
  }
498
- response.document.xpath("#{RESPONSE_XPATH}/getSubtaskIssueTypesReturn").map {
499
+ response.document.xpath("#{RESPONSE_XPATH}/getSubTaskIssueTypesReturn").map {
499
500
  |frag|
500
501
  JIRA::IssueType.issue_type_with_xml_fragment frag
501
502
  }
502
503
  end
503
504
 
504
- # @todo test this method
505
505
  # @param [String] project_id
506
506
  # @return [[JIRA::IssueType]]
507
507
  def get_subtask_issue_types_for_project_with_id(project_id)
@@ -515,7 +515,7 @@ module RemoteAPI
515
515
  }
516
516
  end
517
517
 
518
- # @todo test this method
518
+ # I have no idea what this method does.
519
519
  # @todo find out what this method does
520
520
  # @return [boolean] true if successful, throws an exception otherwise
521
521
  def refresh_custom_fields
@@ -525,9 +525,8 @@ module RemoteAPI
525
525
  true
526
526
  end
527
527
 
528
- # @todo test this method
529
528
  # Retrieves favourite filters for the currently logged in user.
530
- # @return [JIRA::Filter]
529
+ # @return [[JIRA::Filter]]
531
530
  def get_favourite_filters
532
531
  response = invoke('soap:getFavouriteFilters') { |msg|
533
532
  msg.add 'soap:in0', @auth_token
@@ -538,7 +537,6 @@ module RemoteAPI
538
537
  }
539
538
  end
540
539
 
541
- # @todo test this method
542
540
  # @param [String] id
543
541
  # @param [Fixnum] max_results
544
542
  # @param [Fixnum] offset
@@ -556,7 +554,6 @@ module RemoteAPI
556
554
  }
557
555
  end
558
556
 
559
- # @todo test this method
560
557
  # @param [String] id
561
558
  # @return [Fixnum]
562
559
  def get_issue_count_for_filter_with_id(id)
@@ -567,14 +564,13 @@ module RemoteAPI
567
564
  response.document.xpath('//getIssueCountForFilterReturn').to_s.to_i
568
565
  end
569
566
 
570
- # @todo test this method
571
567
  # @todo optimize building the message, try a single pass
572
568
  # Expect this method to be slow.
573
569
  # @param [String] issue_key
574
570
  # @param [[String]] filenames names to put on the files
575
571
  # @param [[String]] data base64 encoded data
576
572
  # @return [boolean] true if successful, otherwise an exception is thrown
577
- def add_base64_encoded_attachments_to_issue(issue_key, filenames, data)
573
+ def add_base64_encoded_attachments_to_issue_with_key(issue_key, filenames, data)
578
574
  response = invoke('soap:addBase64EncodedAttachmentsToIssue') { |msg|
579
575
  msg.add 'soap:in0', @auth_token
580
576
  msg.add 'soap:in1', issue_key
@@ -588,7 +584,7 @@ module RemoteAPI
588
584
  true
589
585
  end
590
586
 
591
- # @todo test this method
587
+ # The @build_date attribute is a Time value, but does not include a time.
592
588
  # @return [JIRA::ServerInfo]
593
589
  def get_server_info
594
590
  response = invoke('soap:getServerInfo') { |msg|
@@ -599,7 +595,7 @@ module RemoteAPI
599
595
  end
600
596
  end
601
597
 
602
- #TODO: v0.3
598
+ #TODO: v0.5
603
599
  # createProjectRole
604
600
  # deleteProjectAvatar
605
601
  # getAvailableActions
@@ -2,7 +2,16 @@ module JIRA
2
2
 
3
3
  # Represents a priority level. Straightforward.
4
4
  class Priority
5
- attr_accessor :id, :name, :color, :icon, :description
5
+ # @return [String]
6
+ attr_accessor :id
7
+ # @return [String]
8
+ attr_accessor :name
9
+ # @return [String] is a hex value
10
+ attr_accessor :color
11
+ # @return [URL] A NSURL on MacRuby and a URI::HTTP object in CRuby
12
+ attr_accessor :icon
13
+ # @return [String]
14
+ attr_accessor :description
6
15
 
7
16
  # Factory method that takes a fragment of a SOAP response.
8
17
  # @todo change @color to be some kind of hex Fixnum object
@@ -23,7 +32,14 @@ end
23
32
 
24
33
  # Represents a resolution. Straightforward.
25
34
  class Resolution
26
- attr_accessor :id, :name, :icon, :description
35
+ # @return [String]
36
+ attr_accessor :id
37
+ # @return [String]
38
+ attr_accessor :name
39
+ # @return [URL] A NSURL on MacRuby and a URI::HTTP object in CRuby
40
+ attr_accessor :icon
41
+ # @return [String]
42
+ attr_accessor :description
27
43
 
28
44
  # Factory method that takes a fragment of a SOAP response.
29
45
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -42,7 +58,10 @@ end
42
58
 
43
59
  # Represents a field mapping.
44
60
  class Field
45
- attr_accessor :id, :name
61
+ # @return [String]
62
+ attr_accessor :id
63
+ # @return [String]
64
+ attr_accessor :name
46
65
 
47
66
  # Factory method that takes a fragment of a SOAP response.
48
67
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -59,7 +78,12 @@ end
59
78
  # Represents a custom field with values.
60
79
  # @todo see if @key is always nil from the server
61
80
  class CustomField
62
- attr_accessor :id, :key, :values
81
+ # @return [String]
82
+ attr_accessor :id
83
+ # @return [String]
84
+ attr_accessor :key
85
+ # @return [[String]]
86
+ attr_accessor :values
63
87
 
64
88
  # Factory method that takes a fragment of a SOAP response.
65
89
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -88,8 +112,16 @@ end
88
112
 
89
113
  # Represents and issue type. Straight forward.
90
114
  class IssueType
91
- attr_accessor :id, :name, :icon, :description
92
- attr_writer :subtask
115
+ # @return [String]
116
+ attr_accessor :id
117
+ # @return [String]
118
+ attr_accessor :name
119
+ # @return [URL]
120
+ attr_accessor :icon
121
+ # @return [String]
122
+ attr_accessor :description
123
+ # @return [boolean]
124
+ attr_accessor :subtask
93
125
 
94
126
  # @return [boolean] true if the issue type is a subtask, otherwise false
95
127
  def subtask?; @subtask; end
@@ -102,7 +134,7 @@ class IssueType
102
134
  issue_type = IssueType.new
103
135
  issue_type.id = frag.xpath('id').to_s
104
136
  issue_type.name = frag.xpath('name').to_s
105
- issue_type.subtask = frag.xpath('subtask').to_s == 'true'
137
+ issue_type.subtask = frag.xpath('subTask').to_s == 'true'
106
138
  issue_type.description = frag.xpath('description').to_s
107
139
  url = frag.xpath('icon').to_s
108
140
  issue_type.icon = URL.new url unless url.nil?
@@ -112,8 +144,22 @@ end
112
144
 
113
145
  # Represents a comment. Straight forward.
114
146
  class Comment
115
- attr_accessor :id, :original_author, :role_level, :group_level, :body
116
- attr_accessor :create_date, :last_updated, :update_author
147
+ # @return [String]
148
+ attr_accessor :id
149
+ # @return [String]
150
+ attr_accessor :original_author
151
+ # @return [String]
152
+ attr_accessor :role_level
153
+ # @return [String]
154
+ attr_accessor :group_level
155
+ # @return [String]
156
+ attr_accessor :body
157
+ # @return [Time]
158
+ attr_accessor :create_date
159
+ # @return [Time]
160
+ attr_accessor :last_updated
161
+ # @return [String]
162
+ attr_accessor :update_author
117
163
 
118
164
  # Factory method that takes a fragment of a SOAP response.
119
165
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -140,17 +186,22 @@ class Comment
140
186
  msg.add 'id', @id
141
187
  msg.add 'author', @original_author
142
188
  msg.add 'body', @body
143
- msg.add 'created', @created
144
189
  msg.add 'groupLevel', @group_level
145
190
  msg.add 'roleLevel', @role_level
146
191
  msg.add 'updateAuthor', @update_author
147
- msg.add 'updated', @last_updated
148
192
  end
149
193
  end
150
194
 
151
195
  # Represents a status. Straightforward.
152
196
  class Status
153
- attr_accessor :id, :name, :icon, :description
197
+ # @return [String]
198
+ attr_accessor :id
199
+ # @return [String]
200
+ attr_accessor :name
201
+ # @return [URL]
202
+ attr_accessor :icon
203
+ # @return [String]
204
+ attr_accessor :description
154
205
 
155
206
  # Factory method that takes a fragment of a SOAP response.
156
207
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -171,8 +222,18 @@ end
171
222
  # included when you retrieve versions from the server.
172
223
  # @todo find out why we don't get a description for this object
173
224
  class Version
174
- attr_accessor :id, :name, :sequence, :released, :archived, :release_date
175
- attr_writer :released, :archived
225
+ # @return [String]
226
+ attr_accessor :id
227
+ # @return [String]
228
+ attr_accessor :name
229
+ # @return [Fixnum]
230
+ attr_accessor :sequence
231
+ # @return [boolean]
232
+ attr_accessor :released
233
+ # @return [boolean]
234
+ attr_accessor :archived
235
+ # @return [Time]
236
+ attr_accessor :release_date
176
237
 
177
238
  # @return [boolean] true if the version has been released, otherwise false
178
239
  def released?; @released; end
@@ -202,6 +263,7 @@ class Version
202
263
  msg.add 'name', @name
203
264
  msg.add 'sequence', @sequence unless @sequence.nil?
204
265
  msg.add 'releaseDate', @release_date.xmlschema unless @release_date.nil?
266
+ msg.add 'released', @released
205
267
  end
206
268
  end
207
269
 
@@ -209,7 +271,14 @@ end
209
271
  # API; a more useful case might be if you wanted to emulate the server's
210
272
  # behaviour.
211
273
  class Scheme
212
- attr_accessor :id, :name, :type, :description
274
+ # @return [String]
275
+ attr_accessor :id
276
+ # @return [String]
277
+ attr_accessor :name
278
+ # @return [String]
279
+ attr_accessor :type
280
+ # @return [String]
281
+ attr_accessor :description
213
282
 
214
283
  # Factory method that takes a fragment of a SOAP response.
215
284
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -236,7 +305,10 @@ end
236
305
 
237
306
  # Represents a component description for a project. Straightforward.
238
307
  class Component
239
- attr_accessor :id, :name
308
+ # @return [String]
309
+ attr_accessor :id
310
+ # @return [String]
311
+ attr_accessor :name
240
312
 
241
313
  # Factory method that takes a fragment of a SOAP response.
242
314
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -251,10 +323,30 @@ class Component
251
323
  end
252
324
 
253
325
  # Represents a project configuration. NOT straightforward.
254
- # @todo find out why the server always seems to pass nil for schemes
326
+ # You need to explicitly ask for schemes in order to get them. By
327
+ # default, most project fetching methods purposely leave out all
328
+ # the scheme information as permission schemes can be very large.
255
329
  class Project
256
- attr_accessor :id, :name, :key, :url, :project_url, :lead, :description
257
- attr_accessor :issue_security_scheme, :notification_scheme, :permission_scheme
330
+ # @return [String]
331
+ attr_accessor :id
332
+ # @return [String]
333
+ attr_accessor :name
334
+ # @return [String]
335
+ attr_accessor :key
336
+ # @return [URL]
337
+ attr_accessor :url
338
+ # @return [URL]
339
+ attr_accessor :project_url
340
+ # @return [String]
341
+ attr_accessor :lead
342
+ # @return [String]
343
+ attr_accessor :description
344
+ # @return [JIRA::Scheme]
345
+ attr_accessor :issue_security_scheme
346
+ # @return [JIRA::Scheme]
347
+ attr_accessor :notification_scheme
348
+ # @return [JIRA::PermissionScheme]
349
+ attr_accessor :permission_scheme
258
350
 
259
351
  # Factory method that takes a fragment of a SOAP response.
260
352
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -296,8 +388,18 @@ end
296
388
 
297
389
  # Contains a base64 encoded avatar image and some metadata. Straightforward.
298
390
  class Avatar
299
- attr_accessor :id, :owner, :type, :content_type, :base64_data
300
- attr_writer :system
391
+ # @return [String]
392
+ attr_accessor :id
393
+ # @return [String]
394
+ attr_accessor :owner
395
+ # @return [String]
396
+ attr_accessor :type
397
+ # @return [String]
398
+ attr_accessor :content_type
399
+ # @return [String]
400
+ attr_accessor :base64_data
401
+ # @return [boolean] indicates if the image is the system default
402
+ attr_accessor :system
301
403
 
302
404
  # @return [boolean] true if avatar is the default system avatar, else false
303
405
  def system?; @system; end
@@ -327,11 +429,48 @@ end
327
429
  #
328
430
  # Issues with an UNRESOLVED status will have nil for the value of @resolution.
329
431
  class Issue
330
- attr_accessor :id, :key, :summary, :description, :type_id, :last_updated
331
- attr_accessor :votes, :status_id, :assignee_name, :reporter_name, :priority_id
332
- attr_accessor :project_name, :affects_versions, :create_date, :due_date
333
- attr_accessor :fix_versions, :resolution_id, :environment, :components
334
- attr_accessor :attachment_names, :custom_field_values
432
+ # @return [String]
433
+ attr_accessor :id
434
+ # @return [String]
435
+ attr_accessor :key
436
+ # @return [String]
437
+ attr_accessor :summary
438
+ # @return [String]
439
+ attr_accessor :description
440
+ # @return [String]
441
+ attr_accessor :type_id
442
+ # @return [Time]
443
+ attr_accessor :last_updated
444
+ # @return [Fixnum]
445
+ attr_accessor :votes
446
+ # @return [String]
447
+ attr_accessor :status_id
448
+ # @return [String]
449
+ attr_accessor :assignee_name
450
+ # @return [String]
451
+ attr_accessor :reporter_name
452
+ # @return [String]
453
+ attr_accessor :priority_id
454
+ # @return [String]
455
+ attr_accessor :project_name
456
+ # @return [[JIRA::Version]]
457
+ attr_accessor :affects_versions
458
+ # @return [Time]
459
+ attr_accessor :create_date
460
+ # @return [Time]
461
+ attr_accessor :due_date
462
+ # @return [[JIRA::Version]]
463
+ attr_accessor :fix_versions
464
+ # @return [String]
465
+ attr_accessor :resolution_id
466
+ # @return [String]
467
+ attr_accessor :environment
468
+ # @return [[JIRA::Component]]
469
+ attr_accessor :components
470
+ # @return [[String]]
471
+ attr_accessor :attachment_names
472
+ # @return [[JIRA::CustomField]]
473
+ attr_accessor :custom_field_values
335
474
 
336
475
  # Factory method that takes a fragment of a SOAP response.
337
476
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -439,7 +578,12 @@ end
439
578
 
440
579
  # Contains the basic information about a user. Straightforward.
441
580
  class User
442
- attr_accessor :name, :full_name, :email
581
+ # @return [String]
582
+ attr_accessor :name
583
+ # @return [String]
584
+ attr_accessor :full_name
585
+ # @return [String]
586
+ attr_accessor :email
443
587
 
444
588
  # Factory method that takes a fragment of a SOAP response.
445
589
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -457,7 +601,10 @@ end
457
601
  # A structure that is a bit of a hack. It is essentially just a key-value pair
458
602
  # that is used mainly by {RemoteAPI#update_issue}.
459
603
  class FieldValue
460
- attr_accessor :id, :values
604
+ # @return [String]
605
+ attr_accessor :id
606
+ # @return [[String,Time,URL,JIRA::*,nil]] hard to say what the type should be
607
+ attr_accessor :values
461
608
 
462
609
  # Factory method that gives you a nil value for the given id.
463
610
  # @param [String] id name of the field for @values
@@ -485,7 +632,18 @@ end
485
632
  # appears to be of the form
486
633
  # $ENDPOINT_URL/secure/attachment/$ATTACHMENT_ID/$ATTACHMENT_FILENAME
487
634
  class AttachmentMetadata
488
- attr_accessor :id, :author, :create_date, :filename, :file_size, :mime_type
635
+ # @return [String]
636
+ attr_accessor :id
637
+ # @return [String]
638
+ attr_accessor :author
639
+ # @return [Time]
640
+ attr_accessor :create_date
641
+ # @return [String]
642
+ attr_accessor :filename
643
+ # @return [Fixnum] measured in @todo units
644
+ attr_accessor :file_size
645
+ # @return [String]
646
+ attr_accessor :mime_type
489
647
 
490
648
  # Factory method that takes a fragment of a SOAP response.
491
649
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -505,9 +663,20 @@ class AttachmentMetadata
505
663
  end
506
664
 
507
665
  # Only contains basic information about the endpoint server.
666
+ # @todo turn attributes back to read-only by not using a factory for init
508
667
  class ServerInfo
509
- attr_accessor :base_url, :build_date, :build_number, :edition
510
- attr_accessor :server_time, :version
668
+ # @return [URL]
669
+ attr_accessor :base_url
670
+ # @return [Time]
671
+ attr_accessor :build_date
672
+ # @return [Fixnum]
673
+ attr_accessor :build_number
674
+ # @return [String]
675
+ attr_accessor :edition
676
+ # @return [JIRA::TimeInfo]
677
+ attr_accessor :server_time
678
+ # @return [String]
679
+ attr_accessor :version
511
680
 
512
681
  # Factory method that takes a fragment of a SOAP response.
513
682
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -529,8 +698,13 @@ class ServerInfo
529
698
  end
530
699
 
531
700
  # Simple structure for a time and time zone; used oddly.
701
+ # The only place this structure is used is when #get_server_info is called.
702
+ # @todo turn attributes back to read-only by not using a factory for init
532
703
  class TimeInfo
533
- attr_accessor :server_time, :timezone
704
+ # @return [Time]
705
+ attr_accessor :server_time
706
+ # @return [String]
707
+ attr_accessor :timezone
534
708
 
535
709
  # Factory method that takes a fragment of a SOAP response.
536
710
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -547,7 +721,18 @@ end
547
721
  # Represents a filter
548
722
  # @todo find out what @project is supposed to be for
549
723
  class Filter
550
- attr_accessor :id, :name, :author, :project, :description, :xml
724
+ # @return [String]
725
+ attr_accessor :id
726
+ # @return [String]
727
+ attr_accessor :name
728
+ # @return [String]
729
+ attr_accessor :author
730
+ # @return [String]
731
+ attr_accessor :project
732
+ # @return [String]
733
+ attr_accessor :description
734
+ # @return [nil]
735
+ attr_accessor :xml
551
736
 
552
737
  # Factory method that takes a fragment of a SOAP response.
553
738
  # @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
@@ -565,4 +750,23 @@ class Filter
565
750
  end
566
751
  end
567
752
 
753
+ # @todo documentation for this class
754
+ # @todo write a boolean accessor macro
755
+ class ServerConfiguration
756
+ attr_reader :time_tracking_hours_per_day, :time_tracking_hours_per_week
757
+
758
+ def watching_allowed?; @watching_allowed; end
759
+ def voting_allowed?; @voting_allowed; end
760
+ def unassigned_issues_allowed?; @unassigned_issues_allowed; end
761
+ def time_tracking_allowed?; @time_tracking_allowed; end
762
+ def subtasks_allowed?; @subtasks_allowed; end
763
+ def issue_linking_allowed?; @issue_linking_allowed; end
764
+ def eternal_user_management_allowed?; @external_user_management; end
765
+ def attachments_allowed?; @attachments_allowed; end
766
+
767
+ def initialize(frag = nil)
768
+ return if frag.nil?
769
+ end
770
+ end
771
+
568
772
  end
data/lib/jiraSOAP/url.rb CHANGED
@@ -5,6 +5,7 @@
5
5
  # URI object if you are running on CRuby, but it will be an NSURL if you
6
6
  # are running on MacRuby.
7
7
  class URL
8
+ # @return [NSURL, URI::HTTP] the type depends on your RUBY_ENGINE
8
9
  attr_accessor :url
9
10
 
10
11
  # Initializes @url with the correct object type.
@@ -5,7 +5,9 @@ class URL
5
5
  @url = NSURL.URLWithString url_string
6
6
  end
7
7
 
8
- alias_method absoluteString to_s
8
+ def to_s
9
+ @url.absoluteString
10
+ end
9
11
  end
10
12
 
11
13
  module JIRA
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mark Rada
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-25 00:00:00 -04:00
17
+ date: 2010-11-10 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -83,10 +83,10 @@ files:
83
83
  - lib/jiraSOAP.rb
84
84
  - lib/jiraSOAP/JIRAservice.rb
85
85
  - lib/jiraSOAP/handsoap_extensions.rb
86
- - lib/jiraSOAP/macruby_stuff.rb
87
86
  - lib/jiraSOAP/remoteAPI.rb
88
87
  - lib/jiraSOAP/remoteEntities.rb
89
88
  - lib/jiraSOAP/url.rb
89
+ - lib/macruby_stuff.rb
90
90
  - LICENSE
91
91
  - README.markdown
92
92
  - test/jiraSOAP_test.rb