[LRUG] Ruby Cluetrain

Anthony Green Anthony.Green at bbc.co.uk
Mon Oct 26 06:34:50 PDT 2009

I hope James won't mind me posting this Gist he tweeted at the weekend. But
it exemplifies the kind of gaps I have in my Ruby knowledge.
Whilst I understand what individual segments of code are doing I don't
understand what the code as a whole is attempting to do.

Anyone willing to shed some light ?


# I'm creating some classes and modules on the fly, but things aren't
hooking up quite the way I'd hoped.
# Can anyone explain why when an instance of Mod::Sibling tries to call
Child.cry, that it

# doesn't call Mod::Child.cry, but instead looks for Behaviour::Child?
class Base
  def self.cry
    "#{self.name}.cry called!"
module Behaviour
  def blame
    puts "I am #{self}, a #{self.class.name}, trying to call Child.cry"
child = Class.new(Base)
Mod = Module.new
Mod.const_set(:Child, child)
child.cry # => "Mod::Child.cry called!"
Mod::Child.cry # => "Mod::Child.cry called!"
child.name # => "Mod::Child"
sibling = Class.new(Base)
sibling.class_eval do
  include Behaviour
Mod.const_set(:Sibling, sibling)
sibling.name # => "Mod::Sibling"
Mod.constants # => ["Child", "Sibling"]
sibling = Mod::Sibling.new
sibling.blame # => 
# ~> -:10:in `blame': uninitialized constant Behaviour::Child (NameError)
# ~>  from -:32
# >> I am #<Mod::Sibling:0x1973078>, a Mod::Sibling, trying to call

Anthony Green
Client Side Developer
Future Media & Technology for BBC Audio & Music Interactive

This e-mail (and any attachments) is confidential and may contain personal views which are not the views of the BBC unless specifically stated.
If you have received it in error, please delete it from your system.
Do not use, copy or disclose the information in any way nor act in reliance on it and notify the sender immediately.
Please note that the BBC monitors e-mails sent or received.
Further communication will signify your consent to this.

More information about the Chat mailing list