class << ActiveRecord::Base def concerned_with(*concerns) concerns.each do |concern| require_dependency "#{name.underscore}/#{concern}" end end end class User < ActiveRecord::Base concerned_with :validation, :states, :activation end # app/models/user/validation.rb require 'digest/sha1' class User # Virtual attribute for the unencrypted password attr_accessor :password validates_presence_of :login, :email validates_presence_of :password, :if => :password_required? validates_presence_of :password_confirmation, :if => :password_required? validates_length_of :password, :within => 4..40, :if => :password_required? validates_confirmation_of :password, :if => :password_required? validates_length_of :login, :within => 3..40 validates_length_of :email, :within => 3..100 validates_uniqueness_of :login, :email, :scope => :site_id before_save :downcase_email_and_login before_save :encrypt_password before_create :set_first_user_as_admin ... end