1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
# Web::Controller::Simple
# Copyright(c) 2004 MoonWolf <moonwolf@moonwolf.com>
require "web/escape"
require "web/response"
module Web
module Controller
class Simple
module RunMode_cmd
def run_mode(req)
rm = req.get('cmd')
if rm == nil
req.form.keys.each {|k|
if k=~/^cmd_/
rm = $'
break
end
}
end
rm ||= 'start'
return rm
end
end
module RunMode_mode
def run_mode(req)
rm = req.get('mode')
if rm == nil
req.form.keys.each {|k|
if k=~/^mode_/
rm = $'
break
end
}
end
rm ||= 'start'
return rm
end
end
def initialize
end
def setup(opt={})
end
def teardown
end
def run_mode(req)
rm = req.get('rm')
if rm == nil
req.form.keys.each {|k|
if k=~/^rm_/
rm = $'
break
end
}
end
rm ||= 'start'
return rm
end
def run(req)
begin
rsp = Web::Response.new
rm = 'do_' + run_mode(req)
send(rm, req, rsp)
rsp
rescue StandardError,ScriptError
error($!.message + "\n" + $!.backtrace.join("\n"))
end
end
def error(msg)
rsp = Web::Response.new
msg = h(msg).gsub(/\n/,"<br>")
rsp.content_type = "text/html"
rsp.write <<EOS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>ERROR #{self.class}</title>
<link rel="INDEX" href="./">
</head>
<body>
<h1>ERROR #{self.class}</h1>
<pre>#{msg}</pre>
</body>
</html>
EOS
rsp
end
def h(str)
Web::escapeHTML(str)
end
def u(str)
Web::escape(str.to_s)
end
def qs(hash)
url = '?'
url << hash.collect {|key,value|
u(key.to_s) << '=' << u(value.to_s)
}.sort.join(';')
h(url)
end
def get_param(req, name, type, must = true)
raise ArgumentError if must && !req.has_key?(name)
value = req[name]
return nil if !value and !must
value = value.read if value.respond_to?(:read)
case type
when :text
raise ArgumentError if must && value.empty?
value
when :flag
case value.trim.downcase
when /\A(?:on|yes|y|true|1)\z/
true
when /\A(?:off|no|n|false|0)\z/
false
else
raise ArgumentError
end
when :integer
Integer(value)
when Array
raise ArgumentError unless type.include?(value)
value
when Hash
type[value]
when Regexp
m = type.match(value)
raise ArgumentError unless value
m
end
end
end # Simple
end # Controller
end # Web
|