def error_messages_for(obj, build_li = nil, html_class='error')
obj = self.instance_variable_get("@#{obj}") if obj.kind_of?(Symbol)
return "" unless obj.respond_to?(:errors) && ! obj.errors.empty?
if obj.errors.respond_to?(:each)
build_li ||= lambda{|err| "<li>#{err.join(' ')}</li>"}
error_collection = obj.errors
else
build_li ||= lambda{|msg| "<li>#{msg}</li>"}
error_collection = obj.errors.full_messages
end
error_count = error_collection.size
header_message = if block_given?
yield(obj.errors)
else
error_plurality = (error_count == 1 ? 'problem' : 'problems')
"<h2>Form submittal failed because of #{error_count} #{error_plurality}</h2>"
end
markup = %Q{
<div class='#{html_class}'>
#{header_message}
<ul>
}
error_collection.each {|error, message| markup << build_li.call([error, message])}
markup << %Q{
</ul>
</div>
}
end