#!/usr/bin/ruby class Monster attr_reader :species, :uid @@find_uid = Hash.new(nil); def initialize(species, uid) @species = species @uid = uid @@find_uid[@uid] = self end def Monster.find_by_uid(uid) return @@find_uid[uid] end end if __FILE__ == $0 require "../utils/assert.rb" grid_bug = Monster.new("grid bug", "foo") assert_eq("assigning a uid", grid_bug.uid, "foo") snake = Monster.new("snake", "bar") assert_eq("assigning another uid", snake.uid, "bar") assert_eq("second object affects first object", grid_bug.uid, "foo") find_snake = Monster.find_by_uid("bar") assert_eq("finding a monster by uid", find_snake.species, snake.species) find_fail = Monster.find_by_uid("quux") assert_eq("finding a monster with a bogus uid", find_fail, nil) print "unit test succeeded\n" end