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:
|
||||
if other.is_a?(Hash)
|
||||
Relation::HashMerger.new(self, other).merge
|
||||
elsif other.is_a?(Relation)
|
||||
Relation::Merger.new(self, other).merge
|
||||
elsif other.respond_to?(:to_proc)
|
||||
instance_exec(&other)
|
||||
else
|
||||
Relation::Merger.new(self, other).merge
|
||||
raise ArgumentError, "#{other.inspect} is not an ActiveRecord::Relation"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -24,10 +24,6 @@ module ActiveRecord
|
|||
def self.sanitize_sql_for_order(sql)
|
||||
sql
|
||||
end
|
||||
|
||||
def self.arel_table
|
||||
Post.arel_table
|
||||
end
|
||||
end
|
||||
|
||||
def test_construction
|
||||
|
@ -239,6 +235,13 @@ module ActiveRecord
|
|||
assert_equal 3, relation.where(id: post.id).pluck(:id).size
|
||||
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
|
||||
post = Post.select(:title).first
|
||||
assert_equal false, post.respond_to?(:body), "post should not respond_to?(:body) since invoking it raises exception"
|
||||
|
|
Loading…
Reference in a new issue