Hi
I have created a class with a class method. I am trying to call it
from a different class and I get the “uninitialized constant” error.
Could some body help me out.
Class with class method
To change this template, choose Tools | Templates
and open the template in the editor.
require “log4r/logger”
class XELogger < Log4r::Logger
def XELogger.get(fullname)
begin
return self.superclass.get(fullname)
rescue NameError
return Log4r::Logger.new(fullname , nil , true , false)
end
end
end
Calling class
To change this template, choose Tools | Templates
and open the template in the editor.
#require “rubygems”
require “webrick”
require “log4r”
require “monitor”
#require “XELogger”
require “rexml/document”
class XmlEngine < WEBrick::HTTPServlet::FileHandler
include MonitorMixin
this is a BigNum
@@serialVersionUID = 1
@xmlParser
@htmlParsers
@hasXmlTemplate
@stcRead
@formatHashtable
@replaceHashtable
@strDriverDefault
@strUrlDefault
@strBaseLocation
@strFormatFile
@fileXmlEngineFormat
@fileBaseLocation
@sessionLanguage
@strReplaceWhat
@strReplaceWith
@isResource = false
@configXMLEngine
These loggers (xmlEngine and reloadXml) should be instantated before
they can
used.
@@log4rXmlEngine = XELogger.get[‘xmlEngine’]
@@log4rReloadXml = XELogger.get(‘reloadXml’)
Constructor
ToDo: Assign this argument to the instance variable
“connectionProvider”
def initialize(connectionProvider)
init
end
ToDo: Needs testing
private
def loadParams
@replaceHashtable = Hash.new # Hash with a string as key and Array
as value
@htmlReplaceVector = Array.new # Array of ReplaceElement objects
@htmlReplaceVector.push(ReplaceElement.new("&", "&")).
push(ReplaceElement.new("\"", """)).
push(ReplaceElement.new("\n", " ")).
push(ReplaceElement.new("\r", " ")).
push(ReplaceElement.new("<", "<")).
push(ReplaceElement.new(">", ">")).
push(ReplaceElement.new( "®", "®")).
push(ReplaceElement.new( "€", "€")).
push(ReplaceElement.new( "ñ", "ñ")).
push(ReplaceElement.new( "Ñ", "Ñ"))
@replaceHashtable[:html] = @htmlReplaceVector
@foReplaceVector = Array.new
@foReplacement.push(ReplaceElement.new("&", "&")).
push(ReplaceElement.new("<", "<")).
push(ReplaceElement.new(">", ">")).
push(ReplaceElement.new("\\", "\")).
push(ReplaceElement.new("º", "º")).
push(ReplaceElement.new("ª", "ª")).
push(ReplaceElement.new("®", "®")).
push(ReplaceElement.new("€", "€")).
push(ReplaceElement.new("\n", " "))
@replaceHashtable[:fo] = @foReplaceVector
@htmlPreformattedReplaceVector = Array.new
@htmlPreformattedReplaceVector.push(ReplaceElement.new("&",
“&”)).
push(ReplaceElement.new(""", “”")).
push(ReplaceElement.new("<", “<”)).
push(ReplaceElement.new(">", “>”)).
push(ReplaceElement.new("\n", “
”)).
push(ReplaceElement.new("\r", " ")).
push(ReplaceElement.new(“®”, “®”))
@replaceHashtable[:htmlPreformatted] = @htmlPreformattedVector
@htmlHelpReplaceVector = Array.new
@htmlHelpReplaceVector.push(ReplaceElement.new("\n", "<BR>")).
push(ReplaceElement("\r", ""))
@replaceHashtable[:htmlHelp] = @htmlHelpReplaceVector
@htmlPreformattedTextareaReplaceVector = Array.new
@htmlPreformattedTextareaReplaceVector.push(ReplaceElement.new("&",
“&”)).
push(ReplaceElement.new(""", “”")).
push(ReplaceElement.new("<", “<”)).
push(ReplaceElement.new(">", “>”)).
push(ReplaceElement.new(“®”, “®”))
@replaceHashtable[:htmlPreformattedTextarea] =
@htmlPreformattedTextareaReplaceVector
@htmlJavascriptReplaceVector = Array.new
@htmlJavascriptReplaceVector.push(ReplaceElement.new("'", "\\'")).
push(ReplaceElement("\"", """)).
push(ReplaceElement("\n", "\\n"))
@replaceHashtable[:htmlJavascript] = @htmlJavascriptReplaceVector
end
Simili to Java Servlet’s lifecycle method init.
public
def init()
@hasXmlTemplate = Hash.new # Vector of XmlTemplates
@stcRead = Stack.new # Stack of Xml Templates not Read
@formatHashtable = Hash.new # Hash table with String as key and
# FormatCouple as value
# ToDo instantiate XmlParser
@xmlParserFormat =
end
This mesage reads a file that defines a XmlTemplate without any
discard
def readXmlTemplate(strXmlTemplateFile)
end
This function reads a file that defines a XmlTemplate with a vector
of
discard
def readXmlTemplate(strXmlTemplateFile, *discard)
# synchronize {put the code to be synchronized here}
end
This function adds the xmltemplate to the list of xmltemplates and
read all
the XmlTemplates.
def readAllXmlTemplates(strXmlTemplateName, strXmlTemplateFile,
*discard)
end
This function add the XmlTemplate to the list of XmlTemplates or
return an
existing XmlTemplate if it was found in the list.
private
def addXmlTemplate(strXmlTemplateName, strXmlTemplateFile, *discard)
end
This function reads the XmlTemplate
def readFile(xmlTemplate)
end
public
def do_GET(request,response)
puts “here in do_get”
end
def do_POST(request,response)
puts “here in do_post”
end
def connect
end
def closeConnections
end
def destroy
end
Will configure log4r from the xml configure file passed
The file object can be just the name of the file if the
file is in the same folder, if otherwise file object
should be a complete path to file’s location.
ToDo: Needs Tesing.
def self.configureLog4r(file)
if file !=nil
Configurator.load_xml_file(file)
else
Configurator.load_xml_file(log4r.xml)
end
end
Courtesy of:
http://rubynugs.blogspot.com/2006/12/creating-java-like-main-method-in-ruby.html
do
if FILE == $0 && ARGV.length < 1
@i
configureLog4r(nil)
@strFile
puts “main”
else if FILE == $0 && ARGV.length > 1
end
end
XmlEngineNP: classes for compatibilizing with the Reports version
def readReportConfiguration(strReportFile)
end
def readReportConfiguration(strReportFile, *discard)
end
# Log4r::Logger’s get method throws a NameError when it cannot find
the
# specified log file. This method will help create a new log file
when
# one doesn’t exist. ToDo: Create a subclass of Logger class and
override
# the Logger class’s get method.
def fetchLogger(_name)
begin
return @newLogFile = Log4r::Logger.get(_name)
rescue NameError
return @newLogFile = Log4r::Logger.new(_name , nil , true ,
false)
end
end
end