jiraSOAP 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -0
- data/ChangeLog +11 -0
- data/README.markdown +9 -3
- data/Rakefile +0 -1
- data/lib/jiraSOAP.rb +4 -23
- data/lib/jiraSOAP/api.rb +9 -8
- data/lib/jiraSOAP/api/additions.rb +0 -2
- data/lib/jiraSOAP/api/attachments.rb +50 -7
- data/lib/jiraSOAP/api/avatars.rb +0 -2
- data/lib/jiraSOAP/api/comments.rb +0 -2
- data/lib/jiraSOAP/api/components.rb +13 -0
- data/lib/jiraSOAP/api/filters.rb +0 -3
- data/lib/jiraSOAP/api/issue_data_types.rb +0 -8
- data/lib/jiraSOAP/api/issues.rb +1 -8
- data/lib/jiraSOAP/api/project_roles.rb +0 -2
- data/lib/jiraSOAP/api/projects.rb +0 -5
- data/lib/jiraSOAP/api/schemes.rb +0 -2
- data/lib/jiraSOAP/api/server_info.rb +0 -2
- data/lib/jiraSOAP/api/users.rb +0 -2
- data/lib/jiraSOAP/api/versions.rb +0 -1
- data/lib/jiraSOAP/entities.rb +1 -1
- data/lib/jiraSOAP/entities/attachment.rb +59 -0
- data/lib/jiraSOAP/entities/issue.rb +1 -1
- data/lib/jiraSOAP/handsoap_extensions.rb +0 -8
- data/lib/jiraSOAP/jira_service.rb +12 -2
- data/lib/jiraSOAP/version.rb +1 -1
- data/test/attachments_test.rb +203 -0
- data/test/helper.rb +65 -0
- data/test/login_test.rb +21 -0
- data/test/logout_test.rb +30 -0
- data/test/progress_workflow_action_test.rb +25 -0
- metadata +26 -19
- data/lib/jiraSOAP/entities/attachment_metadata.rb +0 -35
- data/test/jiraSOAP_test.rb +0 -7
- data/test/test_helper.rb +0 -11
data/.yardopts
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
Version 0.10.0
|
2
|
+
|
3
|
+
* Add RemoteAPI#add_attachments_to_issue_with_key (thanks @rjharmon)
|
4
|
+
* Add RemoteAPI#components_for_project_with_key (thanks @rjharmon)
|
5
|
+
|
6
|
+
* Fix a typo in RemoteAPI#progress_workflow_action (thanks Vincent Beau)
|
7
|
+
|
8
|
+
* Deprecate RemoteAPI#add_base64_encoded_attachments_to_issue_with_key (thanks @rjharmon)
|
9
|
+
* Remove deprecated methods from previous release
|
10
|
+
* Begin making the test suite public
|
11
|
+
|
1
12
|
Version 0.9.2
|
2
13
|
|
3
14
|
* Remove unneeded httpclient dependency
|
data/README.markdown
CHANGED
@@ -43,8 +43,6 @@ See the {file:docs/GettingStarted.markdown Getting Started} guide.
|
|
43
43
|
JQL searches)
|
44
44
|
+ Parsing might be doable with array indexing instead of hash lookups
|
45
45
|
+ Use a different web driver backend (net/http is slow under load)
|
46
|
-
- Public test suite
|
47
|
-
+ Needs a lot of mock data
|
48
46
|
- ActiveRecord inspired conveniences
|
49
47
|
+ ProjectRole.new( 'test role' ).unique? # => check uniqueness
|
50
48
|
+ Issue.new( args ).create! # => creates a new issue
|
@@ -52,12 +50,20 @@ See the {file:docs/GettingStarted.markdown Getting Started} guide.
|
|
52
50
|
+ Issue.new( args ).project # => returns a JIRA::Project
|
53
51
|
|
54
52
|
|
53
|
+
## Test Suite
|
54
|
+
|
55
|
+
The test suite relies on a specific JIRA server being available. Every
|
56
|
+
thing that might need to be configured has been abstracted to its own
|
57
|
+
method so that the values can easily be changed, but I will try to
|
58
|
+
provide a database backup in the near future if the licensing works out.
|
59
|
+
|
55
60
|
## Note on Patches/Pull Requests
|
56
61
|
|
57
62
|
* Fork the project.
|
58
63
|
* Make your feature addition or bug fix.
|
59
64
|
* Add tests for it. This is important so I don't break it in a
|
60
|
-
future version unintentionally.
|
65
|
+
future version unintentionally. If it is difficult for you to run
|
66
|
+
the tests then let me know.
|
61
67
|
* Commit, do not mess with rakefile, version, or history.
|
62
68
|
(if you want to have your own version, that is fine but
|
63
69
|
bump version in a commit by itself I can ignore when I pull)
|
data/Rakefile
CHANGED
data/lib/jiraSOAP.rb
CHANGED
@@ -10,36 +10,17 @@ Handsoap.http_driver = :net_http
|
|
10
10
|
require 'jiraSOAP/handsoap_extensions'
|
11
11
|
|
12
12
|
require 'jiraSOAP/url'
|
13
|
-
require 'jiraSOAP/macruby_extensions' if RUBY_ENGINE == 'macruby'
|
14
13
|
|
15
14
|
##
|
16
15
|
# All the remote entities as well as the SOAP service client.
|
17
16
|
module JIRA; end
|
18
17
|
|
19
|
-
##
|
20
|
-
# Inspired by Gem::Deprecate from rubygems. A mixin that exposes a
|
21
|
-
# method to declare deprecated methods.
|
22
|
-
module JIRA::Deprecate
|
23
|
-
|
24
|
-
##
|
25
|
-
# Deprecate a method that begins with `get_` by printing out a
|
26
|
-
# message and then calling the original method.
|
27
|
-
#
|
28
|
-
# @param [Symbol] name
|
29
|
-
def deprecate name
|
30
|
-
define_method "get_#{name}" do |*args|
|
31
|
-
$stderr.puts <<-EOM
|
32
|
-
RemoteAPI#get_#{name} is deprecated and will be removed in the next release.
|
33
|
-
Please use RemoteAPI##{name} instead.
|
34
|
-
EOM
|
35
|
-
send name, *args
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
18
|
require 'jiraSOAP/version'
|
42
19
|
require 'jiraSOAP/core_extensions'
|
43
20
|
require 'jiraSOAP/entities'
|
44
21
|
require 'jiraSOAP/api'
|
45
22
|
require 'jiraSOAP/jira_service'
|
23
|
+
|
24
|
+
if RUBY_ENGINE == 'macruby'
|
25
|
+
require 'jiraSOAP/macruby_extensions'
|
26
|
+
end
|
data/lib/jiraSOAP/api.rb
CHANGED
@@ -5,8 +5,6 @@
|
|
5
5
|
# Atlassian; most notably, this API tries to be more idomatically Ruby by using
|
6
6
|
# snake case for method names, default values, varargs, etc..
|
7
7
|
module JIRA::RemoteAPI
|
8
|
-
extend JIRA::Deprecate
|
9
|
-
|
10
8
|
|
11
9
|
# @group Logging in/out
|
12
10
|
|
@@ -17,10 +15,9 @@ module JIRA::RemoteAPI
|
|
17
15
|
# @param [String] password
|
18
16
|
# @return [String] auth_token if successful, otherwise raises an exception
|
19
17
|
def login username, password
|
20
|
-
response
|
21
|
-
|
22
|
-
@
|
23
|
-
self.auth_token
|
18
|
+
response = soap_call 'login', username, password
|
19
|
+
@user = username
|
20
|
+
@auth_token = response.first.content
|
24
21
|
end
|
25
22
|
alias_method :log_in, :login
|
26
23
|
|
@@ -29,7 +26,10 @@ module JIRA::RemoteAPI
|
|
29
26
|
# will automatically expire after a set time (configured on the server).
|
30
27
|
# @return [Boolean] true if successful, otherwise false
|
31
28
|
def logout
|
32
|
-
jira_call( 'logout' ).to_boolean
|
29
|
+
jira_call( 'logout' ).to_boolean.tap do |_|
|
30
|
+
@user = nil
|
31
|
+
@auth_token = nil
|
32
|
+
end
|
33
33
|
end
|
34
34
|
alias_method :log_out, :logout
|
35
35
|
|
@@ -67,7 +67,7 @@ module JIRA::RemoteAPI
|
|
67
67
|
# @return [Nokogiri::XML::NodeSet]
|
68
68
|
def soap_call method, *args
|
69
69
|
response = build method, *args
|
70
|
-
response .document.
|
70
|
+
response .document.native_element/RESPONSE_XPATH
|
71
71
|
end
|
72
72
|
|
73
73
|
##
|
@@ -101,6 +101,7 @@ require 'jiraSOAP/api/additions'
|
|
101
101
|
require 'jiraSOAP/api/attachments'
|
102
102
|
require 'jiraSOAP/api/avatars'
|
103
103
|
require 'jiraSOAP/api/comments'
|
104
|
+
require 'jiraSOAP/api/components'
|
104
105
|
require 'jiraSOAP/api/filters'
|
105
106
|
require 'jiraSOAP/api/issue_data_types'
|
106
107
|
require 'jiraSOAP/api/issues'
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# SOAP API javadoc. They are generally close to something from the javadoc
|
4
4
|
# but with some extra conveniences.
|
5
5
|
module JIRA::RemoteAPIAdditions
|
6
|
-
extend JIRA::Deprecate
|
7
6
|
|
8
7
|
##
|
9
8
|
# Returns the first field that exactly matches the given
|
@@ -14,6 +13,5 @@ module JIRA::RemoteAPIAdditions
|
|
14
13
|
def custom_field_with_name name
|
15
14
|
get_custom_fields.find { |cf| cf.name == name }
|
16
15
|
end
|
17
|
-
deprecate :custom_field_with_name
|
18
16
|
|
19
17
|
end
|
@@ -13,21 +13,64 @@ module JIRA::RemoteAPI
|
|
13
13
|
# @todo change method name to reflect that you only get metadata
|
14
14
|
#
|
15
15
|
# @param [String] issue_key
|
16
|
-
# @return [Array<JIRA::
|
16
|
+
# @return [Array<JIRA::Attachment>]
|
17
17
|
def attachments_for_issue_with_key issue_key
|
18
|
-
array_jira_call JIRA::
|
18
|
+
array_jira_call JIRA::Attachment, 'getAttachmentsFromIssue', issue_key
|
19
19
|
end
|
20
|
-
deprecate :attachments_for_issue_with_key
|
21
20
|
|
22
21
|
##
|
23
|
-
# Expect this method to be slow.
|
22
|
+
# @note Expect this method to be slow.
|
23
|
+
#
|
24
|
+
# Uploads attachments to an issue using the `addBase64EncodedAttachmentsToIssue`
|
25
|
+
# SOAP method.
|
26
|
+
#
|
27
|
+
# The metadata is not automatically refreshed by this method. To get the
|
28
|
+
# updated metadata (e.g., `file_size` and `content_type`), call
|
29
|
+
# {RemoteAPI#attachments_for_issue_with_key}.
|
24
30
|
#
|
25
31
|
# @param [String] issue_key
|
26
|
-
# @param [Array<
|
27
|
-
#
|
32
|
+
# @param [Array<JIRA::Attachment>] attachments files to be uploaded;
|
33
|
+
# their `content` attributes should populated with the data
|
28
34
|
# @return [Boolean] true if successful
|
35
|
+
def add_attachments_to_issue_with_key issue_key, *attachments
|
36
|
+
invoke('soap:addBase64EncodedAttachmentsToIssue') { |msg|
|
37
|
+
msg.add 'soap:in0', self.auth_token
|
38
|
+
msg.add 'soap:in1', issue_key
|
39
|
+
msg.add 'soap:in2' do |submsg|
|
40
|
+
attachments.each { |attachment| submsg.add 'filenames', attachment.filename }
|
41
|
+
end
|
42
|
+
msg.add 'soap:in3' do |submsg|
|
43
|
+
attachments.each { |attachment| submsg.add 'base64EncodedData', [attachment.content].pack('m0') }
|
44
|
+
end
|
45
|
+
}
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# @deprecated This will be removed in the next release (either 0.11 or 1.0)
|
51
|
+
#
|
52
|
+
# (see #add_attachments_to_issue_with_key)
|
53
|
+
#
|
54
|
+
# @param [String] issue_key
|
55
|
+
# @param [Array<String>] filenames array of names for attachments
|
56
|
+
# @param [Array<String>] data base64 encoded data for upload
|
57
|
+
# @return [Boolean] true if successful, otherwise an exception is raised
|
29
58
|
def add_base64_encoded_attachments_to_issue_with_key issue_key, filenames, data
|
30
|
-
|
59
|
+
$stderr.puts <<-EOM
|
60
|
+
RemoteAPI#add_base64_encoded_attachments_to_issue_with_key is deprecated and will be removed in the next release.
|
61
|
+
Please use RemoteAPI#add_attachments_to_issue_with_key instead.
|
62
|
+
EOM
|
63
|
+
|
64
|
+
invoke('soap:addBase64EncodedAttachmentsToIssue') { |msg|
|
65
|
+
msg.add 'soap:in0', self.auth_token
|
66
|
+
msg.add 'soap:in1', issue_key
|
67
|
+
msg.add 'soap:in2' do |submsg|
|
68
|
+
filenames.each { |filename| submsg.add 'filenames', filename }
|
69
|
+
end
|
70
|
+
msg.add 'soap:in3' do |submsg|
|
71
|
+
data.each { |datum| submsg.add 'base64EncodedData', datum }
|
72
|
+
end
|
73
|
+
}
|
31
74
|
true
|
32
75
|
end
|
33
76
|
|
data/lib/jiraSOAP/api/avatars.rb
CHANGED
@@ -11,7 +11,6 @@ module JIRA::RemoteAPI
|
|
11
11
|
def project_avatar_for_key project_key
|
12
12
|
JIRA::Avatar.new_with_xml jira_call('getProjectAvatar', project_key)
|
13
13
|
end
|
14
|
-
deprecate :project_avatar_for_key
|
15
14
|
|
16
15
|
##
|
17
16
|
# Gets ALL avatars for a given project with this method; if you
|
@@ -23,7 +22,6 @@ module JIRA::RemoteAPI
|
|
23
22
|
def project_avatars_for_key project_key, include_default_avatars = false
|
24
23
|
array_jira_call JIRA::Avatar, 'getProjectAvatars', project_key, include_default_avatars
|
25
24
|
end
|
26
|
-
deprecate :project_avatars_for_key
|
27
25
|
|
28
26
|
##
|
29
27
|
# @note You cannot delete system avatars, and you need project
|
@@ -15,14 +15,12 @@ module JIRA::RemoteAPI
|
|
15
15
|
def comment_with_id id
|
16
16
|
JIRA::Comment.new_with_xml jira_call( 'getComment', id )
|
17
17
|
end
|
18
|
-
deprecate :comment_with_id
|
19
18
|
|
20
19
|
# @param [String] issue_key
|
21
20
|
# @return [Array<JIRA::Comment>]
|
22
21
|
def comments_for_issue_with_key issue_key
|
23
22
|
array_jira_call JIRA::Comment, 'getComments', issue_key
|
24
23
|
end
|
25
|
-
deprecate :comments_for_issue_with_key
|
26
24
|
|
27
25
|
# @param [JIRA::Comment] comment
|
28
26
|
# @return [JIRA::Comment]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module JIRA::RemoteAPI
|
2
|
+
# @group Components
|
3
|
+
|
4
|
+
##
|
5
|
+
# Lists a project's components
|
6
|
+
#
|
7
|
+
# @param [String] project_key
|
8
|
+
# @return [Array<JIRA::Component>]
|
9
|
+
def components_for_project_with_key project_key
|
10
|
+
array_jira_call JIRA::Component, 'getComponents', project_key
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/lib/jiraSOAP/api/filters.rb
CHANGED
@@ -10,14 +10,11 @@ module JIRA::RemoteAPI
|
|
10
10
|
array_jira_call JIRA::Filter, 'getFavouriteFilters'
|
11
11
|
end
|
12
12
|
alias_method :favorite_filters, :favourite_filters
|
13
|
-
deprecate :favorite_filters
|
14
|
-
deprecate :favourite_filters
|
15
13
|
|
16
14
|
# @param [String] id
|
17
15
|
# @return [Fixnum]
|
18
16
|
def issue_count_for_filter_with_id id
|
19
17
|
jira_call( 'getIssueCountForFilter', id ).to_i
|
20
18
|
end
|
21
|
-
deprecate :issue_count_for_filter_with_id
|
22
19
|
|
23
20
|
end
|
@@ -6,51 +6,43 @@ module JIRA::RemoteAPI
|
|
6
6
|
def priorities
|
7
7
|
array_jira_call JIRA::Priority, 'getPriorities'
|
8
8
|
end
|
9
|
-
deprecate :priorities
|
10
9
|
|
11
10
|
# @return [Array<JIRA::Resolution>]
|
12
11
|
def resolutions
|
13
12
|
array_jira_call JIRA::Resolution, 'getResolutions'
|
14
13
|
end
|
15
|
-
deprecate :resolutions
|
16
14
|
|
17
15
|
# @return [Array<JIRA::Field>]
|
18
16
|
def custom_fields
|
19
17
|
array_jira_call JIRA::Field, 'getCustomFields'
|
20
18
|
end
|
21
|
-
deprecate :custom_fields
|
22
19
|
|
23
20
|
# @return [Array<JIRA::IssueType>]
|
24
21
|
def issue_types
|
25
22
|
array_jira_call JIRA::IssueType, 'getIssueTypes'
|
26
23
|
end
|
27
|
-
deprecate :issue_types
|
28
24
|
|
29
25
|
# @param [String] project_name
|
30
26
|
# @return [Array<JIRA::IssueType>]
|
31
27
|
def issue_types_for_project_with_id project_id
|
32
28
|
array_jira_call JIRA::IssueType, 'getIssueTypesForProject', project_id
|
33
29
|
end
|
34
|
-
deprecate :issue_types_for_project_with_id
|
35
30
|
|
36
31
|
# @return [Array<JIRA::Status>]
|
37
32
|
def statuses
|
38
33
|
array_jira_call JIRA::Status, 'getStatuses'
|
39
34
|
end
|
40
|
-
deprecate :statuses
|
41
35
|
|
42
36
|
# @return [Array<JIRA::IssueType>]
|
43
37
|
def subtask_issue_types
|
44
38
|
array_jira_call JIRA::IssueType, 'getSubTaskIssueTypes'
|
45
39
|
end
|
46
|
-
deprecate :subtask_issue_types
|
47
40
|
|
48
41
|
# @param [String] project_id
|
49
42
|
# @return [Array<JIRA::IssueType>]
|
50
43
|
def subtask_issue_types_for_project_with_id project_id
|
51
44
|
array_jira_call JIRA::IssueType, 'getSubTaskIssueTypesForProject', project_id
|
52
45
|
end
|
53
|
-
deprecate :subtask_issue_types_for_project_with_id
|
54
46
|
|
55
47
|
##
|
56
48
|
# @todo find out what this method does
|
data/lib/jiraSOAP/api/issues.rb
CHANGED
@@ -20,7 +20,6 @@ module JIRA::RemoteAPI
|
|
20
20
|
def issues_from_jql_search jql_query, max_results = 2000
|
21
21
|
array_jira_call JIRA::Issue, 'getIssuesFromJqlSearch', jql_query, max_results
|
22
22
|
end
|
23
|
-
deprecate :issues_from_jql_search
|
24
23
|
|
25
24
|
##
|
26
25
|
# This method can update most, but not all, issue fields. Some limitations
|
@@ -107,14 +106,12 @@ module JIRA::RemoteAPI
|
|
107
106
|
def issue_with_key issue_key
|
108
107
|
JIRA::Issue.new_with_xml jira_call( 'getIssue', issue_key )
|
109
108
|
end
|
110
|
-
deprecate :issue_with_key
|
111
109
|
|
112
110
|
# @param [String] issue_id
|
113
111
|
# @return [JIRA::Issue]
|
114
112
|
def issue_with_id issue_id
|
115
113
|
JIRA::Issue.new_with_xml jira_call( 'getIssueById', issue_id )
|
116
114
|
end
|
117
|
-
deprecate :issue_with_id
|
118
115
|
|
119
116
|
# @param [String] id
|
120
117
|
# @param [Fixnum] max_results
|
@@ -123,21 +120,18 @@ module JIRA::RemoteAPI
|
|
123
120
|
def issues_from_filter_with_id id, max_results = 500, offset = 0
|
124
121
|
array_jira_call JIRA::Issue, 'getIssuesFromFilterWithLimit', id, offset, max_results
|
125
122
|
end
|
126
|
-
deprecate :issues_from_filter_with_id
|
127
123
|
|
128
124
|
# @param [String] issue_id
|
129
125
|
# @return [Time]
|
130
126
|
def resolution_date_for_issue_with_id issue_id
|
131
127
|
jira_call( 'getResolutionDateById', issue_id ).to_iso_date
|
132
128
|
end
|
133
|
-
deprecate :resolution_date_for_issue_with_id
|
134
129
|
|
135
130
|
# @param [String] issue_key
|
136
131
|
# @return [Time]
|
137
132
|
def resolution_date_for_issue_with_key issue_key
|
138
133
|
jira_call( 'getResolutionDateByKey', issue_key ).to_iso_date
|
139
134
|
end
|
140
|
-
deprecate :resolution_date_for_issue_with_key
|
141
135
|
|
142
136
|
##
|
143
137
|
# This method acts like {#update_issue} except that it also updates
|
@@ -153,7 +147,7 @@ module JIRA::RemoteAPI
|
|
153
147
|
# @return [JIRA::Issue]
|
154
148
|
def progress_workflow_action issue_key, action_id, *field_values
|
155
149
|
JIRA::Issue.new_with_xml jira_call('progressWorkflowAction',
|
156
|
-
issue_key,
|
150
|
+
issue_key, action_id, field_values)
|
157
151
|
end
|
158
152
|
|
159
153
|
##
|
@@ -164,6 +158,5 @@ module JIRA::RemoteAPI
|
|
164
158
|
def available_actions issue_key
|
165
159
|
array_jira_call JIRA::NamedEntity, 'getAvailableActions', issue_key
|
166
160
|
end
|
167
|
-
deprecate :available_actions
|
168
161
|
|
169
162
|
end
|
@@ -6,14 +6,12 @@ module JIRA::RemoteAPI
|
|
6
6
|
def project_roles
|
7
7
|
array_jira_call JIRA::ProjectRole, 'getProjectRoles'
|
8
8
|
end
|
9
|
-
deprecate :project_roles
|
10
9
|
|
11
10
|
# @param [String] role_id
|
12
11
|
# @return [JIRA::ProjectRole]
|
13
12
|
def project_role_with_id role_id
|
14
13
|
JIRA::ProjectRole.new_with_xml jira_call( 'getProjectRole', role_id )
|
15
14
|
end
|
16
|
-
deprecate :project_role_with_id
|
17
15
|
|
18
16
|
# @param [JIRA::ProjectRole] project_role
|
19
17
|
# @return [JIRA::ProjectRole] the role that was created
|
@@ -12,14 +12,12 @@ module JIRA::RemoteAPI
|
|
12
12
|
def project_with_key project_key
|
13
13
|
JIRA::Project.new_with_xml jira_call( 'getProjectByKey', project_key )
|
14
14
|
end
|
15
|
-
deprecate :project_with_key
|
16
15
|
|
17
16
|
# @param [String] project_id
|
18
17
|
# @return [JIRA::Project]
|
19
18
|
def project_with_id project_id
|
20
19
|
JIRA::Project.new_with_xml jira_call( 'getProjectById', project_id )
|
21
20
|
end
|
22
|
-
deprecate :project_with_id
|
23
21
|
|
24
22
|
##
|
25
23
|
# @todo Parse the permission scheme
|
@@ -30,7 +28,6 @@ module JIRA::RemoteAPI
|
|
30
28
|
def project_including_schemes_with_id project_id
|
31
29
|
JIRA::Project.new_with_xml jira_call( 'getProjectWithSchemesById', project_id )
|
32
30
|
end
|
33
|
-
deprecate :project_including_schemes_with_id
|
34
31
|
|
35
32
|
##
|
36
33
|
# @note This will not fill in {JIRA::Scheme} data for the projects.
|
@@ -40,8 +37,6 @@ module JIRA::RemoteAPI
|
|
40
37
|
array_jira_call JIRA::Project, 'getProjectsNoSchemes'
|
41
38
|
end
|
42
39
|
alias_method :projects_without_schemes, :projects
|
43
|
-
deprecate :projects
|
44
|
-
deprecate :projects_without_schemes
|
45
40
|
|
46
41
|
##
|
47
42
|
# Requires you to set at least a project name, key, and lead.
|
data/lib/jiraSOAP/api/schemes.rb
CHANGED
@@ -6,12 +6,10 @@ module JIRA::RemoteAPI
|
|
6
6
|
def notification_schemes
|
7
7
|
array_jira_call JIRA::NotificationScheme, 'getNotificationSchemes'
|
8
8
|
end
|
9
|
-
deprecate :notification_schemes
|
10
9
|
|
11
10
|
# @return [Array<JIRA::PermissionScheme>]
|
12
11
|
def permission_schemes
|
13
12
|
array_jira_call JIRA::PermissionScheme, 'getPermissionSchemes'
|
14
13
|
end
|
15
|
-
deprecate :permission_schemes
|
16
14
|
|
17
15
|
end
|
@@ -9,12 +9,10 @@ module JIRA::RemoteAPI
|
|
9
9
|
def server_info
|
10
10
|
JIRA::ServerInfo.new_with_xml jira_call( 'getServerInfo' )
|
11
11
|
end
|
12
|
-
deprecate :server_info
|
13
12
|
|
14
13
|
# @return [JIRA::ServerConfiguration]
|
15
14
|
def server_configuration
|
16
15
|
JIRA::ServerConfiguration.new_with_xml jira_call( 'getConfiguration' )
|
17
16
|
end
|
18
|
-
deprecate :server_configuration
|
19
17
|
|
20
18
|
end
|
data/lib/jiraSOAP/api/users.rb
CHANGED
@@ -7,7 +7,6 @@ module JIRA::RemoteAPI
|
|
7
7
|
def user_with_name user_name
|
8
8
|
JIRA::User.new_with_xml jira_call( 'getUser', user_name )
|
9
9
|
end
|
10
|
-
deprecate :user_with_name
|
11
10
|
|
12
11
|
##
|
13
12
|
# It seems that creating a user without any permission groups will trigger
|
@@ -39,7 +38,6 @@ module JIRA::RemoteAPI
|
|
39
38
|
frag = jira_call 'getGroup', group_name
|
40
39
|
JIRA::UserGroup.new_with_xml frag
|
41
40
|
end
|
42
|
-
deprecate :group_with_name
|
43
41
|
|
44
42
|
# @param [JIRA::UserGroup] group
|
45
43
|
# @param [JIRA::User] user
|
data/lib/jiraSOAP/entities.rb
CHANGED
@@ -18,7 +18,7 @@ require 'jiraSOAP/entities/custom_field_value'
|
|
18
18
|
require 'jiraSOAP/entities/avatar'
|
19
19
|
require 'jiraSOAP/entities/comment'
|
20
20
|
require 'jiraSOAP/entities/version'
|
21
|
-
require 'jiraSOAP/entities/
|
21
|
+
require 'jiraSOAP/entities/attachment'
|
22
22
|
|
23
23
|
require 'jiraSOAP/entities/scheme'
|
24
24
|
require 'jiraSOAP/entities/notification_scheme'
|
@@ -0,0 +1,59 @@
|
|
1
|
+
##
|
2
|
+
# Only contains the metadata for an attachment. The URI for an attachment
|
3
|
+
# appears to be of the form
|
4
|
+
# "{JIRA::JIRAService.endpoint_url}/secure/attachment/{#id}/{#file_name}".
|
5
|
+
class JIRA::Attachment < JIRA::NamedEntity
|
6
|
+
|
7
|
+
# @return [String]
|
8
|
+
add_attribute :author, 'author', :content
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
add_attribute :file_name, 'filename', :content
|
12
|
+
alias_method :filename, :file_name
|
13
|
+
alias_method :filename=, :file_name=
|
14
|
+
|
15
|
+
# @return [String]
|
16
|
+
add_attribute :file_name, 'filename', :content
|
17
|
+
|
18
|
+
##
|
19
|
+
# @note This method does not allow you to read the content of an existing
|
20
|
+
# attachment on the issue; only the metadata for the attachment may
|
21
|
+
# be read at this time.
|
22
|
+
#
|
23
|
+
# Content to be used for adding attachments, using
|
24
|
+
# {RemoteAPI#add_attachments_to_issue_with_key}. Do _not_ base64 encode
|
25
|
+
# the data yourself, it will be done for you when the attachment is
|
26
|
+
# uploaded.
|
27
|
+
#
|
28
|
+
# However, attachment data coming from the server will come down in base64
|
29
|
+
# encoded format...
|
30
|
+
#
|
31
|
+
# @return [String]
|
32
|
+
attr_accessor :content
|
33
|
+
|
34
|
+
# @return [String]
|
35
|
+
add_attribute :mime_type, 'mimetype', :content
|
36
|
+
alias_method :content_type, :mime_type
|
37
|
+
alias_method :content_type=, :mime_type=
|
38
|
+
|
39
|
+
##
|
40
|
+
# Measured in bytes
|
41
|
+
#
|
42
|
+
# @return [Number]
|
43
|
+
add_attribute :file_size, 'filesize', :to_i
|
44
|
+
|
45
|
+
# @return [Time]
|
46
|
+
add_attribute :create_time, 'created', :to_iso_date
|
47
|
+
|
48
|
+
##
|
49
|
+
# Fetch the attachment from the server.
|
50
|
+
def attachment
|
51
|
+
raise NotImplementedError, 'Please implement me. :('
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# @deprecated This is just an alias, please use {JIRA::Attachment} instead
|
57
|
+
#
|
58
|
+
# Just an alias for {JIRA::Attachment}.
|
59
|
+
JIRA::AttachmentMetadata = JIRA::Attachment
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# @todo Add attributes for the comments and the attachment metadata
|
5
5
|
#
|
6
6
|
# Contains most of the data and metadata for a JIRA issue, but does
|
7
|
-
# not contain the {JIRA::Comment}s or {JIRA::
|
7
|
+
# not contain the {JIRA::Comment}s or {JIRA::Attachment}s.
|
8
8
|
#
|
9
9
|
# This class is easily the most convoluted structure in the API, and will
|
10
10
|
# likely be the greatest source of bugs. The irony of the situation is that
|
@@ -27,11 +27,3 @@ class Handsoap::XmlMason::Node
|
|
27
27
|
array.each { |element| element.soapify_for node, name }
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
31
|
-
##
|
32
|
-
# Monkey patch to expose the underlying Nokogiri object as jiraSOAP
|
33
|
-
# can parse much faster without the Handsoap layer in between.
|
34
|
-
class Handsoap::XmlQueryFront::NokogiriDriver
|
35
|
-
# @return [Nokogiri::XML::Element]
|
36
|
-
attr_reader :element
|
37
|
-
end
|
@@ -13,7 +13,7 @@ class JIRA::JIRAService < Handsoap::Service
|
|
13
13
|
include JIRA::RemoteAPIAdditions
|
14
14
|
|
15
15
|
# @return [String]
|
16
|
-
|
16
|
+
attr_reader :auth_token
|
17
17
|
|
18
18
|
# @return [String]
|
19
19
|
attr_reader :user
|
@@ -21,6 +21,16 @@ class JIRA::JIRAService < Handsoap::Service
|
|
21
21
|
# @return [String]
|
22
22
|
attr_reader :endpoint_url
|
23
23
|
|
24
|
+
class << self
|
25
|
+
##
|
26
|
+
# Expose endpoint URL
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
def endpoint_url
|
30
|
+
@@endpoint_url
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
24
34
|
##
|
25
35
|
# Initialize _and_ log in. Fancy.
|
26
36
|
#
|
@@ -36,7 +46,7 @@ class JIRA::JIRAService < Handsoap::Service
|
|
36
46
|
|
37
47
|
# @param [String,URI::HTTP,NSURL] endpoint for the JIRA server
|
38
48
|
def initialize endpoint
|
39
|
-
@endpoint_url = endpoint.to_s
|
49
|
+
@@endpoint_url = @endpoint_url = endpoint.to_s
|
40
50
|
self.class.endpoint({
|
41
51
|
uri:"#{endpoint_url}/rpc/soap/jirasoapservice-v2",
|
42
52
|
version:2
|
data/lib/jiraSOAP/version.rb
CHANGED
@@ -0,0 +1,203 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
# @note These tests will bloat up your server after a while
|
4
|
+
class TestAddAttachmentsToIssueWithKey < MiniTest::Unit::TestCase
|
5
|
+
setup_usual
|
6
|
+
|
7
|
+
def key
|
8
|
+
'JIRA-1'
|
9
|
+
end
|
10
|
+
|
11
|
+
def image1
|
12
|
+
@image1 ||= "switcheroo-#{Time.now.to_f}.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
def image2
|
16
|
+
@image2 ||= "colemak-#{Time.now.to_f}.png"
|
17
|
+
end
|
18
|
+
|
19
|
+
def attachment1
|
20
|
+
@attachment ||= JIRA::Attachment.new.tap do |x|
|
21
|
+
x.content = File.read(File.join(File.dirname(__FILE__), '..', 'Rakefile'))
|
22
|
+
x.file_name = "Rakefile-#{Time.now.to_f}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def attachment2
|
27
|
+
@attachment ||= JIRA::Attachment.new.tap do |x|
|
28
|
+
x.content = File.read(File.join(File.dirname(__FILE__), '..', 'jiraSOAP.gemspec'))
|
29
|
+
x.file_name = "Rakefile-#{Time.now.to_f}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_returns_true
|
34
|
+
assert_equal true,
|
35
|
+
db.add_attachments_to_issue_with_key(key, attachment1)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_attachment_data_is_unaltered # for some definition of unaltered
|
39
|
+
skip 'Need to implement the method for getting attachments first'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_add_one_attachment
|
43
|
+
db.add_attachments_to_issue_with_key key, attachment1
|
44
|
+
issue = db.issue_with_key key
|
45
|
+
refute_nil issue.attachment_names.find { |x| x == attachment1.file_name }
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_add_two_attachments
|
49
|
+
db.add_attachments_to_issue_with_key key, attachment1, attachment2
|
50
|
+
issue = db.issue_with_key key
|
51
|
+
refute_nil issue.attachment_names.find { |x| x == attachment1.file_name }
|
52
|
+
refute_nil issue.attachment_names.find { |x| x == attachment2.file_name }
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_returns_true_base64
|
56
|
+
assert_equal true,
|
57
|
+
db.add_base64_encoded_attachments_to_issue_with_key(key,
|
58
|
+
[image1],
|
59
|
+
[switcheroo])
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_add_one_attachment_base64
|
63
|
+
db.add_base64_encoded_attachments_to_issue_with_key(key,
|
64
|
+
[image1],
|
65
|
+
[switcheroo])
|
66
|
+
issue = db.issue_with_key key
|
67
|
+
refute_nil issue.attachment_names.find { |x| x == image1 }
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_add_two_attachments_base64
|
71
|
+
db.add_base64_encoded_attachments_to_issue_with_key(key,
|
72
|
+
[image1, image2],
|
73
|
+
[switcheroo, colemak])
|
74
|
+
issue = db.issue_with_key key
|
75
|
+
refute_nil issue.attachment_names.find { |x| x == image1 }
|
76
|
+
refute_nil issue.attachment_names.find { |x| x == image2 }
|
77
|
+
end
|
78
|
+
|
79
|
+
def switcheroo
|
80
|
+
<<-EOF
|
81
|
+
IyEvdXNyL2Jpbi9lbnYgbWFjcnVieQoKZmlsZSA9IElPLnJlYWQoJ0xvY2FsaXphYmxlLnR4dCcp
|
82
|
+
LnNwbGl0KC9cbi8pLnNlbGVjdCB7IHxsaW5lfCAhbGluZS5tYXRjaCgvOyQvKS5uaWw/IH0uZWFj
|
83
|
+
aCB7IHxsaW5lfAogIG1hZ2ljID0gbGluZS5tYXRjaCAvIiguKykiXHMrPVxzKyIoLispIjsvdQoK
|
84
|
+
ICBwdXRzIDw8RU9GCiAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgPGtleT5DcmVhdGVEYXRl
|
85
|
+
PC9rZXk+CiAgICAgICAgICAgICAgIDxyZWFsPjEuMDwvcmVhbD4KICAgICAgICAgICAgICAgPGtl
|
86
|
+
eT5LZXk8L2tleT4KICAgICAgICAgICAgICAgPHN0cmluZz4jeyQxfTwvc3RyaW5nPgogICAgICAg
|
87
|
+
ICAgICAgICA8a2V5PlZhbHVlPC9rZXk+CiAgICAgICAgICAgICAgIDxzdHJpbmc+I3skMn08L3N0
|
88
|
+
cmluZz4KICAgICAgIDwvZGljdD4KRU9GCn0K
|
89
|
+
EOF
|
90
|
+
end
|
91
|
+
|
92
|
+
def colemak
|
93
|
+
<<-EOF
|
94
|
+
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
|
199
|
+
QyL2DYZVAAAAAElFTkSuQmCC
|
200
|
+
EOF
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'jiraSOAP'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'minitest', '~> 2.5'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'minitest/pride'
|
7
|
+
|
8
|
+
class MiniTest::Unit::TestCase
|
9
|
+
|
10
|
+
def user
|
11
|
+
'marada'
|
12
|
+
end
|
13
|
+
|
14
|
+
def password
|
15
|
+
'test'
|
16
|
+
end
|
17
|
+
|
18
|
+
def host
|
19
|
+
'http://169.254.199.62:8080'
|
20
|
+
end
|
21
|
+
|
22
|
+
def db
|
23
|
+
@db ||= JIRA::JIRAService.new host
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.setup_usual
|
27
|
+
define_method :setup do
|
28
|
+
db.login user, password
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def teardown
|
33
|
+
db.logout
|
34
|
+
end
|
35
|
+
|
36
|
+
def assert_instance_of_boolean value, msg = nil
|
37
|
+
if value == true || value == false
|
38
|
+
assert true
|
39
|
+
else
|
40
|
+
msg = "Expected #{mu_pp(value)} to be a boolean" unless msg
|
41
|
+
assert false, msg
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
basic = ['login_test', 'logout_test']
|
49
|
+
create = ['attachments_test']
|
50
|
+
read = basic + []
|
51
|
+
update = []
|
52
|
+
delete = []
|
53
|
+
all = basic + create + read + update + delete
|
54
|
+
|
55
|
+
# Look at environment variables to decide which tests to run
|
56
|
+
tests = case ENV['JIRASOAP']
|
57
|
+
when 'all' then all
|
58
|
+
when 'basic' then basic
|
59
|
+
when 'create' then create
|
60
|
+
when 'read' then read
|
61
|
+
when 'update' then update
|
62
|
+
when 'delete' then delete
|
63
|
+
else read # hmm, for safeties sake, but maybe it should be all...
|
64
|
+
end
|
65
|
+
tests.each do |test| require test end
|
data/test/login_test.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
class TestLogin < MiniTest::Unit::TestCase
|
2
|
+
|
3
|
+
def test_returns_token
|
4
|
+
assert_match /^[a-zA-Z0-9]+$/, db.login(user, password)
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_caches_the_token
|
8
|
+
db.login(user, password)
|
9
|
+
assert_match /^[a-zA-Z0-9]+$/, db.auth_token
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_caches_the_user
|
13
|
+
db.login(user, password)
|
14
|
+
assert_equal user, db.instance_variable_get(:@user)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_aliased
|
18
|
+
assert_equal db.method(:login), db.method(:log_in)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/test/logout_test.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
class TestLogout < MiniTest::Unit::TestCase
|
2
|
+
setup_usual
|
3
|
+
|
4
|
+
def test_normal
|
5
|
+
db.login user, password
|
6
|
+
assert db.logout
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_no_session
|
10
|
+
# strongly assert is false, not nil
|
11
|
+
db.logout
|
12
|
+
assert_equal false, db.logout
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_unsets_cached_attributes
|
16
|
+
db.login user, password
|
17
|
+
db.logout
|
18
|
+
assert_nil db.instance_variable_get(:@user)
|
19
|
+
assert_nil db.auth_token
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_aliased
|
23
|
+
assert_equal db.method(:logout), db.method(:log_out)
|
24
|
+
end
|
25
|
+
|
26
|
+
# override since we logout during the test
|
27
|
+
def teardown
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class TestProgressWorkflowAction < MiniTest::Unit::TestCase
|
2
|
+
setup_usual
|
3
|
+
|
4
|
+
def key
|
5
|
+
'JIRA-1'
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_progress_only
|
9
|
+
action = jira.available_actions(key).find do |action|
|
10
|
+
action.name == 'Close Issue'
|
11
|
+
end
|
12
|
+
db.progress_workflow_action key, action.id
|
13
|
+
|
14
|
+
action = jira.available_actions(key).find do |action|
|
15
|
+
action.name == 'Reopen Issue'
|
16
|
+
end
|
17
|
+
db.progress_workflow_action key, action.id
|
18
|
+
end
|
19
|
+
|
20
|
+
# def test_progress_and_update_field
|
21
|
+
# assignee = JIRA::FieldValue.new 'assignee', 'mrada'
|
22
|
+
# jira.progress_workflow_action 'TST-14', action.id, assignee
|
23
|
+
# end
|
24
|
+
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jiraSOAP
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-09-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &70273483161760 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70273483161760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: handsoap
|
27
|
-
requirement: &
|
27
|
+
requirement: &70273483161180 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.1.8
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70273483161180
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &70273483160560 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.7.2
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70273483160560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: redcarpet
|
49
|
-
requirement: &
|
49
|
+
requirement: &70273483160040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,18 +54,18 @@ dependencies:
|
|
54
54
|
version: '1.17'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70273483160040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: minitest
|
60
|
-
requirement: &
|
60
|
+
requirement: &70273483159100 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.
|
65
|
+
version: '2.5'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70273483159100
|
69
69
|
description: Written to run fast and work on Ruby 1.9 as well as MacRuby
|
70
70
|
email:
|
71
71
|
- markrada26@gmail.com
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/jiraSOAP/api/attachments.rb
|
83
83
|
- lib/jiraSOAP/api/avatars.rb
|
84
84
|
- lib/jiraSOAP/api/comments.rb
|
85
|
+
- lib/jiraSOAP/api/components.rb
|
85
86
|
- lib/jiraSOAP/api/filters.rb
|
86
87
|
- lib/jiraSOAP/api/issue_data_types.rb
|
87
88
|
- lib/jiraSOAP/api/issues.rb
|
@@ -94,7 +95,7 @@ files:
|
|
94
95
|
- lib/jiraSOAP/api/worklog.rb
|
95
96
|
- lib/jiraSOAP/api.rb
|
96
97
|
- lib/jiraSOAP/core_extensions.rb
|
97
|
-
- lib/jiraSOAP/entities/
|
98
|
+
- lib/jiraSOAP/entities/attachment.rb
|
98
99
|
- lib/jiraSOAP/entities/avatar.rb
|
99
100
|
- lib/jiraSOAP/entities/comment.rb
|
100
101
|
- lib/jiraSOAP/entities/component.rb
|
@@ -138,8 +139,11 @@ files:
|
|
138
139
|
- lib/jiraSOAP.rb
|
139
140
|
- .yardopts
|
140
141
|
- Rakefile
|
141
|
-
- test/
|
142
|
-
- test/
|
142
|
+
- test/attachments_test.rb
|
143
|
+
- test/helper.rb
|
144
|
+
- test/login_test.rb
|
145
|
+
- test/logout_test.rb
|
146
|
+
- test/progress_workflow_action_test.rb
|
143
147
|
- README.markdown
|
144
148
|
- ChangeLog
|
145
149
|
- LICENSE.txt
|
@@ -166,10 +170,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
170
|
version: '0'
|
167
171
|
requirements: []
|
168
172
|
rubyforge_project:
|
169
|
-
rubygems_version: 1.8.
|
173
|
+
rubygems_version: 1.8.5
|
170
174
|
signing_key:
|
171
175
|
specification_version: 3
|
172
176
|
summary: A Ruby client for the JIRA SOAP API
|
173
177
|
test_files:
|
174
|
-
- test/
|
175
|
-
- test/
|
178
|
+
- test/attachments_test.rb
|
179
|
+
- test/helper.rb
|
180
|
+
- test/login_test.rb
|
181
|
+
- test/logout_test.rb
|
182
|
+
- test/progress_workflow_action_test.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Only contains the metadata for an attachment. The URI for an attachment
|
3
|
-
# appears to be of the form
|
4
|
-
# "{JIRA::JIRAService.endpoint_url}/secure/attachment/{#id}/{#file_name}"
|
5
|
-
class JIRA::AttachmentMetadata < JIRA::NamedEntity
|
6
|
-
|
7
|
-
# @return [String]
|
8
|
-
add_attribute :author, 'author', :content
|
9
|
-
|
10
|
-
# @return [String]
|
11
|
-
add_attribute :file_name, 'filename', :content
|
12
|
-
alias_method :filename, :file_name
|
13
|
-
alias_method :filename=, :file_name=
|
14
|
-
|
15
|
-
# @return [String]
|
16
|
-
add_attribute :mime_type, 'mimetype', :content
|
17
|
-
alias_method :content_type, :mime_type
|
18
|
-
alias_method :content_type=, :mime_type=
|
19
|
-
|
20
|
-
##
|
21
|
-
# Measured in bytes
|
22
|
-
#
|
23
|
-
# @return [Number]
|
24
|
-
add_attribute :file_size, 'filesize', :to_i
|
25
|
-
|
26
|
-
# @return [Time]
|
27
|
-
add_attribute :create_time, 'created', :to_iso_date
|
28
|
-
|
29
|
-
##
|
30
|
-
# Fetch the attachment from the server.
|
31
|
-
def attachment
|
32
|
-
raise NotImplementedError, 'Please implement me. :('
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
data/test/jiraSOAP_test.rb
DELETED
data/test/test_helper.rb
DELETED