提交 a98475c2 编写于 作者: Y yui-knk

Make `AR::SpawnMethods#merge!` to check an arg is a Proc

From Ruby ( 2.3.0dev trunk 52520), `Hash#to_proc` is defined
(https://github.com/ruby/ruby/commit/fbe967ec02cb65a7efa3fb8f3d747cf6f620dde1),
and many tests have been failed with
`ArgumentError: wrong number of arguments (given 0, expected 1)`.
Because we call `Hash#to_proc` with no args in `#merge!`.

This commit changes order of conditionals to not call `Hash#to_proc`.
上级 5388464a
......@@ -12,6 +12,7 @@ def spawn #:nodoc:
# Merges in the conditions from <tt>other</tt>, if <tt>other</tt> is an ActiveRecord::Relation.
# Returns an array representing the intersection of the resulting records with <tt>other</tt>, if <tt>other</tt> is an array.
#
# Post.where(published: true).joins(:comments).merge( Comment.where(spam: false) )
# # Performs a single join query with both where conditions.
#
......@@ -37,11 +38,12 @@ def merge(other)
end
def merge!(other) # :nodoc:
if !other.is_a?(Relation) && other.respond_to?(:to_proc)
if other.is_a?(Hash)
Relation::HashMerger.new(self, other).merge
elsif other.respond_to?(:to_proc)
instance_exec(&other)
else
klass = other.is_a?(Hash) ? Relation::HashMerger : Relation::Merger
klass.new(self, other).merge
Relation::Merger.new(self, other).merge
end
end
......
......@@ -24,6 +24,10 @@ def self.table_name
def self.sanitize_sql_for_order(sql)
sql
end
def self.arel_table
Post.arel_table
end
end
def test_construction
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册