有人可以解釋以下Ruby代碼的工作原理嗎? (從gist: 675667拍攝)通過Web公開任何Ruby對象
require 'rubygems'
require 'rack'
class Object
def webapp
class << self
define_method :call do |env|
func, *attrs = env['PATH_INFO'].split('/').reject(&:empty?)
[200, {}, [send(func, *attrs).to_s]]
end
end
self
end
end
Rack::Handler::Mongrel.run [].webapp, :Port => 9292
# ^^^^^^^^^^^
# | (x)
# ROFLSCALE DB ---/
#
如果我們運行它,我們就可以通過Web訪問:
GET http://localhost:9292/push/1 -> 1
GET http://localhost:9292/push/2 -> 12
GET http://localhost:9292/push/3 -> 123
GET http://localhost:9292/to_a -> 123
GET http://localhost:9292/pop -> 3
GET http://localhost:9292/shift -> 1
當然,我們可以運行類似:
GET http://localhost:9292/instance_eval/exec("rm -rf /")
反正。 .. 它是如何工作的?你能一步一步地通讀代碼嗎?
爲什麼downvote? – nfm 2011-06-29 00:56:43