Skip to content

Latest commit

 

History

History
51 lines (32 loc) · 1.68 KB

README.md

File metadata and controls

51 lines (32 loc) · 1.68 KB

RegistrySample

Example application using the new Registry module in Elixir 1.4

See this blog post for more context.

The Basics

Clone the Repo

git clone [email protected]:amokan/registry_sample.git

Run the sample in IEX

cd registry_sample
iex -S mix

Scenario

From the blog post:

Imagine we have a scenario where we are selling widgets to customers. Our boss wants us to build a realtime UI that shows every account that has placed an order in the current day along with some basic info about each account. If an account doesn’t place another order within 24 hours, it should fall off the UI

RegistrySample.AccountSupervisor

The RegistrySample.AccountSupervisor is a :simple_one_for_one supervisor that gives us a few helpful functions for creating new RegistrySample.Account processes and indicating which processes are already running.

Let's create an account process for account_id # 2 and account_id # 10.

iex> RegistrySample.AccountSupervisor.find_or_create_process(2)
{:ok, 2}

iex> RegistrySample.AccountSupervisor.find_or_create_process(10)
{:ok, 2}

iex> RegistrySample.AccountSupervisor.get_all_account_widgets_ordered
[%{account_id: 2, widgets_sold: 1}, %{account_id: 10, widgets_sold: 1}]

Now we can say that account_id # 10 ordered another widget, by just passing the account_id

iex> RegistrySample.Account.order_widget(10)
:ok

iex> RegistrySample.AccountSupervisor.get_all_account_widgets_ordered
[%{account_id: 2, widgets_sold: 1}, %{account_id: 10, widgets_sold: 2}]