Module, class and methods confusion

I have a test harness script that requires module "mhiqErrorLogger".
Within the test script, I'm attempting to call a method within a class
in the "mhiqErrorLogger" module and am getting a "undefined method"
error. Obviously, I've got something wrong here, but haven't a clue as
to what. Can someone please point me in the right direction?

···

--------------------------------
contents of test harness script:
--------------------------------
require 'dbi'
require 'mhiqErrorLogger'

begin

  dbh = DBI.connect("dbi:ADO:Provider=sqloledb;Data
Source=(local);Initial Catalog=portal;User ID=xxxx;Password=xxxx")

  #-- intentionally throw a "divide by zero" error for testing
  intError = 1/0

  rows = dbh.select_all("SELECT name FROM portal_contacts WHERE name IS
NOT NULL ORDER BY name")

  if !rows.empty?
    puts " Results returned by query"
    rows.each do |row|
      puts " Name: " + row["name"].to_s
    end
  else
    puts "Query returned no results"
  end

rescue Exception => ex
  #-- "undefined method" error gets thrown on this line!
  MHIQErrorLogger::ErrorLogger::PostError(ex, dbh)

ensure
  if (!dbh.nil?)
    dbh.disconnect
  end

end

-------------------------------
contents of mhiqErrorLogger.rb:
-------------------------------
require 'dbi'

module MHIQErrorLogger

  class ErrorLogger

    def PostError(ex,dbh)

      errorMessage = ex.message
      errorMessage = errorMessage.gsub(13.chr,"")
      errorMessage = errorMessage.gsub(10.chr,"")
      errorMessage = errorMessage.gsub(/'/,"`")

      if (dbh.nil?)

        #--
        #-- TODO: write error information to an external text file
        #--
        puts 'No database connection present'

      #-- database connection present
      else

        #-- retrieve name of the currently running script, translate all
        #-- single quotes to backticks to prevent errors when INSERTed
        scriptName = $0.gsub(/'/,"`")

        begin

          sth = dbh.prepare("INSERT INTO mhiqErrorLog (errormessage,
scriptname) VALUES (?, ?)")
          sth.execute(errorMessage, scriptName)

          row = dbh.select_one("SELECT ident_current('mhiqErrorLog') as
[newId]")
          newId = row["newId"].to_i

          sth = dbh.prepare("INSERT INTO mhiqErrorStackTrace (errorID,
modulelinenumber) VALUES (?, ?)")

          $@.each {|ele| sth.execute(newId, ele.to_s)}
          dbh.commit

        rescue Exception => ex

          dbh.rollback
          puts ex.message

        end

      end

    end ## def PostError

  end ## class ErrorLogger

end ## module MHIQErrorLogger

--
Posted via http://www.ruby-forum.com/.

Patrick Spence wrote:

rescue Exception => ex
  #-- "undefined method" error gets thrown on this line!
  MHIQErrorLogger::ErrorLogger::PostError(ex, dbh)

Just a guess, but should that be

    MHIQErrorLogger:ErrorLogger::PostError.new(ex, dbh)

···

--
Posted via http://www.ruby-forum.com/\.

Tim Hunter wrote:

Just a guess, but should that be

    MHIQErrorLogger:ErrorLogger::PostError.new(ex, dbh)

I'm getting the following error:
  ErrorLogger is not a class/module

I'm new to Ruby, obviously, and still trying to get my head wrapped
around some of it's concepts and syntax.

···

--
Posted via http://www.ruby-forum.com/\.

No, it's a method. The error is more likely here:

module MHIQErrorLogger

class ErrorLogger

   def PostError(ex,dbh)

Should be

   def self.PostError(ex,dbh)

Cheers

robert

···

2006/5/17, Tim Hunter <rmagick@gmail.com>:

Patrick Spence wrote:

> rescue Exception => ex
> #-- "undefined method" error gets thrown on this line!
> MHIQErrorLogger::ErrorLogger::PostError(ex, dbh)
>

Just a guess, but should that be

    MHIQErrorLogger:ErrorLogger::PostError.new(ex, dbh)

--
Have a look: Robert K. | Flickr

Robert Klemme wrote:

No, it's a method. The error is more likely here:

module MHIQErrorLogger

class ErrorLogger

   def PostError(ex,dbh)

Should be

   def self.PostError(ex,dbh)

Cheers

robert

Made the change in the method definition, but getting same error:
  "ErrorLogger is not a class/module"

Now I'm confused as to how it should be called...
  MHIQErrorLogger::ErrorLogger.PostError.new(ex, dbh)
or
  MHIQErrorLogger::ErrorLogger::PostError.new(ex, dbh)

···

--
Posted via http://www.ruby-forum.com/\.

Patrick Spence wrote:

Made the change in the method definition, but getting same error:
  "ErrorLogger is not a class/module"

Now I'm confused as to how it should be called...
  MHIQErrorLogger::ErrorLogger.PostError.new(ex, dbh)
or
  MHIQErrorLogger::ErrorLogger::PostError.new(ex, dbh)

OK, got it! This works...
  MHIQErrorLogger::ErrorLogger.PostError(ex, dbh)

Tim, Robert... thanks for the help!

···

--
Posted via http://www.ruby-forum.com/\.