Skip to content

Instantly share code, notes, and snippets.

@aisuii
Created April 26, 2012 16:33
Show Gist options
  • Save aisuii/2500824 to your computer and use it in GitHub Desktop.
Save aisuii/2500824 to your computer and use it in GitHub Desktop.
enum な attr がほしい。

enum_attr

シンプルな enum っぽいもの。selectable_attr をシンプルにしたもの。

定義

class User
  include EnumAttr::Base

  attr_accessor :status

  enum_attr_for :status do
    enum 1, :active
    enum 2, :suspend
    enum 3, :deleted
  end

  def initialize(status)
    @status = status
  end
end

利用

クラスメソッド

User.status_ids
#=> [1, 2, 3]

User.status_keys
#=> [:active, :suspend, :deleted]

User.status_enums
#=> [ #<EnumAttr::Enum:0x007fcf1a857618 @id=1, @key=:active>, #<EnumAttr::Enum:0x007fcf1b126988 @id=2, @key=:suspend>, #<EnumAttr::Enum:0x007fcf1b11ff48 @id=3, @key=:deleted> ]

インスタンスメソッド

user = User.new(1)
user.status_key
#=> :active

user.status_id
#=> 1

user.status_enum
#=> enum

あったらいいかもしれないもの

キーによる定数参照

User.status_id_by_key :active
#=> 1

User.status_enum_by_key :active
#=> #<EnumAttr::Enum:0x007fcf1a857618 @id=1, @key=:active>

クエリメソッド

user = User.new(1)
user.status_active?
#=> true

user.status_suspend?
#=> false

user.status_deleted?
#=> false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment