jirarest2 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,22 @@
1
+ === 0.0.5 / 2012-07-18
2
+
3
+ * 1 major enhancement:
4
+
5
+ * renamed create_issue.rb to jira_create_issue.rb to avoid (at least some) naming conflics
6
+
7
+ * 2 minor enhancements:
8
+
9
+ * Added support to write config file closes #4
10
+ * moved config to madbitconfig and Module Config to MadbitConfig to get rid of conflict with the config class from ruby.
11
+
12
+ * 1 bug fix:
13
+
14
+ * Fixed changed Module name in create_issue
15
+
16
+ * 2 unknowns:
17
+
18
+ * Reworked documentation
19
+
1
20
  === 0.0.4 / 2012-07-17
2
21
 
3
22
  * 1 major enhancement:
data/Manifest.txt CHANGED
@@ -6,23 +6,25 @@ README.md
6
6
  README.txt
7
7
  Rakefile
8
8
  bin/create_issue.rb
9
+ bin/jira_create_issue.rb
9
10
  copyright
10
- lib/config.rb
11
11
  lib/connect.rb
12
12
  lib/credentials.rb
13
13
  lib/exceptions.rb
14
14
  lib/issue.rb
15
- lib/issuelink.rb
16
15
  lib/jirarest2.rb
17
16
  lib/jirarest2/result.rb
17
+ lib/madbitconfig.rb
18
18
  lib/services.rb
19
19
  lib/services/issuelink.rb
20
20
  lib/services/issuelinktype.rb
21
21
  lib/services/watcher.rb
22
+ test/data/test.config.data
22
23
  test/test_connect.rb
23
24
  test/test_credentials.rb
24
25
  test/test_issue.rb
25
26
  test/test_issuelink.rb
26
27
  test/test_issuelinktype.rb
28
+ test/test_madbitconfig.rb
27
29
  test/test_result.rb
28
30
  test/test_watcher.rb
data/README.txt CHANGED
@@ -24,7 +24,7 @@ The script allows you to create new issues with watchers and link those to exist
24
24
 
25
25
  == SYNOPSIS:
26
26
 
27
- create_issue -h
27
+ jira_create_issue -h
28
28
 
29
29
  == REQUIREMENTS:
30
30
 
data/Rakefile CHANGED
@@ -17,6 +17,7 @@ require 'hoe'
17
17
  # Hoe.plugin :rubyforge
18
18
  # Hoe.plugin :rubygems
19
19
  # Hoe.plugin :website
20
+ Hoe.plugin :yard
20
21
 
21
22
  Hoe.spec 'jirarest2' do
22
23
  developer('Cyril Bitterich', 'cebit-jirarest@gunnet.de')
