class method
self.wrap
Ruby on Rails 7.0.10
Since v3.0.20Signature
self.wrap(object)
Wraps its argument in an array unless it is already an array (or array-like).
Specifically:
-
If the argument is
nilan empty array is returned. -
Otherwise, if the argument responds to
to_aryit is invoked, and its result returned. -
Otherwise, returns an array with the argument as its single element.
Array.wrap(nil) # => [] Array.wrap([1, 2, 3]) # => [1, 2, 3] Array.wrap(0) # => [0]
This method is similar in purpose to Kernel#Array, but there are some differences:
-
If the argument responds to
to_arythe method is invoked.Kernel#Arraymoves on to tryto_aif the returned value isnil, butArray.wrapreturns an array with the argument as its single element right away. -
If the returned value from
to_aryis neithernilnor anArrayobject,Kernel#Arrayraises an exception, whileArray.wrapdoes not, it just returns the value. -
It does not call
to_aon the argument, if the argument does not respond toto_aryit returns an array with the argument as its single element.
The last point is easily explained with some enumerables:
Array(foo: :bar) # => [[:foo, :bar]] Array.wrap(foo: :bar) # => [{:foo=>:bar}]
There’s also a related idiom that uses the splat operator:
[*object]
which returns [] for nil, but calls to Array(object) otherwise.
The differences with Kernel#Array explained above apply to the rest of objects.
Parameters
-
objectreq
Source
# File activesupport/lib/active_support/core_ext/array/wrap.rb, line 39
def self.wrap(object)
if object.nil?
[]
elsif object.respond_to?(:to_ary)
object.to_ary || [object]
else
[object]
end
end
Defined in activesupport/lib/active_support/core_ext/array/wrap.rb line 39
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in Array