Skip to content

Commit 56ba96e

Browse files
author
Bernard Pietraga
committed
Add relase 0.0.3
1 parent 1b5b2b9 commit 56ba96e

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed
Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,52 @@
11
defmodule Sequence.Server do
2+
require Logger
23
use GenServer
34

4-
@vsn "0"
5+
@vsn "1"
6+
defmodule State do
7+
defstruct current_number: 0, stash_pid: nil, delta: 1
8+
end
9+
10+
def code_change("0", old_state = {current_number, stash_pid}, _extra) do
11+
new_state = %State{current_number: current_number,
12+
stash_pid: stash_pid,
13+
delta: 1
14+
}
15+
Logger.info("Changing code from 0 to 1")
16+
Logger.info(inspect(old_state))
17+
Logger.info(inspect(new_state))
18+
{:ok, new_state}
19+
end
520

621
# API
722
def start_link(stash_pid), do:
823
GenServer.start_link(__MODULE__, stash_pid, name: __MODULE__)
924

1025
def next_number do
11-
with number = GenServer.call(__MODULE__, :next_number),
12-
do: "The next number is #{number}"
26+
with number = GenServer.call(__MODULE__, :next_number), do:
27+
"The next number is #{number}"
1328
end
1429

1530
def increment_number(delta), do:
1631
GenServer.cast __MODULE__, {:increment_number, delta}
1732

1833
# GenServer implementation
1934
def init(stash_pid) do
20-
current_number = Sequence.Stash.get_value stash_pid
21-
{:ok, {current_number, stash_pid}}
35+
current_number = Sequence.Stash.get_value(stash_pid)
36+
{:ok, %State{current_number: current_number, stash_pid: stash_pid}}
2237
end
2338

24-
def handle_call(:next_number, _from, {current_number, stash_pid}), do:
25-
{:reply, current_number, {current_number+1, stash_pid}}
26-
def handle_cast({:increment_number, delta}, {current_number, stash_pid}), do:
27-
{:noreply, {current_number+delta, stash_pid}}
39+
def handle_call(:next_number, _from, state) do
40+
{:reply,
41+
state.current_number,
42+
%{state | current_number: state.current_number + state.delta}}
43+
end
44+
45+
def handle_cast({:increment_number, delta}, state) do
46+
{:noreply,
47+
%{state | current_number: state.current_number + delta, delta: delta}}
48+
end
2849

29-
def terminate(_reason, {current_number, stash_pid}), do:
30-
Sequence.Stash.save_value(stash_pid, current_number)
50+
def terminate(_reason, state), do:
51+
Sequence.Stash.save_value(state.stash_pid, state.current_number)
3152
end

chapter_18/sequence/mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Sequence.Mixfile do
33

44
def project do
55
[app: :sequence,
6-
version: "0.0.2",
6+
version: "0.0.3",
77
elixir: "~> 1.4",
88
build_embedded: Mix.env == :prod,
99
start_permanent: Mix.env == :prod,

0 commit comments

Comments
 (0)