data/bin/create_issue.rb CHANGED
@@ -17,279 +17,7 @@
17
17
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
-
21
-
22
- if RUBY_VERSION < "1.9"
23
- puts "Sorry, I need ruby 1.9.1 or higher!"
24
- exit1
25
- end
26
-
27
- require "highline/import"
28
- require "jirarest2"
29
- require "optparse"
30
- require "ostruct"
31
- require "config"
32
- require "uri"
33
- require "pp"
34
-
35
- class ParseOptions
36
-
37
- def self.required_argument(name)
38
- puts "Argument \"#{name}\" is mandatory."
39
- exit 1
40
- end
41
-
42
- =begin
43
- parse resturn two Hashes. The first one contains the options for the issue the second one the options for the execution of the script.
44
- =end
45
- def self.parse(args)
46
- issueopts = OpenStruct.new
47
- issueopts.project = nil
48
- issueopts.issue = nil
49
- scriptopts = OpenStruct.new
50
- scriptopts.show = []
51
- scriptopts.arrayseperator = "|"
52
- scriptopts.configfile = "~/.jiraconfig"
53
-
54
- opts = OptionParser.new do |opts|
55
- opts.banner = "Usage: #{__FILE__} [options]"
56
- opts.separator ""
57
-
58
- opts.on("-p", "--project PROJECT", "Projectname") do |p|
59
- issueopts.project = p
60
- issueopts
61
- end
62
-
63
- opts.on("-i", "--issue ISSUETYPE", "Issuetype") do |i|
64
- issueopts.issue = i
65
- end
66
-
67
- opts.on("-f", "--fields", "Display the fields available for this issue") do |f|
68
- scriptopts.show << "fields"
69
- end
70
-
71
- opts.on("-r", "--requireds", "Display the the mandatory content fields for this issue") do |r|
72
- scriptopts.show << "requireds"
73
- end
74
-
75
- opts.on("-c", "--content x=value,y=value,z=value", Array, "List of fields to fill") do |list|
76
- issueopts.content = list
77
- end
78
-
79
- opts.on("-w", "--watcher USERNAME,USERNAME", Array, "List of watchers") do |w|
80
- issueopts.watchers = w
81
- end
82
-
83
- opts.on("-l", "--link ISSUE=LINKTYPE", "Key of an Issue this issue should be linked to" ) do |l|
84
- issueopts.link = l
85
- end
86
-
87
- opts.on("-F", "--field-seperator CHAR", "A fieldseperator if one of the fields is an array (Default \"|\")") do |fs|
88
- scriptopts.arrayseperator = fs
89
- end
90
-
91
-
92
- opts.on("--config-file CONFIGFILE", "Config file containing the jira credentials. (Default: ~/.jiraconfig)") do |conffile|
93
- scriptopts.configfile = conffile
94
- end
95
-
96
- opts.on("-u", "--username USERNAME", "Your Jira Username if you don't want to use the one in the master file") do |u|
97
- scriptopts.username = u
98
- end
99
-
100
- opts.on("-H", "--jira-url URL", "URL to rest api (without \"/rest/api/2\").") do |url|
101
- uri = URI(url)
102
- splitURI = URI.split(url)
103
- if splitURI[3] then
104
- url = splitURI[0].to_s + "://" + splitURI[2].to_s + ":" + splitURI[3].to_s + splitURI[5].to_s
105
- else
106
- url = splitURI[0].to_s + "://" + splitURI[2].to_s + splitURI[5].to_s
107
- end
108
- scriptopts.url = url
109
- end
110
-
111
- opts.on_tail("-h", "--help", "Display this screen") do
112
- puts opts
113
- exit
114
- end
115
-
116
- opts.on_tail("--version", "Show version") do
117
- puts OptionParser::Version.join(".")
118
- exit
119
- end
120
- end
121
-
122
-
123
- opts.parse!(args)
124
-
125
- if issueopts.project.nil? then
126
- required_argument("project")
127
- end
128
- if issueopts.issue.nil? then
129
- required_argument("issue")
130
- end
131
- return issueopts, scriptopts
132
- end #parse()
133
-
134
-
135
- end # class ParseOptions
136
-
137
- @issueopts, @scriptopts = ParseOptions.parse(ARGV)
138
-
139
-
140
- def no_issue(type,issue)
141
- puts "The #{type}type you entered (\"#{issue}\") does no exist."
142
- puts "Maybe you entered the wrong type or made a typo? (Case is relevant!)"
143
- exit 1
144
- end
145
-
146
- def get_password
147
- ask("Enter your password for user \"#{@scriptopts.username}\": ") { |q| q.echo = "*" }
148
- end
149
-
150
- =begin
151
- Gather all the credentials and build the credentials file
152
- =end
153
- def get_credentials
154
- fileconf = Config::read_configfile(@scriptopts.configfile)
155
- # We don't want to set the calues from the configfile if we have them already set.
156
- @scriptopts.username = fileconf["username"] if ( @scriptopts.username.nil? && fileconf["username"] )
157
- @scriptopts.pass = fileconf["password"] if ( @scriptopts.pass.nil? && fileconf["password"] )
158
- if ( @scriptopts.url.nil? && fileconf["URL"] ) then
159
- @scriptopts.url = fileconf["URL"]
160
- end
161
- @scriptopts.url = @scriptopts.url + "/rest/api/2/"
162
-
163
- if @scriptopts.pass.nil? then
164
- @scriptopts.pass = get_password
165
- end
166
-
167
- return Credentials.new(@scriptopts.url, @scriptopts.username, @scriptopts.pass)
168
- end
169
-
170
- =begin
171
- If there is already a conenction known returns that connection. If not or if the parameter is true it tries to create a new Connect object
172
- =end
173
- def get_connection(reconnect = false)
174
- if ! @connection || reconnect then
175
- begin
176
- @connection = Connect.new(get_credentials)
177
- @connection.heal_uri! # We want to be sure so we try to heal the connection_url if possible
178
- return @connection
179
- rescue Jirarest2::CouldNotHealURIError => e
180
- puts "REST API not found at #{e.to_s}"
181
- exit 3
182
- end
183
- else
184
- return @connection
185
- end
186
- end
187
-
188
-
189
-
190
-
191
- =begin
192
- create the issue on our side
193
- =end
194
- def open_issue
195
- begin
196
- credentials = get_credentials
197
- issue=Issue.new(@issueopts.project,@issueopts.issue,get_connection)
198
- rescue Jirarest2::AuthentificationError => e
199
- puts "Password not accepted."
200
- @scriptopts.pass = get_password
201
- retry
202
- rescue Jirarest2::AuthentificationCaptchaError => e
203
- puts "Wrong Password too many times.\nCaptcha time at #{e.to_s} to reenable your account."
204
- exit 1
205
- rescue Jirarest2::WrongProjectException => e
206
- no_issue("project",e)
207
- rescue Jirarest2::WrongIssuetypeException => e
208
- no_issue("project",e)
209
- end
210
- return issue
211
- end
212
-
213
- def show_scheme
214
- issue = open_issue
215
- if @scriptopts.show.include?("fields") then
216
- print "Available fields: "
217
- puts issue.get_fieldnames.join(", ")
218
- end
219
- if @scriptopts.show.include?("requireds") then
220
- print "Required fields: "
221
- puts issue.get_requireds.join(", ")
222
- end
223
- exit
224
- end
225
-
226
-
227
- def prepare_new_ticket
228
- issue = open_issue
229
- valueNotAllowedRaised = false
230
- @issueopts.content.each { |value|
231
- split = value.split("=")
232
- begin
233
- if issue.fieldtype(split[0]) == "array" then # If the fieldtype is an array we want to use our arrayseparator to split the fields
234
- if ! split[1].nil? then
235
- split[1] = split[1].split(@scriptopts.arrayseperator)
236
- end
237
- end
238
- issue.set_field(split[0],split[1])
239
- rescue Jirarest2::WrongFieldnameException => e
240
- no_issue("field",e)
241
- rescue Jirarest2::ValueNotAllowedException => e
242
- puts "Value #{split[1]} not allowed for field #{split[0]}."
243
- puts "Please use one of: \"" + e.message.join("\", \"") + "\""
244
- valueNotAllowedRaised = true
245
- end
246
- }
247
- if valueNotAllowedRaised then
248
- raise Jirarest2::ValueNotAllowedException
249
- end
250
- return issue
251
- end
252
-
253
- def set_watchers(issue)
254
- issue.set_watcher(credentials,@issueopts.watchers)
255
- end
256
-
257
- def create_new_ticket(issue)
258
- begin
259
- connection = get_connection # We need it so often in the next few lines that I prefer to get the result in a variable
260
- result = issue.persist(connection).result
261
- # Set the watchers
262
- if @issueopts.watchers then
263
- watcherssuccess = issue.add_watchers(connection,@issueopts.watchers)
264
- end
265
- rescue Jirarest2::RequiredFieldNotSetException => e
266
- puts "Required field \"#{e.to_s}\" not set."
267
- return 1
268
- end
269
- if result["key"] then
270
- puts "Created new issue with issue id #{result["key"]} ."
271
- if ! watcherssuccess then
272
- puts "Watchers could not be set though."
273
- end
274
- if @issueopts.link then
275
- link = IssueLink.new(connection)
276
- remoteIssue,linktype = @issueopts.link.split("=")
277
- linkresult = link.link(result["key"],remoteIssue,linktype)
278
- end
279
- return 0
280
- elsif result["errors"] then
281
- puts "An error occured. The error message was: #{result["errors"].to_s}"
282
- return 2
283
- end
284
- end
285
-
286
-
287
- # The "main function"
288
- if @scriptopts.show != [] then
289
- show_scheme
290
- end
291
- if ! @issueopts.content.nil? then # If the -c option is set. (-c and no content leads to another exception)
292
- content = prepare_new_ticket
293
- exit create_new_ticket(content)
294
- end
20
+ puts "File has been renamed to jira_create_issue.rb"
21
+ newfile = File.dirname($0) + "/jira_create_issue.rb"
22
+ puts "Please use: #{newfile} #{$*.join(" ")}"
295
23
 
