bugzilla.rb
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· RB 代码 · 共 144 行
RB
144 行
# Copyright (c) 2005 Diego Petten貌## Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to# deal in the Software without restriction, including without limitation the# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or# sell copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in# all copies of the Software and its documentation and acknowledgment shall be# given in the documentation and software packages that this Software was# used.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL# THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.require 'open-uri'class Bugzilla def initialize(bughash) @name = bughash["name"] @dataurl = bughash["dataurl"] @reporturl = bughash["reporturl"] @useragent = bughash["useragent"] end def fetch(uri_str) puts "wgetting #{uri_str}" wget = IO.popen("wget -q -O - '" + uri_str + "'") data = wget.read wget.close return data end def summary(bugno) # OpenOffice's issuezilla is tricky, they call it issue_status status_txt = "bug_status" require 'uri' # doc = OpenURI.open_uri(@dataurl.gsub("${BUGID}", bugno)) # bugdata = REXML::Document.new(doc) bugdata = REXML::Document.new(fetch(@dataurl.gsub("${BUGID}", bugno))) return "Unable to load bug # #{bugno}" unless bugdata bugxml = bugdata.root.get_elements("bug")[0] unless bugxml bugxml = bugdata.root.get_elements("issue")[0] status_txt = "issue_status" end return "Unable to parse bug # #{bugno}" unless bugxml return "Bug # #{bugno} not found" if bugxml.attribute("status_code").to_s == "404" or bugxml.attribute("error") return "Bug #{bugno}; \"#{bugxml.get_text("short_desc")}\"; #{bugxml.get_text("product")} | #{bugxml.get_text("component")}; #{bugxml.get_text(status_txt)}, #{bugxml.get_text("resolution")}; #{bugxml.get_text("reporter")} -> #{bugxml.get_text("assigned_to")}; #{@reporturl.gsub("${BUGID}", bugno)}" endendclass BugzillaPlugin < Plugin def initialize super if FileTest.exists?(File.dirname(__FILE__) + "/bugzillas.db") data = File.open(File.dirname(__FILE__) + "/bugzillas.db").read else data = nil end if data @bugdb = Marshal.load(data) else @bugdb = Array.new end @zillas = Hash.new @bugdb.each { |bugzilla| @zillas[bugzilla["name"]] = Bugzilla.new(bugzilla) } return true end def help(plugin, topic = "") case plugin when "bug" return "bug <bugzilla> <number> => show the data about given bugzilla's bug." when "addzilla" return "addzilla <name> <dataurl> <reporturl> [<useragent>] => add a new bugzilla." when "listzilla" return "listzilla => shows the configured bugzillas" end end def privmsg(m) case m.plugin when "bug" unless m.params =~ /^(\w+) #?(\d+)/ m.reply "incorrect usage. " + help(m.plugin) return end bugzilla = $1 # => bugzilla to search for bugno = $2 # => bug number to search for m.reply @zillas[bugzilla].summary(bugno) when "addzilla" unless m.params =~ /^(\S+)\s+(\S+)\s+(\S+)(\s+(\S+))?$/ m.reply "incorrect usage. " + help(m.plugin) return end zilla = Hash.new zilla["name"] = $1 zilla["dataurl"] = $2 zilla["reporturl"] = $3 zilla["useragent"] = $4 ? $4 : "rBot/#{$version}" @bugdb.push(zilla) Marshal.dump(@bugdb, File.open(File.dirname(__FILE__) + "/bugzillas.db", "w") ) @zillas[zilla["name"]] = Bugzilla.new(zilla) m.reply "Added #{zilla["name"]}" when "listzilla" m.reply @zillas.keys.join(", ") end endendplugin = BugzillaPlugin.newplugin.register("bug")plugin.register("addzilla")plugin.register("listzilla")## Kate modeline: leave at the end# kate: indent-width 2; replace-trailing-space-save 1; space-indent 1; backspace-indents 1;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?