jiraSOAP 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +2 -3
- data/ChangeLog +15 -0
- data/LICENSE.txt +1 -1
- data/README.markdown +51 -41
- data/Rakefile +57 -0
- data/docs/GettingStarted.markdown +36 -0
- data/lib/jiraSOAP.rb +7 -4
- data/lib/jiraSOAP/api.rb +59 -53
- data/lib/jiraSOAP/api/additions.rb +4 -6
- data/lib/jiraSOAP/api/attachments.rb +18 -8
- data/lib/jiraSOAP/api/avatars.rb +30 -17
- data/lib/jiraSOAP/api/comments.rb +16 -11
- data/lib/jiraSOAP/api/filters.rb +13 -10
- data/lib/jiraSOAP/api/issue_data_types.rb +29 -21
- data/lib/jiraSOAP/api/issues.rb +46 -31
- data/lib/jiraSOAP/api/project_roles.rb +22 -15
- data/lib/jiraSOAP/api/projects.rb +33 -20
- data/lib/jiraSOAP/api/schemes.rb +9 -9
- data/lib/jiraSOAP/api/server_info.rb +11 -9
- data/lib/jiraSOAP/api/users.rb +58 -10
- data/lib/jiraSOAP/api/versions.rb +15 -11
- data/lib/jiraSOAP/api/worklog.rb +14 -0
- data/lib/jiraSOAP/core_extensions.rb +8 -0
- data/lib/jiraSOAP/entities.rb +3 -0
- data/lib/jiraSOAP/entities/attachment_metadata.rb +28 -9
- data/lib/jiraSOAP/entities/avatar.rb +29 -10
- data/lib/jiraSOAP/entities/comment.rb +37 -11
- data/lib/jiraSOAP/entities/component.rb +1 -1
- data/lib/jiraSOAP/entities/custom_field_value.rb +17 -12
- data/lib/jiraSOAP/entities/described_entity.rb +9 -5
- data/lib/jiraSOAP/entities/dynamic_entity.rb +12 -5
- data/lib/jiraSOAP/entities/entity.rb +33 -27
- data/lib/jiraSOAP/entities/field.rb +1 -1
- data/lib/jiraSOAP/entities/field_value.rb +16 -6
- data/lib/jiraSOAP/entities/filter.rb +18 -5
- data/lib/jiraSOAP/entities/issue.rb +74 -29
- data/lib/jiraSOAP/entities/issue_property.rb +9 -6
- data/lib/jiraSOAP/entities/issue_security_scheme.rb +1 -1
- data/lib/jiraSOAP/entities/issue_type.rb +9 -4
- data/lib/jiraSOAP/entities/named_entity.rb +8 -4
- data/lib/jiraSOAP/entities/notification_scheme.rb +1 -1
- data/lib/jiraSOAP/entities/permission.rb +14 -6
- data/lib/jiraSOAP/entities/permission_mapping.rb +9 -5
- data/lib/jiraSOAP/entities/permission_scheme.rb +7 -4
- data/lib/jiraSOAP/entities/priority.rb +7 -4
- data/lib/jiraSOAP/entities/project.rb +29 -13
- data/lib/jiraSOAP/entities/project_role.rb +3 -2
- data/lib/jiraSOAP/entities/resolution.rb +1 -1
- data/lib/jiraSOAP/entities/scheme.rb +5 -1
- data/lib/jiraSOAP/entities/server_configuration.rb +39 -14
- data/lib/jiraSOAP/entities/server_info.rb +20 -8
- data/lib/jiraSOAP/entities/status.rb +1 -1
- data/lib/jiraSOAP/entities/time_info.rb +12 -5
- data/lib/jiraSOAP/entities/user.rb +8 -4
- data/lib/jiraSOAP/entities/usergroup.rb +15 -0
- data/lib/jiraSOAP/entities/username.rb +7 -1
- data/lib/jiraSOAP/entities/version.rb +20 -12
- data/lib/jiraSOAP/entities/worklog.rb +28 -0
- data/lib/jiraSOAP/handsoap_extensions.rb +31 -80
- data/lib/jiraSOAP/{JIRAservice.rb → jira_service.rb} +19 -14
- data/lib/jiraSOAP/{macruby_bonuses.rb → macruby_extensions.rb} +5 -14
- data/lib/jiraSOAP/nokogiri_extensions.rb +68 -0
- data/lib/jiraSOAP/url.rb +10 -2
- data/lib/jiraSOAP/version.rb +3 -0
- metadata +29 -55
- data/yard-jiraSOAP.rb +0 -65
@@ -1,14 +1,33 @@
|
|
1
|
+
##
|
1
2
|
# @todo find out what the id value of @owner relates to
|
3
|
+
#
|
2
4
|
# Contains a base64 encoded avatar image and metadata about the avatar.
|
3
5
|
class JIRA::Avatar < JIRA::DynamicEntity
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
|
7
|
+
##
|
8
|
+
# This seems to be an id ref to some other object
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
add_attribute :owner, 'owner', :content
|
12
|
+
|
13
|
+
##
|
14
|
+
# The place where the avatar is used (e.g. 'project')
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
add_attribute :type, 'type', :content
|
18
|
+
|
19
|
+
# @return [String]
|
20
|
+
add_attribute :mime_type, 'contentType', :content
|
21
|
+
alias_method :content_type, :mime_type
|
22
|
+
|
23
|
+
# @return [String]
|
24
|
+
add_attribute :base64_data, 'base64Data', :content
|
25
|
+
alias_method :data, :base64_data
|
26
|
+
|
27
|
+
##
|
28
|
+
# Indicates if the image is the system default
|
29
|
+
#
|
30
|
+
# @return [Boolean]
|
31
|
+
add_attribute :system, 'system', :to_boolean
|
32
|
+
|
14
33
|
end
|
@@ -1,18 +1,43 @@
|
|
1
|
+
##
|
1
2
|
# Contains a comment's body and metadata.
|
2
3
|
class JIRA::Comment < JIRA::DynamicEntity
|
3
|
-
add_attributes(
|
4
|
-
# A username
|
5
|
-
['author', :author, :to_s],
|
6
|
-
['body', :body, :to_s],
|
7
|
-
['groupLevel', :group_level, :to_s],
|
8
|
-
['roleLevel', :role_level, :to_s],
|
9
|
-
# A username
|
10
|
-
['updateAuthor', :update_author, :to_s],
|
11
|
-
['created', :create_time, :to_date],
|
12
|
-
['updated', :last_updated_time, :to_date]
|
13
|
-
)
|
14
4
|
|
5
|
+
##
|
6
|
+
# A username
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
add_attribute :author, 'author', :content
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
add_attribute :body, 'body', :content
|
13
|
+
|
14
|
+
# @return [String]
|
15
|
+
add_attribute :group_level, 'groupLevel', :content
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
add_attribute :role_level, 'roleLevel', :content
|
19
|
+
|
20
|
+
##
|
21
|
+
# A username
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
add_attribute :update_author, 'updateAuthor', :content
|
25
|
+
|
26
|
+
# @return [Time]
|
27
|
+
add_attribute :create_time, 'created', :to_iso_date
|
28
|
+
|
29
|
+
# @return [Time]
|
30
|
+
add_attribute :last_updated_time, 'updated', :to_iso_date
|
31
|
+
|
32
|
+
##
|
33
|
+
# Add a created comment to an issue
|
34
|
+
def add_to issue_key
|
35
|
+
raise NotImplementedError, 'Please implement me. :('
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
15
39
|
# @todo make this method shorter
|
40
|
+
#
|
16
41
|
# @param [Handsoap::XmlMason::Node] msg
|
17
42
|
# @return [Handsoap::XmlMason::Node]
|
18
43
|
def soapify_for(msg)
|
@@ -23,4 +48,5 @@ class JIRA::Comment < JIRA::DynamicEntity
|
|
23
48
|
msg.add 'roleLevel', @role_level
|
24
49
|
msg.add 'updateAuthor', @update_author
|
25
50
|
end
|
51
|
+
|
26
52
|
end
|
@@ -1,19 +1,23 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# as
|
1
|
+
##
|
2
|
+
# @note There are no API methods that directly create objects of this class,
|
3
|
+
# they are only created as an attribute of {JIRA::Issue} objects.
|
4
|
+
# @todo See if @key is always nil from the server, maybe we can remove it
|
4
5
|
#
|
5
|
-
#
|
6
|
-
# in that @values will always be stored as an Array of String objects for
|
7
|
-
# custom fields and a field value is more flexible. You can expect the classes
|
8
|
-
# to merge in the near future.
|
6
|
+
# Represents an instance of a custom field (with values).
|
9
7
|
class JIRA::CustomFieldValue < JIRA::DynamicEntity
|
10
|
-
add_attributes(
|
11
|
-
['customfieldId', :id, :to_s],
|
12
|
-
['key', :key, :to_s],
|
13
|
-
['values', :values, :to_ss]
|
14
|
-
)
|
15
8
|
|
9
|
+
# @return [String]
|
10
|
+
add_attribute :id, 'customfieldId', :content
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
add_attribute :key, 'key', :content
|
14
|
+
|
15
|
+
# @return [Array<String>]
|
16
|
+
add_attribute :values, 'values', :contents_of_children
|
17
|
+
|
18
|
+
##
|
16
19
|
# Generate a SOAP message fragment for the object.
|
20
|
+
#
|
17
21
|
# @param [Handsoap::XmlMason::Node] msg SOAP message to add the object to
|
18
22
|
# @param [String] label tag name used in wrapping tags
|
19
23
|
# @return [Handsoap::XmlMason::Element]
|
@@ -24,4 +28,5 @@ class JIRA::CustomFieldValue < JIRA::DynamicEntity
|
|
24
28
|
submsg.add_simple_array 'values', @values
|
25
29
|
end
|
26
30
|
end
|
31
|
+
|
27
32
|
end
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
##
|
2
|
+
# @abstract A named entity that also has a short description
|
2
3
|
class JIRA::DescribedEntity < JIRA::NamedEntity
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
##
|
6
|
+
# A short blurb
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
add_attribute :description, 'description', :content
|
10
|
+
|
7
11
|
end
|
@@ -1,8 +1,15 @@
|
|
1
|
+
##
|
1
2
|
# @abstract Anything that can be configured has an id field.
|
2
3
|
class JIRA::DynamicEntity < JIRA::Entity
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
|
5
|
+
##
|
6
|
+
# Usually a numerical value, but sometimes prefixed with a string
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# '12450'
|
10
|
+
# 'customfield_10000'
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
add_attribute :id, 'id', :content
|
14
|
+
|
8
15
|
end
|
@@ -1,24 +1,42 @@
|
|
1
|
+
##
|
1
2
|
# @abstract The base class for all JIRA objects that can given by the server.
|
2
3
|
class JIRA::Entity
|
3
4
|
|
4
5
|
class << self
|
5
6
|
|
6
|
-
# @return [Hash{String=>Array
|
7
|
-
# metaclass for parsing XML
|
7
|
+
# @return [Hash{String=>Array(Symbol,Symbol,Class*)}] used for parsing XML
|
8
8
|
attr_accessor :parse
|
9
9
|
|
10
|
-
|
10
|
+
##
|
11
|
+
# Define the callback to automatically initialize the build and parse
|
12
|
+
# tables when any subclass is defined.
|
13
|
+
def inherited subclass
|
14
|
+
subclass.parse = @parse.dup
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# @todo Add a way to signify if an attribute should not be used in
|
19
|
+
# message building, as some attributes should never be included
|
20
|
+
# in a SOAP message.
|
21
|
+
#
|
22
|
+
# Define a single instance attribute on the class including the
|
23
|
+
# specification on how to parse the XML output and how to build
|
24
|
+
# SOAP messages.
|
25
|
+
#
|
26
|
+
# Predicate methods will automatically be created if the transformer
|
27
|
+
# method is `:to_boolean`.
|
28
|
+
#
|
29
|
+
# @param [Symbol] name name of the attribute to create
|
30
|
+
# @param [String] jira_name name of the XML tag to look for when
|
31
|
+
# parsing responses from the server
|
32
|
+
# @param [Symbol,Array(Symbol,Class)] transformer either the method
|
33
|
+
# name to transform some XML contents, or the method name and the
|
34
|
+
# class to build from the attribute
|
11
35
|
# @return [nil]
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
attributes.each { |attribute|
|
17
|
-
attr_accessor attribute[1]
|
18
|
-
@parse[attribute[0]] = [:"#{attribute[1]}=", *attribute[2,2]]
|
19
|
-
alias_method :"#{attribute[1]}?", attribute[1] if attribute[2] == :to_boolean
|
20
|
-
#" ruby-mode parse fail
|
21
|
-
}
|
36
|
+
def add_attribute name, jira_name, transformer
|
37
|
+
attr_accessor name
|
38
|
+
alias_method "#{name}?", name if transformer == :to_boolean
|
39
|
+
@parse[jira_name] = [:"#{name}=", *transformer]
|
22
40
|
end
|
23
41
|
|
24
42
|
end
|
@@ -33,26 +51,14 @@ class JIRA::Entity
|
|
33
51
|
entity
|
34
52
|
end
|
35
53
|
|
36
|
-
# @
|
37
|
-
# @todo make this faster by cutting out NokogiriDriver,
|
38
|
-
# but I will need to add an accessor for @element of the
|
39
|
-
# driver object and then need to inject the marshaling
|
40
|
-
# methods into Nokogiri classes
|
41
|
-
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
54
|
+
# @param [Nokogiri::XML::Element] element
|
42
55
|
def initialize_with_xml frag
|
43
56
|
attributes = self.class.parse
|
44
57
|
frag.children.each { |node|
|
45
|
-
action = attributes[node.
|
58
|
+
action = attributes[node.name]
|
46
59
|
self.send action[0], (node.send *action[1..-1]) if action
|
47
60
|
#puts "Action is #{action.inspect} for #{node.node_name}"
|
48
61
|
}
|
49
62
|
end
|
50
63
|
|
51
|
-
# @todo #soapify_for should become #to_soap and should take only the
|
52
|
-
# optional argument for wrapper name, otherwise just makes its own
|
53
|
-
# own node with appropriate subnodes and returns that as a Handsoap
|
54
|
-
# document
|
55
|
-
def to_soap node_name = nil
|
56
|
-
raise NotImplementedError
|
57
|
-
end
|
58
64
|
end
|
@@ -1,18 +1,27 @@
|
|
1
|
-
|
2
|
-
# is
|
1
|
+
##
|
2
|
+
# This class is a bit of a hack; it is really just a key-value pair and only
|
3
|
+
# used with {RemoteAPI#update_issue}.
|
3
4
|
class JIRA::FieldValue
|
4
5
|
|
5
|
-
|
6
|
+
##
|
7
|
+
# The name for regular fields, and the id for custom fields
|
8
|
+
#
|
9
|
+
# @return [String]
|
6
10
|
attr_accessor :field_name
|
7
11
|
|
8
|
-
|
12
|
+
##
|
13
|
+
# An array for the values, usually only has one object
|
14
|
+
#
|
15
|
+
# @return [Array<#to_s>]
|
9
16
|
attr_accessor :values
|
10
17
|
|
11
18
|
# @param [String] field_name
|
12
19
|
# @param [Array] values
|
13
|
-
def initialize
|
20
|
+
def initialize field_name = nil, values = nil
|
14
21
|
@field_name = field_name
|
15
|
-
|
22
|
+
if values
|
23
|
+
@values = values.is_a?( ::Array ) ? values : [values]
|
24
|
+
end
|
16
25
|
end
|
17
26
|
|
18
27
|
# @todo soapify properly for custom objects (JIRA module).
|
@@ -25,4 +34,5 @@ class JIRA::FieldValue
|
|
25
34
|
message.add_simple_array 'values', @values unless @values.nil?
|
26
35
|
end
|
27
36
|
end
|
37
|
+
|
28
38
|
end
|
@@ -1,8 +1,21 @@
|
|
1
|
+
##
|
2
|
+
# @note You can only read filters from the server, there are no API methods
|
3
|
+
# for creating, updating, or deleting filters from the server.
|
4
|
+
#
|
1
5
|
# Represents a filter, but does not seem to include the filters JQL query.
|
2
6
|
class JIRA::Filter < JIRA::DescribedEntity
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
7
|
+
|
8
|
+
# @return [String]
|
9
|
+
add_attribute :author, 'author', :content
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
add_attribute :project_name, 'project', :content
|
13
|
+
|
14
|
+
##
|
15
|
+
# @todo Find out what this is for, perhaps it is the XML form of
|
16
|
+
# equivalent JQL query?
|
17
|
+
#
|
18
|
+
# @return [String]
|
19
|
+
add_attribute :xml, 'xml', :content
|
20
|
+
|
8
21
|
end
|
@@ -1,39 +1,82 @@
|
|
1
|
-
|
1
|
+
##
|
2
|
+
# @note Issues with an UNRESOLVED status will have nil for the value for
|
3
|
+
# {#resolution_id}.
|
4
|
+
# @todo Add attributes for the comments and the attachment metadata
|
5
|
+
#
|
2
6
|
# Contains most of the data and metadata for a JIRA issue, but does
|
3
7
|
# not contain the {JIRA::Comment}s or {JIRA::AttachmentMetadata}.
|
4
8
|
#
|
5
9
|
# This class is easily the most convoluted structure in the API, and will
|
6
10
|
# likely be the greatest source of bugs. The irony of the situation is that
|
7
11
|
# this structure is also the most critical to have in working order.
|
8
|
-
#
|
9
|
-
# @note Issues with an UNRESOLVED status will have nil for the value for
|
10
|
-
# {#resolution_id}.
|
11
12
|
class JIRA::Issue < JIRA::DynamicEntity
|
12
|
-
add_attributes(
|
13
|
-
['key', :key, :to_s],
|
14
|
-
['summary', :summary, :to_s],
|
15
|
-
['description', :description, :to_s],
|
16
|
-
['type', :type_id, :to_s],
|
17
|
-
['status', :status_id, :to_s],
|
18
|
-
['assignee', :assignee_username, :to_s],
|
19
|
-
['reporter', :reporter_username, :to_s],
|
20
|
-
['priority', :priority_id, :to_s],
|
21
|
-
['project', :project_name, :to_s],
|
22
|
-
['resolution', :resolution_id, :to_s],
|
23
|
-
['environment', :environment, :to_s],
|
24
|
-
['votes', :votes, :to_i],
|
25
|
-
['updated', :last_updated_time, :to_date],
|
26
|
-
['created', :create_time, :to_date],
|
27
|
-
# This is actually a Time object with no time resolution.
|
28
|
-
['duedate', :due_date, :to_date],
|
29
|
-
['affectsVersions', :affects_versions, :to_objects, JIRA::Version],
|
30
|
-
['fixVersions', :fix_versions, :to_objects, JIRA::Version],
|
31
|
-
['components', :components, :to_objects, JIRA::Component],
|
32
|
-
['customFieldValues', :custom_field_values, :to_objects, JIRA::CustomFieldValue],
|
33
|
-
['attachmentNames', :attachment_names, :to_ss]
|
34
|
-
)
|
35
13
|
|
14
|
+
# @return [String]
|
15
|
+
add_attribute :key, 'key', :content
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
add_attribute :summary, 'summary', :content
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
add_attribute :description, 'description', :content
|
22
|
+
|
23
|
+
# @return [String]
|
24
|
+
add_attribute :type_id, 'type', :content
|
25
|
+
|
26
|
+
# @return [String]
|
27
|
+
add_attribute :status_id, 'status', :content
|
28
|
+
|
29
|
+
# @return [String]
|
30
|
+
add_attribute :assignee_username, 'assignee', :content
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
add_attribute :reporter_username, 'reporter', :content
|
34
|
+
|
35
|
+
# @return [String]
|
36
|
+
add_attribute :priority_id, 'priority', :content
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
add_attribute :project_name, 'project', :content
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
add_attribute :resolution_id, 'resolution', :content
|
43
|
+
|
44
|
+
# @return [String]
|
45
|
+
add_attribute :environment, 'environment', :content
|
46
|
+
|
47
|
+
# @return [Number]
|
48
|
+
add_attribute :votes, 'votes', :to_i
|
49
|
+
|
50
|
+
# @return [Time]
|
51
|
+
add_attribute :last_updated_time, 'updated', :to_iso_date
|
52
|
+
|
53
|
+
# @return [Time]
|
54
|
+
add_attribute :create_time, 'created', :to_iso_date
|
55
|
+
|
56
|
+
##
|
57
|
+
# This is actually a Time object with no time resolution.
|
58
|
+
#
|
59
|
+
# @return [Time]
|
60
|
+
add_attribute :due_date, 'duedate', :to_iso_date
|
61
|
+
|
62
|
+
# @return [Array<JIRA::Version>]
|
63
|
+
add_attribute :affects_versions, 'affectsVersions', [:children_as_objects, JIRA::Version]
|
64
|
+
|
65
|
+
# @return [Array<JIRA::Version>]
|
66
|
+
add_attribute :fix_versions, 'fixVersions', [:children_as_objects, JIRA::Version]
|
67
|
+
|
68
|
+
# @return [Array<JIRA::Component>]
|
69
|
+
add_attribute :components, 'components', [:children_as_objects, JIRA::Component]
|
70
|
+
|
71
|
+
# @return [Array<JIRA::CustomFieldValue>]
|
72
|
+
add_attribute :custom_field_values, 'customFieldValues', [:children_as_objects, JIRA::CustomFieldValue]
|
73
|
+
|
74
|
+
# @return [Array<String>]
|
75
|
+
add_attribute :attachment_names, 'attachmentNames', :contents_of_children
|
76
|
+
|
77
|
+
##
|
36
78
|
# @todo see if we can use the simple and complex array builders
|
79
|
+
#
|
37
80
|
# Generate the SOAP message fragment for an issue. Can you spot the oddities
|
38
81
|
# and inconsistencies? (hint: there are many).
|
39
82
|
#
|
@@ -54,8 +97,9 @@ class JIRA::Issue < JIRA::DynamicEntity
|
|
54
97
|
#
|
55
98
|
# Passing an environment/due date field with a value of nil causes the
|
56
99
|
# server to complain about the formatting of the message.
|
100
|
+
#
|
57
101
|
# @param [Handsoap::XmlMason::Node] msg message the node to add the object to
|
58
|
-
def soapify_for
|
102
|
+
def soapify_for msg
|
59
103
|
# might be going away, since it appears to have no effect at creation time
|
60
104
|
msg.add 'reporter', @reporter_name unless @reporter.nil?
|
61
105
|
|
@@ -87,10 +131,11 @@ class JIRA::Issue < JIRA::DynamicEntity
|
|
87
131
|
}
|
88
132
|
end
|
89
133
|
|
90
|
-
msg.add 'assignee', (@
|
134
|
+
msg.add 'assignee', (@assignee_username || '-1')
|
91
135
|
msg.add_complex_array 'customFieldValues', (@custom_field_values || [])
|
92
136
|
|
93
137
|
msg.add 'environment', @environment unless @environment.nil?
|
94
138
|
msg.add 'duedate', @due_date.xmlschema unless @due_date.nil?
|
95
139
|
end
|
140
|
+
|
96
141
|
end
|