ruby_bugzilla 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  class RubyBugzilla
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/ruby_bugzilla.rb CHANGED
@@ -126,6 +126,65 @@ class RubyBugzilla
126
126
  [self.string_command(CMD, params), query_cmd_result.output]
127
127
  end
128
128
 
129
+
130
+ #
131
+ # Example Usage:
132
+ #
133
+ # bugids can be an Array of bug ids, a String or Fixnum
134
+ # containing a single bug id
135
+ #
136
+ # options are a hash of options supported by python-bugzilla
137
+ #
138
+ # Set the status of multiple bugs to RELEASE_PENDING:
139
+ # RubyBugzilla.modify([948970, 948971], :status => "RELEASE_PENDING")
140
+ #
141
+ # Add a comment
142
+ # RubyBugzilla.modify("948972", :comment => "whatevs")
143
+ #
144
+ # Set the status to POST and add a comment
145
+ # RubyBugzilla.modify(948970, :status => "POST", :comment => "Fixed in shabla")
146
+ #
147
+ def self.modify(bugids_arg, options)
148
+
149
+ raise "Please install python-bugzilla" unless File.exists?(File.expand_path(CMD))
150
+
151
+ bugids = Array(bugids_arg)
152
+ if bugids.empty? || options.empty? || bugids_arg.to_s.empty?
153
+ raise ArgumentError, "bugids and options must be specified"
154
+ end
155
+
156
+ uri_opt, debug_opt = self.options
157
+ params = {}
158
+
159
+ params["--bugzilla="] = "#{uri_opt}/xmlrpc.cgi" unless uri_opt.nil?
160
+ params["modify"] = nil
161
+
162
+ self.set_params_bugids(params, bugids)
163
+ self.set_params_options(params, options)
164
+
165
+ begin
166
+ modify_cmd_result = LinuxAdmin.run!(CMD, :params => params)
167
+ rescue => error
168
+ raise "#{self.string_command(CMD, params)} Failed.\n#{error}"
169
+ end
170
+
171
+ self.string_command(CMD, params)
172
+ end
173
+
174
+ private
175
+ def self.set_params_options(params, options)
176
+ options.each do |key,value|
177
+ params["--#{key}="] = value
178
+ end
179
+ end
180
+
181
+ private
182
+ def self.set_params_bugids(params, bugids)
183
+ bugids.each do |bugid|
184
+ params[bugid] = nil
185
+ end
186
+ end
187
+
129
188
  private
130
189
  def self.string_command(cmd, params = {}, password=nil)
131
190
  scrubbed_str = str = ""
@@ -134,7 +193,11 @@ class RubyBugzilla
134
193
  if value.kind_of?(Array)
135
194
  str << " #{param} \"#{value.join(" ")}\" "
136
195
  else
137
- str << " #{param}\"#{value}\" "
196
+ if value.to_s.length == 0
197
+ str << " #{param} "
198
+ else
199
+ str << " #{param}\"#{value}\" "
200
+ end
138
201
  end
139
202
  end
140
203
  scrubbed_str = str.sub(password, "********") unless password.nil?
@@ -59,12 +59,11 @@ describe RubyBugzilla do
59
59
  end
60
60
 
61
61
  context "#login!" do
62
-
63
62
  it "when the bugzilla command is not found" do
64
63
  ignore_warnings do
65
64
  RubyBugzilla::CMD = '/This/cmd/does/not/exist'
66
65
  end
67
- expect{RubyBugzilla.login!}.to raise_exception
66
+ expect { RubyBugzilla.login! }.to raise_exception
68
67
  end
69
68
 
70
69
  it "when the bugzilla login command produces output" do
@@ -90,19 +89,18 @@ describe RubyBugzilla do
90
89
  end
91
90
 
92
91
  context "#query" do
93
-
94
92
  it "when the bugzilla command is not found" do
95
93
  ignore_warnings do
96
94
  RubyBugzilla::CMD = '/This/cmd/does/not/exist'
97
95
  end
98
- expect{RubyBugzilla.query}.to raise_exception
96
+ expect { RubyBugzilla.query }.to raise_exception
99
97
  end
100
98
 
101
99
  it "when no product is specified" do
102
100
  ignore_warnings do
103
101
  RubyBugzilla::CMD = '/bin/echo'
104
102
  end
105
- expect{RubyBugzilla.query}.to raise_error(ArgumentError)
103
+ expect { RubyBugzilla.query }.to raise_error(ArgumentError)
106
104
  end
107
105
 
108
106
  it "when the bugzilla query command produces output" do
