ActiveSupport コア拡張のまとめ

1年くらい前にRubyの勉強のためにActiveSupportコア拡張からピックアップしてまとめたもの

参考
・https://railsguides.jp/active_support_core_extensions.html

# すべてのオブジェクトで使用できる拡張機能
blank?
nil、false、空白文字、空欄の配列とハッシュ、empty?メソッドに応答する場合、trueを返す。

present?
!blank?メソッドと同様

presence
present?がtrueの場合は自身のレシーバを返し、falseの場合はnilを返す。

duplicable?
オブジェクトがプログラム的に複製可能かどうかを問い合わせる
デフォルトでは、nil、false、true、シンボル、数値、クラス、モジュール、メソッドオブジェクトを除くすべてのオブジェクトがduplicable? #=> true

``` ruby
'foo'.duplicable? # => true
''.duplicable?    # => true
1.duplicable?		# => false
false.duplicable? # => false
```

deep_dup
オブジェクトのディープコピーを行う。
例えばdup(シャローコピー）の場合、配列中の文字列は複製後も同一オブジェクトのままだが、deep_dupの場合は配列中の文字列も異なるオブジェクトとなる。

try
nilでない場合にのみオブジェクトのメソッドを呼び出したい場合に用いる。
nomethodエラー起こさない。
try!はnomethodエラー起きる。「tru!」=「&.」ぼっち演算子

class_eval
ブロックをクラス定義やモジュール定義の中のコードであるように実行

acts_likes?
一部のクラスがその他のクラスと同様に振る舞うかどうかのチェックをする。
（感想：使い所がわからない。。。）

to_param
デフォルトはto_sメソッドを呼ぶ。
nil、true、falseの場合：自分自身を返す。
配列の場合：配列内の各要素に対して実行され、結果が"/"でjoinされる。
ActiveRecordの場合：idを返す

to_query
エスケープされていないkeyを受け取ると、そのキーをto_paramが返す値に対応させるクエリ文字列の一部を生成する。

with_options
連続した複数のメソッド呼び出しに対して共通して与えられるオプションを解釈するための手段を提供する。

instance_values
インスタンス変数をハッシュにして返す。

instance_variable_names
インスタンス変数を配列にして返す。

``` ruby
class C
  def initialize(x, y)
    @x, @y = x, y
  end
end
 
C.new(0, 1).instance_values # => {"x" => 0, "y" => 1}
C.new(0, 1).instance_variable_names # => ["@x", "@y"]
```

silence_warnings, enable_warnings
ブロックが継続する間、$VERBOSEの値を変更し、その後リセットする。
$VERBOSE：冗長メッセージフラグ(https://docs.ruby-lang.org/ja/search/query:$VERBOSE/)

suppress
例外の発生を止めることができる。
例外クラスを表す任意の数値を受け取る。
ブロック内で発生した場合、引数として渡された例外をブロックして無視する。

in?
あるオブジェクトが他のオブジェクトに含まれているかどうかをテストする。

# Moduleの拡張
alias_attribute
Modelのreader, writerm, predicate属性を持つ別名を作成する。

parent
名前がネストしたモジュールに対して実行でき、対応する定数を持つモジュールを返す。
モジュールが無名またはトップレベルの場合、parentはObjectを返す。

parent_name
名前がネストしたモジュールに対して実行でき、対応する定数を持つモジュールを返す。
モジュールが無名またはトップレベルの場合、parent_nameはnilを返す。

parents
レシーバに対してparentを呼び出し、Objectに到着するまでパスを遡る。
連鎖したモジュールは、階層の下から上の順に配列として返す。

# 定数
ActiveSupportでは、よりフルパスに近い(qualified)定数名を渡せるようにしてる。（比較：const_defined?、const_get、const_set）

local_constants
レシーバモジュールで定義された定数名をシンボルとして返す。

#Class

class_attribute
1つ以上の継承可能なクラスの属性を宣言する。
そのクラス属性は、その下のどの階層でも上書き可能。

subclasses
レシーバのサブクラスを返す

descendants
レシーバの下位にあるすべてのクラスを返す

# String
remove
該当パターンを削除した文字列を返す

squish
冒頭と末尾のホワイトスペースを除去し、連続したホワイトスペースも１つに減らす。

truncate
指定したlengthにまで長さを切り詰めたレシーバのコピーを返す。

pluralize
レシーバを「複数形」にしたものを返す

singularize
pluralizeの逆

# Numeric
Time
1.month + 2.hours のように時間の計算や宣言ができる

数値をさまざまな方法でフォーマットすることもできる。

# Integer
multiple_of?
レシーバの整数が引数の倍数かチェクする。

# BigDecimal
to_s (to_formatted_s)
浮動小数点記法を得る。

# Enumerable
sum
enumerableの要素を合計する

many?
1よりenumerableの要素数が大きいか判定
collection.size > 1の短縮形

exclude?
与えられたオブジェクトがそのコレクションに属して「いない」か判定する

# Array
append
Array#<<の別名

wrap
配列の中にある引数が配列 (または配列のようなもの) になっていない場合に、それらを配列の中にラップする。

in_groups_of
指定のサイズで配列を連続したグループに分割する。

in_groups
配列を指定の個数のグループに分割する。

split
指定のセパレータで配列を分割し、分割されたチャンクを返す。

# Hash
reverse_merge
キーが衝突した場合、引数のハッシュのキーがmergeでは優先される。

deep_merge
キーがレシーバと引数で重複している場合、引数の側の値が優先される。

except
引数で指定されたキーがあればレシーバのハッシュから取り除く

symbolize_keys
レシーバのハッシュキーをシンボルに変換したハッシュを返す

slice
指定したkeyをスライスして取り出す

compact
ハッシュからnil値を除外したものを返す

# Regexp
multiline?
正規表現に/mフラグが設定されているかどうかをチェックする。
このフラグが設定されていると、ドット (.) が改行にマッチし複数行を扱えるようになる。

# Range
include?
与えられたインスタンスの範囲内に値が収まっているかチェックする。

# Date
next_year, next_month などのように文章を書くように表現できる。

# File
atomic_write
書きかけの文章を誰にも読まれないようにファイルを保存することができる

# Marshal
loadに一定の自動読み込みサポートを追加する。