jira-wsdl 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +8 -1
  3. data/lib/jira-wsdl.rb +129 -56
  4. metadata +7 -11
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 075612a6ddc9d80c1a8ceae5a330e04d2d3cdf11
4
+ data.tar.gz: 77e1c18f8503ab5eb1fdefd91352d853b3a659a0
5
+ SHA512:
6
+ metadata.gz: 7b4a995f17d3ea5b78433113e706fb0a0f576afbeffb7276b11cd2279d5f72b6e27475beeec94b4adf1f5aee28513ccc99046fe519ee909668591710515bdce1
7
+ data.tar.gz: 6b70ec89aa8a879e23ceb5f61d8c7f9beed130d8f0a992918c332d8bbd78bb32cc7c814e7aba140cb2904130ee6eb17b6cef93ff35e68176ee4171b1d045aa83
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # jira-wsdl
2
2
 
3
- gem for internal use of qa team projects
3
+ ruby interaction with JIRA
4
4
 
5
5
  ## Installation
6
6
 
@@ -50,3 +50,10 @@ Or install it yourself as:
50
50
 
51
51
  jira.logout token
52
52
 
53
+
54
+
55
+ ___________________________________________________________________________________________
56
+
57
+ New features? Tell us what you need that we will see what we can do. :)
58
+
59
+
data/lib/jira-wsdl.rb CHANGED
@@ -15,13 +15,23 @@ class JiraWsdl
15
15
  #create Savon.client
16
16
  @client = Savon.client(wsdl: @wsdl_url, log: false)
17
17
 
18
+ #operation list permited by JIRA soap
19
+ #@operations_available = @client.operations.sort
20
+
18
21
  #create login token
19
22
  @token ||= self.get_token
20
23
  end
21
24
 
22
- def list_operations
23
- #operation list permited by JIRA soap
24
- @operations_available = @client.operations.sort
25
+
26
+ class Response
27
+ attr_reader :success, :tickets, :optional
28
+
29
+ def initialize(success, tickets, error_msg, optional=nil)
30
+ @success = success
31
+ @tickets = tickets
32
+ @error_msg = error_msg
33
+ @optional = optional
34
+ end
25
35
  end
26
36
 
27
37
  #get token login
@@ -29,9 +39,9 @@ class JiraWsdl
29
39
  # @return [String] token
30
40
  def get_token
31
41
  response = self.login @username, @password
32
- response.to_hash[:login_response][:login_return] if response.nil? ==false and response.success?
42
+ response.to_hash[:login_response][:login_return] if response
33
43
  rescue Savon::SOAPFault => error
34
- LOG.error error.to_hash[:fault][:faultstring]
44
+ puts error.to_hash[:fault][:faultstring]
35
45
  return false
36
46
  end
37
47
 
@@ -45,9 +55,10 @@ class JiraWsdl
45
55
  Timeout::timeout(60) {
46
56
  response = @client.call(:login, message: {:username => username, :password => password})
47
57
  }
48
- response if response.success?
58
+ response if response.success? if response
49
59
  rescue Savon::SOAPFault => error
50
60
  puts error.to_hash[:fault][:faultstring]
61
+ return false
51
62
  end
52
63
 
53
64
  #logout of jira
@@ -62,64 +73,68 @@ class JiraWsdl
62
73
  response.to_hash[:logout_response][:logout_return]
63
74
  end
64
75
 
65
- #checks if a project exist
66
- #
67
- # @param [String] project
68
- # @return [Boolean]
69
- def check_project project
70
- @client.call(:get_project_by_key, message: {:token => @token, :key => project.upcase})
71
- true
72
- rescue Savon::SOAPFault => error
73
- error = error.to_hash[:fault][:faultstring]
74
- return false, error
75
- end
76
76
 
77
77
  #get the actual version and the next version of a project
78
78
  # @param [String] project_name
79
79
  def get_version(project_name)
80
80
  tries ||= 5
81
81
  all_versions = []
82
- result, error = (self.check_project project_name)
82
+ version_name =[]
83
+ hash_versions = {}
83
84
 
84
- unless result == false
85
- #get all versions xml
86
- response = @client.call(:get_versions, message: {:token => @token, :key => project_name.upcase})
85
+ #get all versions xml
86
+ response = @client.call(:get_versions, message: {:token => @token, :key => project_name.upcase})
87
+ response.to_hash[:multi_ref].each do |version|
87
88
 
88
- #get next version from hash
89
- next_version_id = response.to_hash[:get_versions_response][:get_versions_return][:'@soapenc:array_type']
90
- next_version_id = next_version_id.match(/RemoteVersion\[(\d+)\]/)[1]
89
+ begin
90
+ #get version with release date greater than todays date
91
+ version_name << version[:name] if Time.now.strftime("%F") <= Time.parse(version[:release_date]).strftime("%F")
92
+ #case the below option is without any date will get all version with release data
93
+ # and the start will be the nearest one to the today date
94
+ hash_versions.store(version[:name], version[:release_date])
95
+ rescue NoMethodError, TypeError
96
+ puts 'There were versions without release version.'
97
+ end
98
+ all_versions << version[:name]
99
+ end
91
100
 
92
- #get actual version from the array of version id's
93
- actual_version_id = (self.get_all_version_ids response.to_hash).sort.last - 1
101
+ @all_versions = all_versions.sort_by { |a| a.split('.').map &:to_i }
102
+ @actual_version = version_name.empty? ? @all_versions[@all_versions.index(hash_versions.sort_by { |k, v| v }.last[0]) + 1] : version_name.sort_by { |a| a.split('.').map &:to_i }.first
94
103
 
95
- response.to_hash[:multi_ref].each do |version|
96
- all_versions << version[:name]
97
- @next_version = version[:name] if next_version_id.to_i == version[:sequence].to_i
98
- @actual_version = version[:name] if actual_version_id.to_i == version[:sequence].to_i
104
+ # in case there is no next_version put the last two version of the array of versions
105
+ if @actual_version.nil?
106
+ @next_version = @all_versions[-1]
107
+ @actual_version = @all_versions[-2]
108
+ else
109
+ @next_version = @all_versions[@all_versions.index(@actual_version) + 1]
110
+ # if there is no next version put the last two versions
111
+ if @next_version.nil?
112
+ @next_version = @all_versions[-1]
113
+ @actual_version = @all_versions[-2]
99
114
  end
100
-
101
- @all_versions = all_versions.sort_by { |x| x.split('.').map &:to_i }
102
- raise Exceptions::CouldNotGetNextVersion, 'Problem getting Next Version number' if @next_version.nil?
103
- raise Exceptions::CouldNotGetActualVersion, 'Problem getting Actual Version number' if @actual_version.nil?
104
- return true
105
115
  end
106
- return false, error.to_s
107
- rescue Savon::SOAPFault => e
116
+
117
+ #all_versions = []
118
+ raise Exceptions::CouldNotGetNextVersion, 'Problem getting Next Version number' if @next_version.nil?
119
+ raise Exceptions::CouldNotGetActualVersion, 'Problem getting Actual Version number' if @actual_version.nil?
120
+ return true
121
+ rescue Savon::SOAPFault => error
108
122
  tries = tries -= 1
109
- if (tries).zero?
110
- return false
111
- else
123
+ unless (tries).zero?
112
124
  sleep 5
113
- self.token
125
+ logout
126
+ @token = self.get_token
114
127
  puts "Jira connection failed. Trying to connect again. (Num tries: #{tries})"
115
128
  retry
129
+ else
130
+ return false
116
131
  end
117
132
  end
118
133
 
119
- #get all version id's of the project
120
- #
121
- # @param [Hash] response
122
- # @return [Array] @version_id_array
134
+ #get all version id's of the project
135
+ #
136
+ # @param [Has] response
137
+ # @return [Array] @version_id_array
123
138
  def get_all_version_ids(response)
124
139
  version_id_array = []
125
140
  response.to_hash[:multi_ref].each do |version|
@@ -128,21 +143,76 @@ class JiraWsdl
128
143
  return version_id_array
129
144
  rescue Savon::SOAPFault => error
130
145
  puts error.to_hash[:fault][:faultstring]
146
+ return false
131
147
  end
132
148
 
149
+ #Should be used the query_by_hash or jqlquery function instead of this one
150
+ #
133
151
  #get jira tickets from a project
134
152
  #
135
153
  # @param status - verify,in progress, open, reopened, closed
136
154
  # @param project key or name
137
155
  # @param version project version
