Skip to content

Commit

Permalink
Use all possible i18n error messages for ensure_length_of_matcher.
Browse files Browse the repository at this point in the history
  • Loading branch information
agibralter authored and Gabe Berke-Williams committed Apr 20, 2012
1 parent 63b679c commit 0a8e652
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 6 deletions.
4 changes: 4 additions & 0 deletions lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb
Expand Up @@ -96,11 +96,15 @@ def matches?(subject)
def translate_messages!
if Symbol === @short_message
@short_message = default_error_message(@short_message,
:model_name => @subject.class.to_s.underscore,
:attribute => @attribute,
:count => @minimum)
end

if Symbol === @long_message
@long_message = default_error_message(@long_message,
:model_name => @subject.class.to_s.underscore,
:attribute => @attribute,
:count => @maximum)
end
end
Expand Down
41 changes: 35 additions & 6 deletions spec/shoulda/active_model/helpers_spec.rb
Expand Up @@ -26,19 +26,23 @@ def store_translations(options = {:without => []})
}

unless options[:without].include?(:model_attribute)
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:blank] = 'Don’t you do that to me!'
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:blank] = "Don't you do that to me!"
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:wrong_length] = "Don't you do that to me!"
end

unless options[:without].include?(:model)
translations[:activerecord][:errors][:models][:example][:blank] = 'Give it one more try!'
translations[:activerecord][:errors][:models][:example][:wrong_length] = 'Give it one more try!'
end

unless options[:without].include?(:message)
translations[:activerecord][:errors][:messages][:blank] = 'Oh no!'
translations[:activerecord][:errors][:messages][:wrong_length] = 'Oh no!'
end

unless options[:without].include?(:attribute)
translations[:errors][:attributes][:attr][:blank] = 'Seriously?'
translations[:errors][:attributes][:attr][:wrong_length] = 'Seriously?'
end

I18n.backend.store_translations(:en, translations)
Expand All @@ -51,47 +55,72 @@ def store_translations(options = {:without => []})
before do
define_model :example, :attr => :string do
validates_presence_of :attr
validates_length_of :attr, :is => 40, :allow_blank => true
end
@model = Example.new
end

after { I18n.backend.reload! }

context "if the translation for the model attribute’s error exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations
@model.should validate_presence_of(:attr)
end

it "provides the right error message for validates_length_of" do
store_translations
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end

context "if no translation for the model attribute’s error exists" do
context "and the translation for the model’s error exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => :model_attribute)
@model.should validate_presence_of(:attr)
end

it "provides the right error message for validates_length_of" do
store_translations(:without => :model_attribute)
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end

context "and no translation for the model’s error exists" do
context "and the translation for the message exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => [:model_attribute, :model])
@model.should validate_presence_of(:attr)
end

it "provides the right error message for validates_length_of" do
store_translations(:without => [:model_attribute, :model])
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end

context "and no translation for the message exists" do
context "and the translation for the attribute exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => [:model_attribute, :model, :message])
@model.should validate_presence_of(:attr)
end

it "provides the right error message for validates_length_of" do
store_translations(:without => [:model_attribute, :model, :message])
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end

context "and no translation for the attribute exists" do
it "provides the general error message" do
it "provides the general error message for validate_presence_of" do
@model.should validate_presence_of(:attr)
end

it "provides the general error message for validates_length_of" do
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
end
end
Expand Down

0 comments on commit 0a8e652

Please sign in to comment.