 
 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.
| Validating and Modifying Attribute Values | ||
|---|---|---|
| Code | Expected | Actual | 
| class Name
  # Define default getter methods, but not setter methods.
  attr_reader :first, :last
  # When someone tries to set a first name, enforce rules about it.
  def first=(first)
    if first == nil or first.size == 0
      raise ArgumentError.new('Everyone must have a first name.')
    end
    first = first.dup
    first[0] = first[0].chr.capitalize
    @first = first
  end
  # When someone tries to set a last name, enforce rules about it.
  def last=(last)
    if last == nil or last.size == 0
      raise ArgumentError.new('Everyone must have a last name.')
    end
    @last = last
  end
  def full_name
    "#{@first} #{@last}"
  end
  # Delegate to the setter methods instead of setting the instance
  # variables directly.
  def initialize(first, last)
    self.first = first
    self.last = last
  end
end
jacob = Name.new('Jacob', 'Berendes')
jacob.first = 'Mary Sue'
jacob.full_name | "Mary Sue Berendes" | "Mary Sue Berendes" | 
| john = Name.new('john', 'von Neumann')
john.full_name | "John von Neumann" | "John von Neumann" | 
| john.first = 'john' john.first | "John" | "John" | 
| john.first = nil | ArgumentError: Everyone must have a first name. ... | ArgumentError: Everyone must have a first name. from (irb):7:in `first=' from (irb):37 | 
| Name.new('Kero, international football star and performance artist', nil) | ArgumentError: Everyone must have a last name. ... | ArgumentError: Everyone must have a last name. from (irb):16:in `last=' from (irb):27:in `initialize' from (irb):38 | 
| class SimpleContainer attr_accessor :value end c = SimpleContainer.new c.respond_to? "value=" | true | true | 
| c.value = 10; c.value | 10 | 10 | 
| c.value = "some random value"; c.value | "some random value" | "some random value" | 
| c.value = [nil, nil, nil]; c.value | [nil, nil, nil] | [nil, nil, nil] |