138
- # @param max_num_results max number of results
156
+ # @param maxnumresults max number of results
157
+ # @return nil, jira_tickets, (false, error_msg)
158
+ def get_jira_tickets(status, project, version, maxnumresults=300)
159
+ puts 'Should be used the query_by_hash or jqlquery function instead of this one'
160
+ response = @client.call(:get_issues_from_jql_search, message: {:token => @token,
161
+ :jqlSearch => 'status in (' + status + ') and project=' + project + ' and fixVersion in (' + version + ')',
162
+ :maxNumResults => maxnumresults})
163
+ #if response is empty
164
+ if response.to_hash.has_key? :multi_ref
165
+ jira_tickets = []
166
+ response.to_hash[:multi_ref].each do |tickets|
167
+ jira_tickets << [tickets[:key], tickets[:summary], 'http://'+@jira_host+'/browse/'+tickets[:key].to_s] if !tickets[:key].nil? and !tickets[:summary].nil?
168
+ end
169
+ end
170
+ return JiraWsdl::Response.new(true, jira_tickets, nil)
171
+ rescue Savon::SOAPFault => error
172
+ return JiraWsdl::Response.new(false, nil, error.to_hash[:fault][:faultstring].match(/.*?:(.*)/)[1])
173
+ rescue StandardError => error
174
+ puts error
175
+ return JiraWsdl::Response.new(false, nil, error)
176
+ end
177
+
178
+
179
+ #get jira tickets by hash
180
+ #
181
+ # @param hash - verify,in progress, open, reopened, closed
182
+ # @param maxnumresults max number of results
183
+ # @return nil, jira_tickets, (false, error_msg)
184
+ def query_by_hash(hash, maxnumresults=300)
185
+ begin
186
+ jql_string = hash.map { |k, v| "#{k} in (#{v})" }.join(' AND ')
187
+ puts "Query: #{jql_string}"
188
+ response = @client.call(:get_issues_from_jql_search, message: {:token => @token,
189
+ :jqlSearch => "#{jql_string}",
190
+ :maxNumResults => maxnumresults})
191
+ jira_tickets = []
192
+ if response.to_hash.has_key? :multi_ref
193
+ response.to_hash[:multi_ref].each do |tickets|
194
+ if !tickets[:key].nil? and !tickets[:summary].nil?
195
+ jira_tickets << [tickets[:key], tickets[:summary], 'http://'+@jira_host+'/browse/'+tickets[:key].to_s]
196
+ end
197
+ end
198
+ end
199
+ return JiraWsdl::Response.new(true, jira_tickets, nil)
200
+ rescue Savon::SOAPFault => error
201
+ return JiraWsdl::Response.new(false, nil, error.to_hash[:fault][:faultstring].match(/.*?:(.*)/)[1])
202
+ end
203
+ end
204
+
205
+ #get jira tickets from a project
206
+ #
207
+ # @param jql_string - jql string
208
+ # @param maxnumresults max number of results
139
209
  # @return nil, jira_tickets, (false, error_msg)
140
- def get_jira_tickets(status, project, version, max_num_results=300)
210
+ def jqlquery(jql_string, maxnumresults=300)
141
211
 
142
- response = @client.call(:get_issues_from_jql_search,
143
- message: {:token => @token,
144
- :jqlSearch => 'status in (' + status + ') and project=' + project + ' and fixVersion in (' + version + ')',
145
- :maxNumResults => max_num_results})
212
+ puts "Query: #{jql_string}"
213
+ response = @client.call(:get_issues_from_jql_search, message: {:token => @token,
214
+ :jqlSearch => "#{jql_string}",
215
+ :maxNumResults => maxnumresults})
146
216
  #if response is empty
147
217
  if response.to_hash[:multi_ref].nil?
148
218
  nil
@@ -153,10 +223,15 @@ class JiraWsdl
153
223
  jira_tickets << [tickets[:key], tickets[:summary], 'http://'+@jira_host+'/browse/'+tickets[:key].to_s]
154
224
  end
155
225
  end
156
- jira_tickets
226
+ #return true, jira_tickets
227
+ return JiraWsdl::Response.new(true, jira_tickets, nil)
157
228
  end
158
229
  rescue Savon::SOAPFault => error
159
- return false, error.to_hash[:fault][:faultstring].match(/.*?:(.*)/)[1]
230
+ #return false, error.to_hash[:fault][:faultstring].match(/.*?:(.*)/)[1]
231
+ return JiraWsdl::Response.new(false, nil, error.to_hash[:fault][:faultstring].match(/.*?:(.*)/)[1])
232
+ rescue StandardError => error
233
+ puts error
234
+ return JiraWsdl::Response.new(false, nil, error)
160
235
  end
161
236
 
162
237
  end
@@ -167,6 +242,4 @@ module Exceptions
167
242
  end
168
243
  class CouldNotGetActualVersion < StandardError;
169
244
  end
170
- class TokenNotCreated < StandardError;
171
- end
172
- end
245
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jira-wsdl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - tiago.l.nobre@gmail.com
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-26 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: savon
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -38,26 +35,25 @@ files:
38
35
  - Rakefile
39
36
  homepage:
40
37
  licenses: []
38
+ metadata: {}
41
39
  post_install_message:
42
40
  rdoc_options: []
43
41
  require_paths:
44
42
  - lib
45
43
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
44
  requirements:
48
- - - ! '>='
45
+ - - '>='
49
46
  - !ruby/object:Gem::Version
50
47
  version: '0'
51
48
  required_rubygems_version: !ruby/object:Gem::Requirement
52
- none: false
53
49
  requirements:
54
- - - ! '>='
50
+ - - '>='
55
51
  - !ruby/object:Gem::Version
56
52
  version: '0'
57
53
  requirements: []
58
54
  rubyforge_project:
59
- rubygems_version: 1.8.23
55
+ rubygems_version: 2.0.3
60
56
  signing_key:
61
- specification_version: 3
57
+ specification_version: 4
62
58
  summary: jira-wsdl
63
59
  test_files: []