aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_view/helpers/active_record_helper.rb24
-rw-r--r--actionpack/test/template/active_record_helper_test.rb19
3 files changed, 37 insertions, 8 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index e48b117bc7..d4cfc6edfa 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added options to tailor header tag, div id, and div class on ActiveRecordHelper#error_messages_for [josh]
+
* Added graceful handling of non-alphanumeric names and misplaced brackets in input parameters [bitsweat]
* Added a new container for cookies that makes them more intuative to use. The old methods of cookie and @cookies have been deprecated.
diff --git a/actionpack/lib/action_view/helpers/active_record_helper.rb b/actionpack/lib/action_view/helpers/active_record_helper.rb
index b02b807fe1..de18696992 100644
--- a/actionpack/lib/action_view/helpers/active_record_helper.rb
+++ b/actionpack/lib/action_view/helpers/active_record_helper.rb
@@ -76,14 +76,24 @@ module ActionView
end
end
- def error_messages_for(object_name)
- object = instance_eval("@#{object_name}")
+ # Returns a string with a div containing all the error messages for the object located as an instance variable by the name
+ # of <tt>object_name</tt>. This div can be tailored by the following options:
+ #
+ # ::header_tag: Used for the header of the error div (default: h2)
+ # ::id: The id of the error div (default: errorExplanation)
+ # ::class: The class of the error div (default: errorExplanation)
+ def error_messages_for(object_name, options={})
+ object = instance_eval "@#{object_name}"
unless object.errors.empty?
- "<div id=\"errorExplanation\">" +
- "<h2>#{object.errors.count} error#{"s" unless object.errors.count == 1} prohibited this #{object_name.gsub("_", " ")} from being saved</h2>" +
- "<p>There were problems with the following fields (marked in red below):</p>" +
- "<ul>#{object.errors.full_messages.collect { |msg| "<li>#{msg}</li>"}}</ul>" +
- "</div>"
+ content_tag("div",
+ content_tag(
+ options[:header_tag] || "h2",
+ "#{pluralize(object.errors.count, "error")} prohibited this #{object_name.gsub("_", " ")} from being saved"
+ ) +
+ content_tag("p", "There were problems with the following fields:") +
+ content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }),
+ "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
+ )
end
end
diff --git a/actionpack/test/template/active_record_helper_test.rb b/actionpack/test/template/active_record_helper_test.rb
index 4b32f4dd48..68344e1222 100644
--- a/actionpack/test/template/active_record_helper_test.rb
+++ b/actionpack/test/template/active_record_helper_test.rb
@@ -1,18 +1,30 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../../lib/action_view/helpers/date_helper'
require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_helper'
+require File.dirname(__FILE__) + '/../../lib/action_view/helpers/text_helper'
+require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper'
# require File.dirname(__FILE__) + '/../../lib/action_view/helpers/active_record_helper'
class ActiveRecordHelperTest < Test::Unit::TestCase
include ActionView::Helpers::FormHelper
include ActionView::Helpers::ActiveRecordHelper
+ include ActionView::Helpers::TextHelper
+ include ActionView::Helpers::TagHelper
Post = Struct.new("Post", :title, :author_name, :body, :secret, :written_on)
Column = Struct.new("Column", :type, :name, :human_name)
def setup
@post = Post.new
- def @post.errors() Class.new{ def on(field) field == "author_name" || field == "body" end }.new end
+ def @post.errors
+ Class.new {
+ def on(field) field == "author_name" || field == "body" end
+ def empty?() false end
+ def count() 1 end
+ def full_messages() [ "Author name can't be empty" ] end
+ }.new
+ end
+
def @post.new_record?() true end
def @post.column_for_attribute(attr_name)
@@ -73,4 +85,9 @@ class ActiveRecordHelperTest < Test::Unit::TestCase
form("post")
)
end
+
+ def test_error_for_block
+ assert_equal "<div class=\"errorExplanation\" id=\"errorExplanation\"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>", error_messages_for("post")
+ assert_equal "<div class=\"errorDeathByClass\" id=\"errorDeathById\"><h1>1 error prohibited this post from being saved</h1><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>", error_messages_for("post", :class => "errorDeathByClass", :id => "errorDeathById", :header_tag => "h1")
+ end
end \ No newline at end of file