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 +17 -0
- data/LICENSE +1 -1
- data/README.markdown +5 -8
- data/lib/jiraSOAP.rb +3 -3
- data/lib/jiraSOAP/JIRAservice.rb +7 -4
- data/lib/jiraSOAP/{remoteAPI.rb → api.rb} +69 -89
- data/lib/jiraSOAP/entities.rb +26 -0
- data/lib/jiraSOAP/entities/abstract.rb +95 -0
- data/lib/jiraSOAP/entities/attachments.rb +35 -0
- data/lib/jiraSOAP/entities/avatar.rb +36 -0
- data/lib/jiraSOAP/entities/comment.rb +54 -0
- data/lib/jiraSOAP/entities/field_value.rb +73 -0
- data/lib/jiraSOAP/entities/filter.rb +26 -0
- data/lib/jiraSOAP/entities/issue.rb +166 -0
- data/lib/jiraSOAP/entities/issue_properties.rb +41 -0
- data/lib/jiraSOAP/entities/project.rb +57 -0
- data/lib/jiraSOAP/entities/read_only.rb +121 -0
- data/lib/jiraSOAP/entities/schemes.rb +25 -0
- data/lib/jiraSOAP/entities/user.rb +23 -0
- data/lib/jiraSOAP/entities/version.rb +45 -0
- data/lib/jiraSOAP/handsoap_extensions.rb +68 -0
- data/lib/{macruby_stuff.rb → jiraSOAP/macruby_bonuses.rb} +1 -1
- data/lib/jiraSOAP/url.rb +3 -3
- metadata +27 -10
- data/lib/jiraSOAP/remoteEntities.rb +0 -772
@@ -0,0 +1,41 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# Contains all the metadata for a resolution.
|
4
|
+
class Resolution < JIRA::IssueProperty
|
5
|
+
end
|
6
|
+
|
7
|
+
# Contains all the metadata for an issue's status.
|
8
|
+
class Status < JIRA::IssueProperty
|
9
|
+
end
|
10
|
+
|
11
|
+
# Contains all the metadata for a priority level.
|
12
|
+
# @todo change @color to be some kind of hex Fixnum object
|
13
|
+
class Priority < JIRA::IssueProperty
|
14
|
+
|
15
|
+
# @return [String] is a hex value
|
16
|
+
attr_accessor :color
|
17
|
+
|
18
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
19
|
+
def initialize_with_xml_fragment(frag)
|
20
|
+
super frag
|
21
|
+
@color = (frag/'color').to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Contains all the metadata for an issue type.
|
26
|
+
class IssueType < JIRA::IssueProperty
|
27
|
+
|
28
|
+
# @return [boolean]
|
29
|
+
attr_accessor :subtask
|
30
|
+
|
31
|
+
# @return [boolean] true if the issue type is a subtask, otherwise false
|
32
|
+
def subtask?; @subtask; end
|
33
|
+
|
34
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
35
|
+
def initialize_with_xml_fragment(frag)
|
36
|
+
super frag
|
37
|
+
@subtask = (frag/'subTask').to_boolean
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# Contains the data and metadata about a project and its configuration.
|
4
|
+
class Project < JIRA::DescribedEntity
|
5
|
+
|
6
|
+
# @return [String]
|
7
|
+
attr_accessor :key
|
8
|
+
|
9
|
+
# @return [URL]
|
10
|
+
attr_accessor :url
|
11
|
+
|
12
|
+
# @return [URL]
|
13
|
+
attr_accessor :project_url
|
14
|
+
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :lead
|
17
|
+
|
18
|
+
# @return [JIRA::IssueSecurityScheme]
|
19
|
+
attr_accessor :issue_security_scheme
|
20
|
+
|
21
|
+
# @return [JIRA::NotificationScheme]
|
22
|
+
attr_accessor :notification_scheme
|
23
|
+
|
24
|
+
# @return [JIRA::PermissionScheme]
|
25
|
+
attr_accessor :permission_scheme
|
26
|
+
|
27
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
28
|
+
def initialize_with_xml_fragment(frag)
|
29
|
+
super frag
|
30
|
+
@key, @lead,
|
31
|
+
@issue_security_scheme, @notification_scheme, @permission_scheme,
|
32
|
+
@url, @project_url =
|
33
|
+
frag.nodes( ['key', :to_s],
|
34
|
+
['lead', :to_s],
|
35
|
+
['issueSecurityScheme', :to_object, JIRA::IssueSecurityScheme],
|
36
|
+
['notificationScheme', :to_object, JIRA::NotificationScheme],
|
37
|
+
['permissionScheme', :to_object, JIRA::PermissionScheme],
|
38
|
+
['url', :to_url],
|
39
|
+
['projectUrl', :to_url] )
|
40
|
+
end
|
41
|
+
|
42
|
+
# @todo make this method shorter
|
43
|
+
# @todo encode the schemes
|
44
|
+
# @param [Handsoap::XmlMason::Node] msg
|
45
|
+
# @return [Handsoap::XmlMason::Node]
|
46
|
+
def soapify_for(msg)
|
47
|
+
msg.add 'id', @id
|
48
|
+
msg.add 'name', @name
|
49
|
+
msg.add 'key', @key
|
50
|
+
msg.add 'url', @url
|
51
|
+
msg.add 'projectUrl', @project_url
|
52
|
+
msg.add 'lead', @lead
|
53
|
+
msg.add 'description', @description
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# Only contains basic information about the endpoint server and only used
|
4
|
+
# by {RemoteAPI#get_server_info}.
|
5
|
+
class ServerInfo < JIRA::Entity
|
6
|
+
|
7
|
+
# @return [URL]
|
8
|
+
attr_reader :base_url
|
9
|
+
|
10
|
+
# @return [Time]
|
11
|
+
attr_reader :build_date
|
12
|
+
|
13
|
+
# @return [Fixnum]
|
14
|
+
attr_reader :build_number
|
15
|
+
|
16
|
+
# @return [String]
|
17
|
+
attr_reader :edition
|
18
|
+
|
19
|
+
# @return [JIRA::TimeInfo]
|
20
|
+
attr_reader :server_time
|
21
|
+
|
22
|
+
# @return [String]
|
23
|
+
attr_reader :version
|
24
|
+
|
25
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
26
|
+
def initialize_with_xml_fragment(frag)
|
27
|
+
@build_date, @build_number, @base_url, @edition, @version, @server_time =
|
28
|
+
frag.nodes( ['buildDate', :to_date],
|
29
|
+
['buildNumber', :to_i],
|
30
|
+
['baseUrl', :to_url],
|
31
|
+
['edition', :to_s],
|
32
|
+
['version', :to_s],
|
33
|
+
['serverTime', :to_object, JIRA::TimeInfo] )
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# Simple structure for a time and time zone; only used by JIRA::ServerInfo
|
39
|
+
# objects, which themselves are only created when {RemoteAPI#get_server_info}
|
40
|
+
# is called.
|
41
|
+
class TimeInfo < JIRA::Entity
|
42
|
+
|
43
|
+
# @return [Time]
|
44
|
+
attr_reader :server_time
|
45
|
+
|
46
|
+
# @return [String] in the form of 'America/Toronto'
|
47
|
+
attr_reader :timezone
|
48
|
+
|
49
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
50
|
+
def initialize_with_xml_fragment(frag)
|
51
|
+
@server_time, @timezone =
|
52
|
+
frag.nodes ['serverTime', :to_string_date], ['timeZoneId', :to_s]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
# A simple structure that is used by {RemoteAPI#get_server_configuration}.
|
58
|
+
class ServerConfiguration < JIRA::Entity
|
59
|
+
|
60
|
+
# @return [boolean]
|
61
|
+
attr_reader :attachments_allowed
|
62
|
+
|
63
|
+
# @return [boolean]
|
64
|
+
attr_reader :external_user_management_allowed
|
65
|
+
|
66
|
+
# @return [boolean]
|
67
|
+
attr_reader :issue_linking_allowed
|
68
|
+
|
69
|
+
# @return [boolean]
|
70
|
+
attr_reader :subtasks_allowed
|
71
|
+
|
72
|
+
# @return [boolean]
|
73
|
+
attr_reader :time_tracking_allowed
|
74
|
+
|
75
|
+
# @return [boolean]
|
76
|
+
attr_reader :unassigned_issues_allowed
|
77
|
+
|
78
|
+
# @return [boolean]
|
79
|
+
attr_reader :voting_allowed
|
80
|
+
|
81
|
+
# @return [boolean]
|
82
|
+
attr_reader :watching_allowed
|
83
|
+
|
84
|
+
# @return [Fixnum]
|
85
|
+
attr_reader :time_tracking_days_per_week
|
86
|
+
|
87
|
+
# @return [Fixnum]
|
88
|
+
attr_reader :time_tracking_hours_per_day
|
89
|
+
|
90
|
+
def attachments_allowed?; @attachments_allowed; end
|
91
|
+
def external_user_management_allowed?; @external_user_management_allowed; end
|
92
|
+
def issue_linking_allowed?; @issue_linking_allowed; end
|
93
|
+
def subtasks_allowed?; @subtasks_allowed; end
|
94
|
+
def time_tracking_allowed?; @time_tracking_allowed; end
|
95
|
+
def unassigned_issues_allowed?; @unassigned_issues_allowed; end
|
96
|
+
def voting_allowed?; @voting_allowed; end
|
97
|
+
def watching_allowed?; @watching_allowed; end
|
98
|
+
|
99
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
100
|
+
def initialize_with_xml_fragment(frag)
|
101
|
+
@external_user_management_allowed, @attachments_allowed,
|
102
|
+
@issue_linking_allowed, @subtasks_allowed,
|
103
|
+
@time_tracking_allowed, @unassigned_issues_allowed,
|
104
|
+
@voting_allowed, @watching_allowed,
|
105
|
+
@time_tracking_days_per_week, @time_tracking_hours_per_day =
|
106
|
+
frag.nodes( ['allowExternalUserManagement', :to_boolean],
|
107
|
+
['allowAttachments', :to_boolean],
|
108
|
+
['allowIssueLinking', :to_boolean],
|
109
|
+
['allowSubTasks', :to_boolean],
|
110
|
+
['allowTimeTracking', :to_boolean],
|
111
|
+
['allowUnassignedIssues', :to_boolean],
|
112
|
+
['allowVoting', :to_boolean],
|
113
|
+
['allowWatching', :to_boolean],
|
114
|
+
['timeTrackingDaysPerWeek', :to_i],
|
115
|
+
['timeTrackingHoursPerDay', :to_i] )
|
116
|
+
# in case Atlassian still has not fixed their spelling of 'management'
|
117
|
+
@external_user_management_allowed ||= (frag/'allowExternalUserManagment').to_boolean
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# @todo complete this class
|
4
|
+
# Includes a mapping of project specific permission settings.
|
5
|
+
class PermissionScheme < JIRA::Scheme
|
6
|
+
|
7
|
+
# @return [nil]
|
8
|
+
attr_accessor :permission_mappings
|
9
|
+
|
10
|
+
# @todo actually parse the permission mapping
|
11
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
12
|
+
def initialize_with_xml_fragment(frag)
|
13
|
+
super frag
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Basic metadata about a project's notification scheme.
|
18
|
+
class NotificationScheme < JIRA::Scheme
|
19
|
+
end
|
20
|
+
|
21
|
+
# Basic metadata about a project's issue security scheme.
|
22
|
+
class IssueSecurityScheme < JIRA::Scheme
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# Contains the basic information about a user. The only things missing here
|
4
|
+
# are the permissions and login statistics.
|
5
|
+
class User < JIRA::Entity
|
6
|
+
|
7
|
+
# @return [String]
|
8
|
+
attr_accessor :username
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
attr_accessor :full_name
|
12
|
+
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :email_address
|
15
|
+
|
16
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
17
|
+
def initialize_with_xml_fragment(frag)
|
18
|
+
@username, @full_name, @email_address =
|
19
|
+
frag.nodes ['name', :to_s], ['fullname', :to_s], ['email', :to_s]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module JIRA
|
2
|
+
|
3
|
+
# Represents a version for a project. The description field is never
|
4
|
+
# included when you retrieve versions from the server.
|
5
|
+
# @todo find out why we don't get a description for this object
|
6
|
+
class Version < JIRA::NamedEntity
|
7
|
+
|
8
|
+
# @return [Fixnum]
|
9
|
+
attr_accessor :sequence
|
10
|
+
|
11
|
+
# @return [boolean]
|
12
|
+
attr_accessor :released
|
13
|
+
|
14
|
+
# @return [boolean]
|
15
|
+
attr_accessor :archived
|
16
|
+
|
17
|
+
# @return [Time]
|
18
|
+
attr_accessor :release_date
|
19
|
+
|
20
|
+
def released?; @released; end
|
21
|
+
def archived?; @archived; end
|
22
|
+
|
23
|
+
# @param [Handsoap::XmlQueryFront::NokogiriDriver] frag
|
24
|
+
def initialize_with_xml_fragment(frag)
|
25
|
+
super frag
|
26
|
+
@sequence, @released, @archived, @release_date =
|
27
|
+
frag.nodes( ['sequence', :to_i],
|
28
|
+
['released', :to_boolean],
|
29
|
+
['archived', :to_boolean],
|
30
|
+
['releaseDate', :to_date] )
|
31
|
+
end
|
32
|
+
|
33
|
+
# @todo make this method shorter
|
34
|
+
# @param [Handsoap::XmlMason::Node] msg
|
35
|
+
# @return [Handsoap::XmlMason::Node]
|
36
|
+
def soapify_for(msg)
|
37
|
+
msg.add 'name', @name
|
38
|
+
msg.add 'archived', @archived unless @archived.nil?
|
39
|
+
msg.add 'sequence', @sequence unless @sequence.nil?
|
40
|
+
msg.add 'releaseDate', @release_date.xmlschema unless @release_date.nil?
|
41
|
+
msg.add 'released', @released unless @released.nil?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -26,4 +26,72 @@ module XmlMason
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
|
+
|
30
|
+
# Some simple extensions to make initialization of JIRA objects cleaner.
|
31
|
+
module XmlQueryFront
|
32
|
+
# Represents a node in an XML document used when parsing SOAP responses.
|
33
|
+
# This class is extended for use with jiraSOAP.
|
34
|
+
class NokogiriDriver
|
35
|
+
|
36
|
+
# @param [Array] *attributes pairs or triplets, the first element is the
|
37
|
+
# attribute you want, the second element is the method to send to the
|
38
|
+
# result, and the third element is the argument to that method (if needed)
|
39
|
+
# @return [[Objects]]
|
40
|
+
def nodes(*attributes)
|
41
|
+
attributes.map { |attr|
|
42
|
+
self.xpath(attr.shift).send *attr
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Time]
|
47
|
+
def to_string_date
|
48
|
+
temp = self.to_s
|
49
|
+
return unless temp
|
50
|
+
Time.new temp
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [URL]
|
54
|
+
def to_url
|
55
|
+
temp = self.to_s
|
56
|
+
return unless temp
|
57
|
+
URL.new temp
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [[String]]
|
61
|
+
def to_ss
|
62
|
+
self.map { |val| val.to_s }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Simple additions to help expedite parsing XML.
|
67
|
+
class NodeSelection
|
68
|
+
# @return [URL]
|
69
|
+
def to_url
|
70
|
+
self.first.to_url if self.any?
|
71
|
+
end
|
72
|
+
|
73
|
+
# @return [Time]
|
74
|
+
def to_string_date
|
75
|
+
self.first.to_string_date
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [[String]]
|
79
|
+
def to_ss
|
80
|
+
self.map { |val| val.to_s }
|
81
|
+
end
|
82
|
+
|
83
|
+
# @param [Class] klass the object you want an array of
|
84
|
+
# @return [Array] an array of klass objects
|
85
|
+
def to_objects(klass)
|
86
|
+
self.map { |frag| klass.new_with_xml_fragment frag }
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param [Class] klass the object you want to make
|
90
|
+
# @return [Object] an instance of klass
|
91
|
+
def to_object(klass)
|
92
|
+
klass.new_with_xml_fragment self.first if self.any?
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
29
97
|
end
|
data/lib/jiraSOAP/url.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# A bit of a hack to support using an NSURL in MacRuby while still supporting
|
2
2
|
# MRI by using the URI module.
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# For any JIRA entity that has a URL object as an instance variable, you can
|
5
|
+
# stick what ever type of object you want in the instance varible, as long as
|
6
|
+
# the object has a #to_s method that returns a properly formatted URI.
|
7
7
|
class URL
|
8
8
|
# @return [NSURL, URI::HTTP] the type depends on your RUBY_ENGINE
|
9
9
|
attr_accessor :url
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 5
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.5.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-11-
|
17
|
+
date: 2010-11-16 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -40,8 +40,10 @@ dependencies:
|
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
segments:
|
43
|
-
-
|
44
|
-
|
43
|
+
- 1
|
44
|
+
- 4
|
45
|
+
- 4
|
46
|
+
version: 1.4.4
|
45
47
|
type: :runtime
|
46
48
|
version_requirements: *id002
|
47
49
|
- !ruby/object:Gem::Dependency
|
@@ -77,16 +79,31 @@ executables: []
|
|
77
79
|
extensions: []
|
78
80
|
|
79
81
|
extra_rdoc_files:
|
82
|
+
- ChangeLog
|
80
83
|
- LICENSE
|
81
84
|
- README.markdown
|
82
85
|
files:
|
83
86
|
- lib/jiraSOAP.rb
|
84
87
|
- lib/jiraSOAP/JIRAservice.rb
|
88
|
+
- lib/jiraSOAP/api.rb
|
89
|
+
- lib/jiraSOAP/entities.rb
|
90
|
+
- lib/jiraSOAP/entities/abstract.rb
|
91
|
+
- lib/jiraSOAP/entities/attachments.rb
|
92
|
+
- lib/jiraSOAP/entities/avatar.rb
|
93
|
+
- lib/jiraSOAP/entities/comment.rb
|
94
|
+
- lib/jiraSOAP/entities/field_value.rb
|
95
|
+
- lib/jiraSOAP/entities/filter.rb
|
96
|
+
- lib/jiraSOAP/entities/issue.rb
|
97
|
+
- lib/jiraSOAP/entities/issue_properties.rb
|
98
|
+
- lib/jiraSOAP/entities/project.rb
|
99
|
+
- lib/jiraSOAP/entities/read_only.rb
|
100
|
+
- lib/jiraSOAP/entities/schemes.rb
|
101
|
+
- lib/jiraSOAP/entities/user.rb
|
102
|
+
- lib/jiraSOAP/entities/version.rb
|
85
103
|
- lib/jiraSOAP/handsoap_extensions.rb
|
86
|
-
- lib/jiraSOAP/
|
87
|
-
- lib/jiraSOAP/remoteEntities.rb
|
104
|
+
- lib/jiraSOAP/macruby_bonuses.rb
|
88
105
|
- lib/jiraSOAP/url.rb
|
89
|
-
-
|
106
|
+
- ChangeLog
|
90
107
|
- LICENSE
|
91
108
|
- README.markdown
|
92
109
|
- test/jiraSOAP_test.rb
|
@@ -96,8 +113,8 @@ homepage: http://github.com/ferrous26/jiraSOAP
|
|
96
113
|
licenses: []
|
97
114
|
|
98
115
|
post_install_message:
|
99
|
-
rdoc_options:
|
100
|
-
|
116
|
+
rdoc_options: []
|
117
|
+
|
101
118
|
require_paths:
|
102
119
|
- lib
|
103
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|