 
 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.
| Controlling Access by Making Methods Private | ||
|---|---|---|
| Code | Expected | Actual | 
| class SecretNumber
  def initialize
    @secret = rand(20)
  end
  def hint
    puts "The number is #{"not " if secret <= 10}greater than 10."
  end
  private 
  def secret
    @secret
  end
end
s = SecretNumber.new
s.secret | NoMethodError: private method `secret' called for #<SecretNumber:0xb7c2e83c @secret=19> | Error! (Exception?) Here's stdout: NoMethodError: private method `secret' called for #<SecretNumber:0xb7c28a24 @secret=19> from (irb):14 | 
| s.hint | The number is greater than 10. | The number is greater than 10. | 
| class LessSecretNumber < SecretNumber
  def hint
    lower = secret-rand(10)-1
    upper = secret+rand(10)+1
    "The number is somewhere between #{lower} and #{upper}."
  end
end
ls = LessSecretNumber.new
ls.hint | "The number is somewhere between -3 and 16." | "The number is somewhere between -3 and 16." | 
| ls.hint | "The number is somewhere between -1 and 15." | "The number is somewhere between -1 and 15." | 
| ls.hint | "The number is somewhere between -2 and 16." | "The number is somewhere between -2 and 16." | 
| class MyClass
  def public_method1
  end
  def public_method2
  end
  protected
  def protected_method1
  end
  private
  def private_method1
  end
  def private_method2
  end
end
class LessSecretNumber
  def compare(other)
    if secret == other.secret
    comparison = "equal to" 
    else
      comparison = secret > other.secret ? "greater than" : "less than"
    end
    "This secret number is #{comparison} the secret number you passed in."
  end  
end
a = LessSecretNumber.new
b = LessSecretNumber.new
a.hint | "The number is somewhere between 17 and 22." | "The number is somewhere between 17 and 22." | 
| b.hint | "The number is somewhere between 0 and 12." | "The number is somewhere between 0 and 12." | 
| a.compare(b) | NoMethodError: private method `secret' called for #<LessSecretNumber:0xb7bfe13c @secret=6> | Error! (Exception?) Here's stdout: NoMethodError: private method `secret' called for #<LessSecretNumber:0xb7bf8374 @secret=6> from (irb):43:in `compare' from (irb):55 | 
| class SecretNumber protected :secret end a.compare(b) | "This secret number is greater than the secret number you passed in." | "This secret number is greater than the secret number you passed in." | 
| b.compare(a) | "This secret number is less than the secret number you passed in." | "This secret number is less than the secret number you passed in." | 
| class MethodWithManySecrets :private # This method will show up in the RDoc, even though it's private. def secret_method_1 end # This method will not show up in the RDoc. def secret_method_2 # :nodoc: end end s.send(:secret) | 19 | 19 |