Help us understand the problem. What is going on with this article?

ActiveHash::Enumと似た機能を持つ、Elixir用の区分値管理パッケージを作ってみました。

More than 3 years have passed since last update.

Railsでの区分値管理においては、下記の記事で説明されている通り、ActiveHash::Enumが非常に有用です。

ActiveHashを使ってRailsで区分値を扱う方法

このgemを使用すると、DBに保存する区分値の管理や、ビューでプルダウンリストを表示する際に使用するコレクションの生成等が一元管理出来るので重宝していたのですが、残念ながらElixirには同様な機能を持つパッケージが(私の探した限りでは)存在しませんでした。

ということで、ActiveHash::Enumと似た機能を持つ、Elixir用の区分値管理パッケージを作成してみました。

ex_enum

使用方法

使用方法を説明させて頂きます。READMEにも記載してありますが、まずは下記のようにモジュールを定義してみてください。

defmodule Status do
  use ExEnum
  row id: 0, type: :invalid, text: "this is invalid"
  row id: 1, type: :valid, text: "this is valid"
  accessor :type
end

このように定義した区分値を、下記のように取得することが出来ます。

Status.all
# => [%{id: 0, text: "this is invalid", type: :invalid},
# %{id: 1, text: "this is valid", type: :valid}]

Status.get(0)
# => %{id: 0, text: "this is invalid", type: :invalid}

Status.get_by(text: "this is valid", type: :valid)
# => %{id: 0, text: "this is valid", type: :valid}

Status.invalid
# => %{id: 0, text: "this is invalid", type: :invalid}

status = Status.valid
status.id
# => 1
status.text
# => "this is valid"
status.type
# => :valid

Status.get!(-1)
# => ** (RuntimeError) no result

Status.get_by!(type: :wrong)
# => ** (RuntimeError) no result

Phoenixのviewヘルパーとは下記のようにして連携可能です。

# index.html.eex
<td><%= Status.get(user.status).text %></td>

# form.html.eex
<%= select f, :status, Status.select([:text, :id]), class: "form-control" %>

# show.html.eex
<%= Status.get(@user.status).text %>

(2016/03/22追記)

Gettextに対応しました。READMEをご参照ください。

Elixirのパッケージを作ってみた感想

分かっていたことではありますが、quoteとunquoteの動作を把握するのは中々大変です。

Elixirのメタプログラミングをしっかり理解するには、最低限Metaprogramming Elixirくらいは読破しておかないといけないかもですね。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away