u16suzuの blog

日々学んだことのメモブログです。

ActiveSupportの Array のメソッドを一通り眺めてみる

ActiveSupport の Array の拡張メソッドを一通り眺めてみた

  • extract_options!

引数のオプション部分だけをかえしてくれる. メソッドを定義するときに便利

def options(*args)
  args.extract_options!
end

options(1, 2)        # => {}
options(1, 2, a: :b) # => {:a=>:b}
  • to_param

配列からurlを生成できる。join( '/' ) と同じ。

This is used by url_for in Action Pack. Action Packの url_for で使われている。

[36] pry(main)> [1,2,3,4,5].to_param
=> "1/2/3/4/5"
# File activesupport/lib/active_support/core_ext/object/to_query.rb, line 40
def to_param
  collect { |e| e.to_param }.join '/'
end

再起的にto_paramが呼ばれるようになっている。 nil#to_paramは active_supportの Nil classに定義されていた

irb(main):022:0* [[1,2,3],1,2,3].to_param
=> "1/2/3/1/2/3"
  • to_query
[21] pry(main)> [1,2,3].to_query( :hoge )
=> "hoge%5B%5D=1&hoge%5B%5D=2&hoge%5B%5D=3"
[22] pry(main)> URI.unescape( _ )
=> "hoge[]=1&hoge[]=2&hoge[]=3"
  • code
# File activesupport/lib/active_support/core_ext/object/to_query.rb, line 48
def to_query(key)
  prefix = "#{key}[]"

  if empty?
    nil.to_query(prefix)
  else
    collect { |value| value.to_query(prefix) }.join '&'
  end
end

nil#to_paramはわかったけど、 nil#to_query がどこで定義されているのかわからない。

  • to_sentence

こんなメソッドあるんだ...

[29] pry(main)> %i( dog cat rat ).to_sentence
=> "dog, cat, and rat"
  • split

指定した index でarrayを分割する. 指定されたindexは含まれない.

p [1,2,3].split(1) # =>[[], [2, 3]]
p [1,2,3].split(2) # =>[[1], [3]]
p [1,2,3].split(3) # =>[[1, 2], []]
p [1,2,3].split(4) # =>[[1, 2, 3]]
  • in_groups

指定した数のグループ数に分ける。rubyのeach_sliceとは異なる。

  • in_groups_of

指定した数の要素を含むグループに分ける。rubyのeach_sliceとほぼほぼ同じ

よくわからなかったメソッドたち

  • to_default_s
  • to_formatted_s, to_s