D
Dmitry Borodaenko
I thought it would be trivial to derive a class from CGI and add some
instance variables to it, however:
require 'cgi'
class SamizdatCGI < CGI
def initialize
super
@session = Session.new(self)
end
attr_reader :session
end
cgi = SamizdatCGI.new
As soon as I pass some parameters into such script, I get the following
error:
/usr/lib/ruby/1.6/cgi.rb:1595:in `class_eval': (eval):1:in
`remove_const': constant SamizdatCGI::CGI_PARAMS not defined (NameError)
from /usr/lib/ruby/1.6/cgi.rb:1595:in `class_eval'
from /usr/lib/ruby/1.6/cgi.rb:1595:in `initialize'
from /usr/lib/ruby/1.6/cgi.rb:1593
Offending code in cgi.rb is (it is the same in cgi.rb from Ruby 1.8):
initialize_query() # set @params, @cookies
eval "CGI_PARAMS = @params.nil? ? nil : @params.dup"
eval "CGI_COOKIES = @cookies.nil? ? nil : @cookies.dup"
if defined?(MOD_RUBY) and (RUBY_VERSION < "1.4.3")
raise "Please, use ruby1.4.3 or later."
else
at_exit() do
if defined?(CGI_PARAMS)
self.class.class_eval("remove_constCGI_PARAMS)")
^
self.class.class_eval("remove_constCGI_COOKIES)")
end
end
end
Is it a bug in cgi.rb, or in Ruby? If it's intended to not to allow to
inherit from CGI, is there some other elegant way to generate custom
instance variables from CGI.new ?
instance variables to it, however:
require 'cgi'
class SamizdatCGI < CGI
def initialize
super
@session = Session.new(self)
end
attr_reader :session
end
cgi = SamizdatCGI.new
As soon as I pass some parameters into such script, I get the following
error:
/usr/lib/ruby/1.6/cgi.rb:1595:in `class_eval': (eval):1:in
`remove_const': constant SamizdatCGI::CGI_PARAMS not defined (NameError)
from /usr/lib/ruby/1.6/cgi.rb:1595:in `class_eval'
from /usr/lib/ruby/1.6/cgi.rb:1595:in `initialize'
from /usr/lib/ruby/1.6/cgi.rb:1593
Offending code in cgi.rb is (it is the same in cgi.rb from Ruby 1.8):
initialize_query() # set @params, @cookies
eval "CGI_PARAMS = @params.nil? ? nil : @params.dup"
eval "CGI_COOKIES = @cookies.nil? ? nil : @cookies.dup"
if defined?(MOD_RUBY) and (RUBY_VERSION < "1.4.3")
raise "Please, use ruby1.4.3 or later."
else
at_exit() do
if defined?(CGI_PARAMS)
self.class.class_eval("remove_constCGI_PARAMS)")
^
self.class.class_eval("remove_constCGI_COOKIES)")
end
end
end
Is it a bug in cgi.rb, or in Ruby? If it's intended to not to allow to
inherit from CGI, is there some other elegant way to generate custom
instance variables from CGI.new ?