module UrlField def self.included(base) base.extend UrlFieldMethod end module UrlFieldMethod def url_field(field) before_save :clean_url_field class_eval do define_method(:clean_url_field) do self.send("#{field}=", send("cleaned_#{field}")) end private define_method("cleaned_#{field}") do return nil if send(field).nil? or send(field).blank? return "http://#{send(field)}" unless send(field).match(/https?:\/\/.*$/) send(field) end end end end end if Object.const_defined?("ActiveRecord") ActiveRecord::Base.send(:include, UrlField) end