This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Managing Class Data | ||
|---|---|---|
| Code | Expected | Actual |
class Warning
@@translations = { :en => 'Wet Floor',
:es => 'Piso Mojado' }
def initialize(language=:en)
@language = language
end
def warn
@@translations[@language]
end
end
Warning.new.warn |
"Wet Floor" | "Wet Floor" |
Warning.new(:es).warn |
"Piso Mojado" | "Piso Mojado" |
class Fate
NAMES = ['Klotho', 'Atropos', 'Lachesis'].freeze
@@number_instantiated = 0
def initialize
if @@number_instantiated >= NAMES.size
raise ArgumentError, 'Sorry, there are only three Fates.'
end
@name = NAMES[@@number_instantiated]
@@number_instantiated += 1
puts "I give you... #{@name}!"
end
end
Fate.new |
I give you... Klotho! |
I give you... Klotho! |
Fate.new |
I give you... Atropos! |
I give you... Atropos! |
Fate.new |
I give you... Lachesis! |
I give you... Lachesis! |
Fate.new |
ArgumentError: Sorry, there are only three Fates. ... |
ArgumentError: Sorry, there are only three Fates. from (irb):18:in `initialize' from (irb):28 |
class Module
def class_attr_reader(*symbols)
symbols.each do |symbol|
self.class.send(:define_method, symbol) do
class_variable_get("@@#{symbol}")
end
end
end
def class_attr_writer(*symbols)
symbols.each do |symbol|
self.class.send(:define_method, "#{symbol}=") do |value|
class_variable_set("@@#{symbol}", value)
end
end
end
def class_attr_accessor(*symbols)
class_attr_reader(*symbols)
class_attr_writer(*symbols)
end
end
Fate.number_instantiated |
NoMethodError: undefined method `number_instantiated' for Fate:Class ... |
NoMethodError: undefined method `number_instantiated' for Fate:Class from (irb):49 |
class Fate class_attr_reader :number_instantiated end Fate.number_instantiated |
3 | 3 |