From a64b8695c8c29d390693e86b8d7497e4579936a3 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 22 Feb 2009 14:46:32 +0000 Subject: [PATCH] Patch ActiveRecord::Errors#full_messages so that it contains custom values error messages. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2518 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- config/initializers/10-patches.rb | 30 ++++++++++++++++++++++++++++++ test/unit/issue_test.rb | 13 +++++++++++++ 2 files changed, 43 insertions(+) diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb index 5d19a6fc0..f4ae06cd6 100644 --- a/config/initializers/10-patches.rb +++ b/config/initializers/10-patches.rb @@ -12,6 +12,36 @@ module ActiveRecord end end +module ActiveRecord + class Errors + def full_messages(options = {}) + full_messages = [] + + @errors.each_key do |attr| + @errors[attr].each do |message| + next unless message + + if attr == "base" + full_messages << message + elsif attr == "custom_values" + # Replace the generic "custom values is invalid" + # with the errors on custom values + @base.custom_values.each do |value| + value.errors.each do |attr, msg| + full_messages << value.custom_field.name + ' ' + msg + end + end + else + attr_name = @base.class.human_attribute_name(attr) + full_messages << attr_name + ' ' + message + end + end + end + full_messages + end + end +end + module ActionView module Helpers module DateHelper diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 7013d2c0d..365316034 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -63,6 +63,19 @@ class IssueTest < Test::Unit::TestCase assert_equal 'PostgreSQL', issue.custom_value_for(field).value end + def test_errors_full_messages_should_include_custom_fields_errors + field = IssueCustomField.find_by_name('Database') + + issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'test_create', :description => 'IssueTest#test_create_with_required_custom_field') + assert issue.available_custom_fields.include?(field) + # Invalid value + issue.custom_field_values = { field.id => 'SQLServer' } + + assert !issue.valid? + assert_equal 1, issue.errors.full_messages.size + assert_equal "Database #{I18n.translate('activerecord.errors.messages.inclusion')}", issue.errors.full_messages.first + end + def test_update_issue_with_required_custom_field field = IssueCustomField.find_by_name('Database') field.update_attribute(:is_required, true)