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 Data with ActiveRecord
CodeExpectedActual
require 'cookbook_dbconnect'
activerecord_connect
class Comment < ActiveRecord::Base
  @@profanity = %w{trot krip}
  @@no_profanity_re = Regexp.new('^(?!.*(' + @@profanity.join('|') + '))')
  validates_presence_of %w{author}
  validates_length_of :content, :in => 1..200
  validates_format_of :content, :with => @@no_profanity_re, 
                      :message => 'contains profanity'
end
comment = Comment.create
comment.errors.on 'author'
"can't be blank" "can't be blank"
comment.errors['content']                        
"is too short (minimum is 1 characters)" "is too short (minimum is 1 characters)"
comment.save
false false
comment = Comment.create(:content => 'x' * 1000)
comment.errors['content']                      
"is too long (maximum is 200 characters)" "is too long (maximum is 200 characters)"
comment = Comment.create(:author => 'Alice', 
  :content => "About what I'd expect from a trotting krip such as yourself!")
comment.errors.count
1 1
comment.errors.each_full { |msg| puts msg }      
Content contains profanity
Content contains profanity
comment = Comment.create(:author => 'Alice', :content => 'I disagree!')
comment.save
true true
require 'cookbook_dbconnect'
activerecord_connect
class Comment < ActiveRecord::Base
  @@profanity = %w{trot krip}
  @@no_profanity_re = Regexp.new('^(?!.*(' + @@profanity.join('|') + '))')
  validates_presence_of %w{author}, :message => 'Please enter your name.'
  validates_length_of :content, :in => 1..200,
               :too_short => 'Please enter a comment.',
                      :too_long => 'Comments are limited to 200 characters.'
  validates_format_of :content, :with => @@no_profanity_re, 
                      :message => 'Try to express yourself without profanity.'
end
[#<Proc:0xb79a13a8@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:296>, #<Proc:0xb79a13a8@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:296>, #<Proc:0xb799f558@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:391>, #<Proc:0xb79a13a8@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:296>, #<Proc:0xb79a13a8@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:296>, #<Proc:0xb799f558@/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/validations.rb:391>]