jiraSOAP 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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