Last active
October 25, 2015 02:23
-
-
Save bbhoss/448ff498de7021f37b9c to your computer and use it in GitHub Desktop.
Revisions
-
bbhoss revised this gist
Oct 25, 2015 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -32,7 +32,7 @@ defmodule TicketBuyer do end defp fetch_price(site, ticket_id) do # Fetch URL or otherwise asyncronously request data here TicketClient.request_price(site, ticket_id) end end -
bbhoss revised this gist
Oct 25, 2015 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,7 +1,6 @@ defmodule TicketBuyer do use GenServer @ticket_sites [:ticketscalper, :feemaster, :concertoverhead] def start_link do GenServer.start_link __MODULE__, [] -
bbhoss revised this gist
Oct 25, 2015 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -21,7 +21,7 @@ defmodule TicketBuyer do {:noreply, new_state} end def handle_info({:ticket_client_response, site, ticket_id, price}, state) do new_ticket_state = %{Map.get(state, ticket_id) | responses: [price | ticket_state.responses} if length(new_ticket_state.responses) == length(@ticket_sites) do average_price = Enum.sum(new_ticket_state.responses) / Enum.count(new_ticket_state.responses) -
bbhoss created this gist
Oct 25, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,39 @@ defmodule TicketBuyer do use GenServer @ticket_sites [:ticketscalper, :feemaster, :concertoverhead] @ticket_sites_number length(@ticket_sites) def start_link do GenServer.start_link __MODULE__, [] end def init(_args) do {:ok, %{}} end def fetch_average_price(server, ticket_id) do GenServer.call(server, {:fetch_ticket_prices, ticket_id} end def handle_call({:fetch_average_price, ticket_id}, from, state) do for site <- @ticket_sites, do: fetch_price(site, ticket_id) new_state = Map.put(state, ticket_id, %{from: from, responses: []}) {:noreply, new_state} end def handle_info({:http_client_response, site, ticket_id, price}, state) do new_ticket_state = %{Map.get(state, ticket_id) | responses: [price | ticket_state.responses} if length(new_ticket_state.responses) == length(@ticket_sites) do average_price = Enum.sum(new_ticket_state.responses) / Enum.count(new_ticket_state.responses) GenServer.reply(new_ticket_state.from, {:ok, average_price}) {:noreply, Map.drop(state, [ticket_id])} else {:noreply, Map.put(state, ticket_id, new_ticket_state)} end end defp fetch_price(site, ticket_id) do # Build URL or otherwise asyncronously request data here TicketClient.request_price(site, ticket_id) end end