Skip to content

Commit 7bc68c1

Browse files
authored
MONGOID-4935 Fix Errors::InvalidField gives the wrong method name in description (#5287)
* MONGOID-4935 Fix Errors::InvalidField gives the wrong method name in description * MONGOID-4935 fix invalid field spec * MONGOID-4935 fix message, add api private
1 parent ccfbedd commit 7bc68c1

File tree

5 files changed

+10
-6
lines changed

5 files changed

+10
-6
lines changed

lib/config/locales/en.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ en:
138138
resolution: "Valid expression operators are: %{valid_operators}.
139139
Ensure you are using one of these operators."
140140
invalid_field:
141-
message: "Defining a field named '%{name}' is not allowed."
141+
message: "Defining a field named '%{field}' is not allowed."
142142
summary: "Defining this field would override the method '%{name}',
143143
which would cause issues with expectations around the original
144144
method and cause extremely hard to debug issues. The original

lib/mongoid/errors/invalid_field.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@ class InvalidField < MongoidError
1212
# @example Create the error.
1313
# InvalidField.new(person, :crazy_method_name)
1414
#
15+
# @api private
16+
#
1517
# @param [ Class ] klass The document class.
18+
# @param [ Symbol ] field The field name.
1619
# @param [ Symbol ] name The method name.
17-
def initialize(klass, name)
20+
def initialize(klass, field, name)
1821
super(
1922
compose_message(
2023
"invalid_field",
2124
{
2225
name: name,
26+
field: field,
2327
origin: origin(klass, name),
2428
file: location(klass, name)[0],
2529
line: location(klass, name)[1]

lib/mongoid/fields/validators/macro.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def validate_relation(klass, name, options = {})
6666
def validate_field_name(klass, name)
6767
[name, "#{name}?".to_sym, "#{name}=".to_sym].each do |n|
6868
if Mongoid.destructive_fields.include?(n)
69-
raise Errors::InvalidField.new(klass, n)
69+
raise Errors::InvalidField.new(klass, name, n)
7070
end
7171
end
7272
end
@@ -88,7 +88,7 @@ def validate_field_name(klass, name)
8888
def validate_name_uniqueness(klass, name, options)
8989
if !options[:overwrite] && klass.fields.keys.include?(name.to_s)
9090
if Mongoid.duplicate_fields_exception
91-
raise Errors::InvalidField.new(klass, name)
91+
raise Errors::InvalidField.new(klass, name, name)
9292
else
9393
Mongoid.logger.warn("Overwriting existing field #{name} in class #{klass.name}.") if Mongoid.logger
9494
end

spec/mongoid/errors/invalid_field_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def crazy_method; self; end
1515
end
1616

1717
let(:error) do
18-
described_class.new(Person, :crazy_method)
18+
described_class.new(Person, :crazy_method, :crazy_method)
1919
end
2020

2121
it "contains the problem in the message" do

spec/mongoid/fields_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@
877877
it "raises an error" do
878878
expect {
879879
Person.field(meth)
880-
}.to raise_error(Mongoid::Errors::InvalidField)
880+
}.to raise_error(Mongoid::Errors::InvalidField, /Defining a field named '#{meth}' is not allowed/)
881881
end
882882
end
883883
end

0 commit comments

Comments
 (0)