thomashoddinott
Elixir in Action Book - ch04 - Updating an entry help (todo_crud.ex)
Brand new to Elixir and picked up Elixir in Action last week. I apologise if this isn’t the place to ask beginner questions — advice on where to in that case is most appreciated.
In 4.2 we go about building a To-do list to demonstrate CRUD in Elixir.
elixir-in-action/code_samples/ch04/todo_crud.ex
I’m going to initialise my todo list with a single entry:
$ iex todo_crud.ex
iex(1)> todo_list = TodoList.new() |> TodoList.add_entry(%{date: ~D[2018-12-19], title: "Dentist"})
%TodoList{
auto_id: 2,
entries: %{1 => %{date: ~D[2018-12-19], id: 1, title: "Dentist"}}
}
The code to update an entry is:
def update_entry(todo_list, entry_id, updater_fun) do
case Map.fetch(todo_list.entries, entry_id) do
:error ->
todo_list
{:ok, old_entry} ->
new_entry = updater_fun.(old_entry)
new_entries = Map.put(todo_list.entries, new_entry.id, new_entry)
%TodoList{todo_list | entries: new_entries}
end
end
Let’s say I want to update my appointment. It’s actually a Doctor’s appointment.
Could someone demonstrate via code snippet how one uses update_entry/3?
What is updater_fun doing here?
Many thanks
First Post!
vrcca
Welcome to the forum!
You use it like this:
TodoList.update_entry(todo_list, 1, fn old_entry -> Map.put(old_entry, title: "Doctor") end)
The updater_fun is the anonymous function fn old_entry -> ... end above. In the code you can see that it calls this anonymous function passing 1 argument: updater_fun.(old_entry), then it overwrites your todo list with the result of you anonymous function.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









