mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Array#wrap should use #to_ary so association collections and named scopes are not re-wrapped
[#1935 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
parent
ff3fb6c5f3
commit
1a2a71333f
2 changed files with 17 additions and 2 deletions
|
@ -2,7 +2,8 @@ module ActiveSupport #:nodoc:
|
|||
module CoreExtensions #:nodoc:
|
||||
module Array #:nodoc:
|
||||
module Wrapper
|
||||
# Wraps the object in an Array unless it's an Array.
|
||||
# Wraps the object in an Array unless it's an Array. Converts the
|
||||
# object to an Array using #to_ary if it implements that.
|
||||
def wrap(object)
|
||||
case object
|
||||
when nil
|
||||
|
@ -10,7 +11,11 @@ module ActiveSupport #:nodoc:
|
|||
when self
|
||||
object
|
||||
else
|
||||
[object]
|
||||
if object.respond_to?(:to_ary)
|
||||
object.to_ary
|
||||
else
|
||||
[object]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -304,6 +304,12 @@ class ArrayExtRandomTests < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
class ArrayWrapperTests < Test::Unit::TestCase
|
||||
class FakeCollection
|
||||
def to_ary
|
||||
["foo", "bar"]
|
||||
end
|
||||
end
|
||||
|
||||
def test_array
|
||||
ary = %w(foo bar)
|
||||
assert_same ary, Array.wrap(ary)
|
||||
|
@ -325,4 +331,8 @@ class ArrayWrapperTests < Test::Unit::TestCase
|
|||
def test_string_with_newline
|
||||
assert_equal ["foo\nbar"], Array.wrap("foo\nbar")
|
||||
end
|
||||
|
||||
def test_object_with_to_ary
|
||||
assert_equal ["foo", "bar"], Array.wrap(FakeCollection.new)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue