RubyでEnumを扱う方法

RubyでEnumを扱う方法

Rubyには標準でEnumのサポートはありませんが、Enumを模倣する方法はいくつかあります。
以下にその一例を示します。

class Status
  STATUS_PENDING = 1
  STATUS_APPROVED = 2
  STATUS_REJECTED = 3

  def self.all
    {
      pending: STATUS_PENDING,
      approved: STATUS_APPROVED,
      rejected: STATUS_REJECTED
    }
  end

  def self.for(key)
    all[key.to_sym]
  end
end

# 使用例
puts Status.for(:pending)   # 出力: 1
puts Status.for(:approved)  # 出力: 2

このコードでは、Statusクラスに定数を定義し、self.allメソッドでキーと値のハッシュを返すことでEnumのような振る舞いを実現しています。
self.forメソッドを使って、キーに対応する値を取得できます。