mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Raise ArgumentError when passing a truthy value to merge
In b71e08f
we started raising when nil or false was passed to merge to
fix #12264, however we should also do this for truthy values that are
invalid like true.
This commit is contained in:
parent
35ca78a07c
commit
5d1d5f2840
2 changed files with 10 additions and 5 deletions
|
@ -40,10 +40,12 @@ module ActiveRecord
|
||||||
def merge!(other) # :nodoc:
|
def merge!(other) # :nodoc:
|
||||||
if other.is_a?(Hash)
|
if other.is_a?(Hash)
|
||||||
Relation::HashMerger.new(self, other).merge
|
Relation::HashMerger.new(self, other).merge
|
||||||
|
elsif other.is_a?(Relation)
|
||||||
|
Relation::Merger.new(self, other).merge
|
||||||
elsif other.respond_to?(:to_proc)
|
elsif other.respond_to?(:to_proc)
|
||||||
instance_exec(&other)
|
instance_exec(&other)
|
||||||
else
|
else
|
||||||
Relation::Merger.new(self, other).merge
|
raise ArgumentError, "#{other.inspect} is not an ActiveRecord::Relation"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,6 @@ module ActiveRecord
|
||||||
def self.sanitize_sql_for_order(sql)
|
def self.sanitize_sql_for_order(sql)
|
||||||
sql
|
sql
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.arel_table
|
|
||||||
Post.arel_table
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_construction
|
def test_construction
|
||||||
|
@ -239,6 +235,13 @@ module ActiveRecord
|
||||||
assert_equal 3, relation.where(id: post.id).pluck(:id).size
|
assert_equal 3, relation.where(id: post.id).pluck(:id).size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_merge_raises_with_invalid_argument
|
||||||
|
assert_raises ArgumentError do
|
||||||
|
relation = Relation.new(FakeKlass, :b, nil)
|
||||||
|
relation.merge(true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_respond_to_for_non_selected_element
|
def test_respond_to_for_non_selected_element
|
||||||
post = Post.select(:title).first
|
post = Post.select(:title).first
|
||||||
assert_equal false, post.respond_to?(:body), "post should not respond_to?(:body) since invoking it raises exception"
|
assert_equal false, post.respond_to?(:body), "post should not respond_to?(:body) since invoking it raises exception"
|
||||||
|
|
Loading…
Reference in a new issue