@@ -0,0 +1,366 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Script to create a new issue with jira.
4
+ # Copyright (C) 2012 Cyril Bitterich
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+
20
+
21
+
22
+ if RUBY_VERSION < "1.9"
23
+ puts "Sorry, I need ruby 1.9.1 or higher!"
24
+ exit1
25
+ end
26
+
27
+ require "highline/import"
28
+ require "jirarest2"
29
+ require "optparse"
30
+ require "ostruct"
31
+ require "madbitconfig"
32
+ require "uri"
33
+ require "pp"
34
+
35
+ class ParseOptions
36
+
37
+ def self.required_argument(name)
38
+ puts "Argument \"#{name}\" is mandatory."
39
+ exit 1
40
+ end
41
+
42
+ =begin
43
+ parse resturn two Hashes. The first one contains the options for the issue the second one the options for the execution of the script.
44
+ =end
45
+ def self.parse(args)
46
+ issueopts = OpenStruct.new
47
+ issueopts.project = nil
48
+ issueopts.issue = nil
49
+ scriptopts = OpenStruct.new
50
+ scriptopts.show = []
51
+ scriptopts.arrayseperator = "|"
52
+ scriptopts.configfile = "~/.jiraconfig"
53
+
54
+ opts = OptionParser.new do |opts|
55
+ opts.banner = "Usage: #{__FILE__} [options]"
56
+ opts.separator ""
57
+
58
+ opts.on("-p", "--project PROJECT", "Projectname") do |p|
59
+ issueopts.project = p
60
+ issueopts
61
+ end
62
+
63
+ opts.on("-i", "--issue ISSUETYPE", "Issuetype") do |i|
64
+ issueopts.issue = i
65
+ end
66
+
67
+ opts.on("-f", "--fields", "Display the fields available for this issue") do |f|
68
+ scriptopts.show << "fields"
69
+ end
70
+
71
+ opts.on("-r", "--requireds", "Display the the mandatory content fields for this issue") do |r|
72
+ scriptopts.show << "requireds"
73
+ end
74
+
75
+ opts.on("-c", "--content x=value,y=value,z=value", Array, "List of fields to fill") do |list|
76
+ issueopts.content = list
77
+ end
78
+
79
+ opts.on("-w", "--watcher USERNAME,USERNAME", Array, "List of watchers") do |w|
80
+ issueopts.watchers = w
81
+ end
82
+
83
+ opts.on("-l", "--link ISSUE=LINKTYPE", "Key of an Issue this issue should be linked to" ) do |l|
84
+ issueopts.link = l
85
+ end
86
+
87
+ opts.on("-F", "--field-seperator CHAR", "A fieldseperator if one of the fields is an array (Default \"|\")") do |fs|
88
+ scriptopts.arrayseperator = fs
89
+ end
90
+
91
+
92
+ opts.on("--config-file CONFIGFILE", "Config file containing the jira credentials. (Default: ~/.jiraconfig)") do |conffile|
93
+ scriptopts.configfile = conffile
94
+ end
95
+
96
+ opts.on("--write-config-file", "Writes the configfile with the data given if it does not alredy exist.") do |wc|
97
+ scriptopts.writeconf = :write
98
+ end
99
+
100
+ opts.on("--force-write-config-file", "Writes the configfile with the data given even if it does alredy exist.") do |wc|
101
+ scriptopts.writeconf = :forcewrite
102
+ end
103
+
104
+
105
+ opts.on("-u", "--username USERNAME", "Your Jira Username if you don't want to use the one in the master file") do |u|
106
+ scriptopts.username = u
107
+ end
108
+
109
+ opts.on("-H", "--jira-url URL", "URL to rest api (without \"/rest/api/2\").") do |url|
110
+ uri = URI(url)
111
+ splitURI = URI.split(url)
112
+ if splitURI[3] then
113
+ url = splitURI[0].to_s + "://" + splitURI[2].to_s + ":" + splitURI[3].to_s + splitURI[5].to_s
114
+ else
115
+ url = splitURI[0].to_s + "://" + splitURI[2].to_s + splitURI[5].to_s
116
+ end
117
+ scriptopts.url = url
118
+ end
119
+
120
+ opts.on_tail("-h", "--help", "Display this screen") do
121
+ puts opts
122
+ exit
123
+ end
124
+
125
+ opts.on_tail("--version", "Show version") do
126
+ puts OptionParser::Version.join(".")
127
+ exit
128
+ end
129
+ end
130
+
131
+
132
+ opts.parse!(args)
133
+
134
+ if issueopts.project.nil? && scriptopts.writeconf.nil? then
135
+ required_argument("project")
136
+ end
137
+ if issueopts.issue.nil? && scriptopts.writeconf.nil? then
138
+ required_argument("issue")
139
+ end
140
+ return issueopts, scriptopts
141
+ end #parse()
142
+
143
+
144
+ end # class ParseOptions
145
+
146
+ @issueopts, @scriptopts = ParseOptions.parse(ARGV)
147
+
148
+
149
+ def no_issue(type,issue)
150
+ puts "The #{type}type you entered (\"#{issue}\") does no exist."
151
+ puts "Maybe you entered the wrong type or made a typo? (Case is relevant!)"
152
+ exit 1
153
+ end
154
+
155
+ =begin
156
+ Get the password from an interactive shell
157
+ =end
158
+ def get_password
159
+ ask("Enter your password for user \"#{@scriptopts.username}\": ") { |q|
160
+ q.echo = "*"
161
+ }
162
+ end
163
+
164
+ =begin
165
+ Gather all the credentials and build the credentials file
166
+ =end
167
+ def get_credentials
168
+ filefail = false
169
+ begin
170
+ fileconf = MadbitConfig::read_configfile(@scriptopts.configfile)
171
+ # We don't want to set the Values from the configfile if we have them already set.
172
+ @scriptopts.username = fileconf["username"] if ( @scriptopts.username.nil? && fileconf["username"] )
173
+ @scriptopts.pass = fileconf["password"] if ( @scriptopts.pass.nil? && fileconf["password"] )
174
+ if ( @scriptopts.url.nil? && fileconf["URL"] ) then
175
+ @scriptopts.url = fileconf["URL"]
176
+ end
177
+ rescue IOError => e
178
+ puts e
179
+ filefail = false
180
+ end
181
+ @scriptopts.url = @scriptopts.url + "/rest/api/2/"
182
+
183
+
184
+ if @scriptopts.pass.nil? && !( @scriptopts.username.nil?) then
185
+ @scriptopts.pass = get_password
186
+ end
187
+
188
+ missing = Array.new
189
+ missing << "URL" if @scriptopts.url.nil?
190
+ missing << "username" if @scriptopts.username.nil?
191
+ # missing << "password" if @scriptopts.pass.nil?
192
+ if missing != [] then
193
+ puts "Missing essential parameter(s) #{missing.join(",")}. Exiting..."
194
+ exit 1
195
+ else
196
+ return Credentials.new(@scriptopts.url, @scriptopts.username, @scriptopts.pass)
197
+ end
198
+ end
199
+
200
+ =begin
201
+ If there is already a conenction known returns that connection. If not or if the parameter is true it tries to create a new Connect object
202
+ =end
203
+ def get_connection(reconnect = false)
204
+ if ! @connection || reconnect then
205
+ begin
206
+ @connection = Connect.new(get_credentials)
207
+ @connection.heal_uri! # We want to be sure so we try to heal the connection_url if possible
208
+ return @connection
209
+ rescue Jirarest2::CouldNotHealURIError => e
210
+ puts "REST API not found at #{e.to_s}"
211
+ exit 3
212
+ end
213
+ else
214
+ return @connection
215
+ end
216
+ end
217
+
218
+ =begin
219
+ create the issue on our side
220
+ =end
221
+ def open_issue
222
+ begin
223
+ credentials = get_credentials
224
+ issue=Issue.new(@issueopts.project,@issueopts.issue,get_connection)
225
+ rescue Jirarest2::AuthentificationError => e
226
+ puts "Password not accepted."
227
+ @scriptopts.pass = get_password
228
+ retry
229
+ rescue Jirarest2::AuthentificationCaptchaError => e
230
+ puts "Wrong Password too many times.\nCaptcha time at #{e.to_s} to reenable your account."
231
+ exit 1
232
+ rescue Jirarest2::WrongProjectException => e
233
+ no_issue("project",e)
234
+ rescue Jirarest2::WrongIssuetypeException => e
235
+ no_issue("project",e)
236
+ end
237
+ return issue
238
+ end
239
+
240
+ =begin
241
+ Show available fields and required fields
242
+ =end
243
+ def show_scheme
244
+ issue = open_issue
245
+ if @scriptopts.show.include?("fields") then
246
+ print "Available fields: "
247
+ puts issue.get_fieldnames.join(", ")
248
+ end
249
+ if @scriptopts.show.include?("requireds") then
250
+ print "Required fields: "
251
+ puts issue.get_requireds.join(", ")
252
+ end
253
+ exit
254
+ end
255
+
256
+ =begin
257
+ Prepare a new ticket. It will not be persisted yet.
258
+ =end
259
+ def prepare_new_ticket
260
+ issue = open_issue
261
+ valueNotAllowedRaised = false
262
+ @issueopts.content.each { |value|
263
+ split = value.split("=")
264
+ begin
265
+ if issue.fieldtype(split[0]) == "array" then # If the fieldtype is an array we want to use our arrayseparator to split the fields
266
+ if ! split[1].nil? then
267
+ split[1] = split[1].split(@scriptopts.arrayseperator)
268
+ end
269
+ end
270
+ issue.set_field(split[0],split[1])
271
+ rescue Jirarest2::WrongFieldnameException => e
272
+ no_issue("field",e)
273
+ rescue Jirarest2::ValueNotAllowedException => e
274
+ puts "Value #{split[1]} not allowed for field #{split[0]}."
275
+ puts "Please use one of: \"" + e.message.join("\", \"") + "\""
276
+ valueNotAllowedRaised = true
277
+ end
278
+ }
279
+ if valueNotAllowedRaised then
280
+ raise Jirarest2::ValueNotAllowedException
281
+ end
282
+ return issue
283
+ end
284
+
285
+ =begin
286
+ a little bit to fine - could be put into the method below
287
+ =end
288
+ def set_watchers(issue)
289
+ issue.set_watcher(credentials,@issueopts.watchers)
290
+ end
291
+
292
+ =begin
293
+ do all the work to actually create a new ticket (persist, watchers, links)
294
+ =end
295
+ def create_new_ticket(issue)
296
+ begin
297
+ connection = get_connection # We need it so often in the next few lines that I prefer to get the result in a variable
298
+ result = issue.persist(connection).result
299
+ # Set the watchers
300
+ if @issueopts.watchers then
301
+ watcherssuccess = issue.add_watchers(connection,@issueopts.watchers)
302
+ end
303
+ rescue Jirarest2::RequiredFieldNotSetException => e
304
+ puts "Required field \"#{e.to_s}\" not set."
305
+ return 1
306
+ end
307
+ if result["key"] then
308
+ puts "Created new issue with issue id #{result["key"]} ."
309
+ if ! watcherssuccess && @issueopts.watchers then
310
+ puts "Watchers could not be set though."
311
+ end
312
+ if @issueopts.link then
313
+ link = IssueLink.new(connection)
314
+ remoteIssue,linktype = @issueopts.link.split("=")
315
+ linkresult = link.link(result["key"],remoteIssue,linktype)
316
+ end
317
+ return 0
318
+ elsif result["errors"] then
319
+ puts "An error occured. The error message was: #{result["errors"].to_s}"
320
+ return 2
321
+ end
322
+ end
323
+
324
+ =begin
325
+ called to write the config file
326
+ =end
327
+ def write_configfile
328
+ text = Hash.new
329
+ if @scriptopts.url.nil? then
330
+ text["#URL"] = "https://host.domain.com:port/path/"
331
+ else
332
+ text["URL"] = "#{@scriptopts.url}"
333
+ end
334
+ if @scriptopts.username.nil? then
335
+ text["#username"] = "USERNAME"
336
+ else
337
+ text["username"] = "#{@scriptopts.username}"
338
+ end
339
+ text["#password"] = "Your!PassW0rd"
340
+ begin
341
+ if @scriptopts.writeconf == :forcewrite then
342
+ MadbitConfig::write_configfile(@scriptopts.configfile,text,:force)
343
+ else
344
+ MadbitConfig::write_configfile(@scriptopts.configfile,text)
345
+ end
346
+ puts "Configfile written to #{@scriptopts.configfile}. Exiting."
347
+ exit 0
348
+ rescue MadbitConfig::FileExistsException => e
349
+ puts "Configfile #{e} already exists. Use \"--force-write-config-file\" to replace."
350
+ exit 1
351
+ end
352
+ end
353
+
354
+
355
+ # The "main function"
356
+ if @scriptopts.show != [] then
357
+ show_scheme
358
+ end
359
+ if @scriptopts.writeconf then
360
+ write_configfile
361
+ end
362
+ if ! @issueopts.content.nil? then # If the -c option is set. (-c and no content leads to another exception)
363
+ content = prepare_new_ticket
364
+ exit create_new_ticket(content)
365
+ end
366
+