sonic-pi

https://github.com/sonic-pi-net/sonic-pi

C++

Code. Music. Live.

Array.wrap

Wraps its argument in an array unless it is already an array (or array-like).

Specifically:

* If the argument is +nil+ an empty list is returned.
* Otherwise, if the argument responds to +to_ary+ it 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 <tt>Kernel#Array</tt>, but there are some differences:

* If the argument responds to +to_ary+ the method is invoked. <tt>Kernel#Array</tt>
  moves on to try +to_a+ if the returned value is +nil+, but <tt>Array.wrap</tt> returns
  +nil+ right away.
* If the returned value from +to_ary+ is neither +nil+ nor an +Array+ object, <tt>Kernel#Array</tt>
  raises an exception, while <tt>Array.wrap</tt> does not, it just returns the value.
* It does not call +to_a+ on the argument, but returns an empty array if argument is +nil+.

The second 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 <tt>[]</tt> for +nil+, but calls to <tt>Array(object)</tt> otherwise.

The differences with <tt>Kernel#Array</tt> explained above
apply to the rest of <tt>object</tt>s.

Source | Google | Stack overflow

Edit

git clone [email protected]:sonic-pi-net/sonic-pi.git

cd sonic-pi

open app/server/ruby/vendor/activesupport-7.0.6/lib/active_support/core_ext/array/wrap.rb

Contribute

# Make a new branch

git checkout -b -your-name--update-docs-Array-wrap-for-pr


# Commit to git

git add app/server/ruby/vendor/activesupport-7.0.6/lib/active_support/core_ext/array/wrap.rbgit commit -m "better docs for Array.wrap"


# Open pull request

gem install hub # on a mac you can `brew install hub`

hub fork

git push <your name> -your-name--update-docs-Array-wrap-for-pr

hub pull-request


# Celebrate!