@@ -123,7 +121,102 @@ describe RubyBugzilla do
123
121
  output.should include("STATUS:")
124
122
  output.should include("SUMMARY:")
125
123
  end
124
+ end
125
+
126
+ context "#modify" do
127
+ it "when the bugzilla command is not found" do
128
+ ignore_warnings do
129
+ RubyBugzilla::CMD = '/This/cmd/does/not/exist'
130
+ end
131
+ expect { RubyBugzilla.modify }.to raise_exception
132
+ end
133
+
134
+ it "when no arguments are specified" do
135
+ ignore_warnings do
136
+ RubyBugzilla::CMD = '/bin/echo'
137
+ end
138
+ expect { RubyBugzilla.modify }.to raise_error(ArgumentError)
139
+ end
140
+
141
+ it "when no bugids are are specified" do
142
+ ignore_warnings do
143
+ RubyBugzilla::CMD = '/bin/echo'
144
+ end
145
+ expect { RubyBugzilla.modify("", :status => "POST") }.to raise_error(ArgumentError)
146
+ end
147
+
148
+ it "when no options are specified" do
149
+ ignore_warnings do
150
+ RubyBugzilla::CMD = '/bin/echo'
151
+ end
152
+ expect { RubyBugzilla.modify(9, {}) }.to raise_error(ArgumentError)
153
+ end
154
+
155
+ it "when the bugzilla modify command succeeds for one option and multiple BZs" do
156
+ # Fake the command and cookies file.
157
+ ignore_warnings do
158
+ RubyBugzilla::CMD = '/bin/echo'
159
+ RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
160
+ end
161
+
162
+ cmd, output = RubyBugzilla.login!("calvin", "hobbes")
163
+ cmd = RubyBugzilla.modify(["948970", "948971", "948972", "948973"],
164
+ :status => "RELEASE_PENDING")
126
165
 
166
+ cmd.should include("modify")
167
+ cmd.should include("--status=\"RELEASE_PENDING\"")
168
+ cmd.should include("948970")
169
+ cmd.should include("948971")
170
+ cmd.should include("948972")
171
+ cmd.should include("948973")
172
+ end
173
+
174
+ it "when the bugzilla modify command succeeds for multiple options and a Array BZ" do
175
+ # Fake the command and cookies file.
176
+ ignore_warnings do
177
+ RubyBugzilla::CMD = '/bin/echo'
178
+ RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
179
+ end
180
+
181
+ cmd, output = RubyBugzilla.login!("calvin", "hobbes")
182
+ cmd = RubyBugzilla.modify(bugids = ["948972"],
183
+ options = { :status => "POST", :comment => "Fixed in shabla" } )
184
+
185
+ cmd.should include("modify")
186
+ cmd.should include("--status=\"POST\"")
187
+ cmd.should include("948972")
188
+ cmd.should include("Fixed in shabla")
189
+ end
190
+
191
+ it "when the bugzilla modify command succeeds for a Fixnum BZ" do
192
+ # Fake the command and cookies file.
193
+ ignore_warnings do
194
+ RubyBugzilla::CMD = '/bin/echo'
195
+ RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
196
+ end
197
+
198
+ cmd, output = RubyBugzilla.login!("calvin", "hobbes")
199
+ cmd = RubyBugzilla.modify(948972, :status => "POST")
200
+
201
+ cmd.should include("modify")
202
+ cmd.should include("--status=\"POST\"")
203
+ cmd.should include("948972")
204
+ end
205
+
206
+ it "when the bugzilla modify command succeeds for a String BZ" do
207
+ # Fake the command and cookies file.
208
+ ignore_warnings do
209
+ RubyBugzilla::CMD = '/bin/echo'
210
+ RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
211
+ end
212
+
213
+ cmd, output = RubyBugzilla.login!("calvin", "hobbes")
214
+ cmd = RubyBugzilla.modify("948972", :status => "POST")
215
+
216
+ cmd.should include("modify")
217
+ cmd.should include("--status=\"POST\"")
218
+ cmd.should include("948972")
219
+ end
127
220
  end
128
221
 
129
222
  context "#credentials_from_file" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_bugzilla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-18 00:00:00.000000000 Z
12
+ date: 2013-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
131
  version: '0'
132
132
  segments:
133
133
  - 0
134
- hash: -64370731141864933
134
+ hash: -142661522033235115
135
135
  required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  none: false
137
137
  requirements:
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  segments:
142
142
  - 0
143
- hash: -64370731141864933
143
+ hash: -142661522033235115
144
144
  requirements: []
145
145
  rubyforge_project:
146
146
  rubygems_version: 1.8.25