module ContactFakeColumns def self.extended(base) base.class_eval do establish_connection(:adapter => 'fake') connection.tables = [table_name] connection.primary_keys = { table_name => 'id' } column :name, :string column :age, :integer column :avatar, :binary column :created_at, :datetime column :awesome, :boolean column :preferences, :string column :alternative_id, :integer serialize :preferences belongs_to :alternative, :class_name => 'Contact' end end # mock out self.columns so no pesky db is needed for these tests def column(name, sql_type = nil, options = {}) connection.merge_column(table_name, name, sql_type, options) end end class Contact < ActiveRecord::Base extend ContactFakeColumns end class ContactSti < ActiveRecord::Base extend ContactFakeColumns column :type, :string def type; 'ContactSti' end end