Ruby - Refinementsとは
Refinementsとは、Rubyにおけるオープンクラスのスコープを特定の範囲に限定するもの。
具体的に見ていくと、下記のようなオープンクラスを用いた場合、その影響範囲はアプリケーション全体となり、予期せぬところでコードを破壊するなどの危険性があった。
class String def to_alphanumeric gsub(/[^\w\s]/, '') end end
そのため、Refinementsによりオープンクラスの効果範囲を特定のモジュールだけに限定できるようにした。下記のように、refine クラス名 do ... end の形式で宣言し、モジュール内でusingすることでオープンクラスの効果を限定することができる。
module StringExtentions refine String do def to_alphanumeric gsub(/[^\w\s]/, '') end end end module SomeModule using StringExtentions "#3, the *Magic, Number*?".to_alphanumeric # => "3 the Magic Number" end