Mongrel based Gem Server

Posted by Dave Bryson on March 15, 2007

As you know, the default Gem server included with RubyGems runs with WEBrick. I wanted something a little quicker and more reliable. So, here it is: mongrel_gem_server. Nothing complicated. Just the original Gem server adapted to use Mongrel.

What is defined?

Posted by Dave Bryson on March 01, 2007

if defined? “what does it mean?!”

Plowing through various Rails and Ruby source code, I keep running across the method defined?. However, a quick look though the API turned up nothing on it. Where’s it coming from? I can’t find it in Module, Kernel, or Object…time to explore! A quick Google search shows RedHanded solved this mystery way back in 2004.

As it turns out defined? lives in eval.c. The logic responsible for defined? actually has the identity is_defined starting around line 2249. As Redhanded explains: “defined? takes its argument and simply queries the symbol table to see if it is defined. If it is, you get a simple string of identification”:

$ x = 10
=> 10
$ defined? x
=> "local-variable"
$ def hello; puts "Hello" end
$ defined? hello
=> "method"
$ class Test; end
$ defined? Test
=>"constant"

Examples of use

Since I haven’t had the opportunity to use it yet, Here’s a couple examples I’ve found:

In Rails initializer.rb uses it to test for the existence of a constant:


   def initialize_logger
     return if defined?(RAILS_DEFAULT_LOGGER)

The method real_connect in mysql.rb uses it to check UNIXSocket:


 if (host == nil or host == "localhost")
    and defined? UNIXSocket then ...

Cliff notes version

  1. defined? is classified as an operator not a method
  2. defined? returns nil if the argument passed to it is NOT defined
  3. defined? returns a string identification of the argument passed as defined in the symbol table

Now, I wonder where and how the method is_defined is translated into the operator defined?