Lines of Code Code Status Dependency Status Build Status Coverage Status Downloads

Looker

Hash based enumerated types (ENUMS)

Quick Start

gem install looker
Looker.add roles: {
    :admin  => 1,
    :reader => 2,
    :writer => 3
  }

# The name (first Hash key) & value is converted
# to an upcase named frozen constant on the Looker module

Looker::ROLES[:admin]  # => 1
Looker::ROLES[1]       # => :admin

Looker::ROLES[:reader] # => 2
Looker::ROLES[2]       # => :reader

Looker::ROLES["writer"] # => 3
Looker::ROLES[3]       # => :writer

NOTE: You can perform lookups using both the key & value.

Multiple Enumerated Types

It's possible to add multiple enumerated types with a single call to Looker#add.

Looker.add(
  roles: {
    :admin  => 1,
    :reader => 2,
    :writer => 3
  },

  colors: {
    :red    => "ff0000",
    :yellow => "ffff00",
    :blue   => "0000ff"
  }
)

Looker::ROLES[:admin]    # => 1
Looker::ROLES[3]         # => :writer

Looker::COLORS[:red]     # => "ff0000"
Looker::COLORS["ffff00"] # => :yellow

Adding Enumerated Types from YAML

It can be useful to manage enumerated type definitions with a YAML file.

# /path/to/enums.yml
roles:
  admin: 1
  reader: 2
  writer: 3

colors:
  red: ff0000
  yellow: ffff00
  blue: 0000ff
Looker.add YAML.load(File.read("/path/to/enums.yml")

Looker::ROLES["reader"]  # => 2
Looker::ROLES[1]         # => "admin"

Looker::COLORS["yellow"] # => "ffff00"
Looker::COLORS["0000ff"] # => "blue"

ActiveRecord enums

You may find it useful to reuse Looker defined enumerated types as ActiveRecord enums.

Fortunately this is pretty simple— just use the to_h method on the Looker constant.

Looker.add roles: {
  :admin  => 1,
  :reader => 2,
  :writer => 3
}

class User < ActiveRecord::Base
  enum roles: Looker::ROLES.to_h
end