Packages

A wrapper around Ngrok providing a secure tunnel to localhost for demoing your Elixir/Phoenix web application or testing webhook integrations.

Current section

8 Versions

Jump to

Compare versions

6 files changed
+32 additions
-20 deletions
  @@ -63,5 +63,5 @@ The URL will change every time Ngrok starts, but you can retrieve the URL
63 63 by running the following:
64 64
65 65 ```elixir
66 - Ngrok.Settings.get("public_url") # => http://(.*).ngrok.io/
66 + Ngrok.public_url # => http://(.*).ngrok.io/
67 67 ```
  @@ -15,9 +15,9 @@
15 15 [[{<<"app">>,<<"httpoison">>},
16 16 {<<"name">>,<<"httpoison">>},
17 17 {<<"optional">>,false},
18 - {<<"requirement">>,<<"~> 0.9">>}],
18 + {<<"requirement">>,<<"~> 0.10">>}],
19 19 [{<<"app">>,<<"poison">>},
20 20 {<<"name">>,<<"poison">>},
21 21 {<<"optional">>,false},
22 22 {<<"requirement">>,<<"~> 2.0">>}]]}.
23 - {<<"version">>,<<"0.2.1">>}.
23 + {<<"version">>,<<"0.3.0">>}.
  @@ -7,8 +7,8 @@ defmodule Ngrok.Api do
7 7 @type successful_parse :: {:ok, map}
8 8 @type successful_get :: {:ok, String.t}
9 9
10 - @spec first_tunnel_settings() :: error | successful_parse
11 - def first_tunnel_settings do
10 + @spec tunnel_settings() :: error | successful_parse
11 + def tunnel_settings do
12 12 with api_url = Application.get_env(:ex_ngrok, :api_url),
13 13 {:ok, body} <- get(api_url),
14 14 {:ok, parsed} <- parse(body) do
  @@ -17,4 +17,16 @@ defmodule Ngrok do
17 17 opts = [strategy: :rest_for_one, name: Ngrok.Supervisor]
18 18 Supervisor.start_link(children, opts)
19 19 end
20 +
21 + @doc """
22 + Retrieves the public URL of the Ngrok tunnel
23 +
24 + ## Example
25 +
26 + Ngrok.public_url # => http://(.*).ngrok.io/
27 + """
28 + @spec public_url :: String.t
29 + def public_url do
30 + Ngrok.Settings.get("public_url")
31 + end
20 32 end
  @@ -6,7 +6,7 @@ defmodule Ngrok.Settings do
6 6 require Logger
7 7
8 8 def start_link do
9 - Agent.start_link(fn -> announce_settings end, name: __MODULE__)
9 + Agent.start_link(fn -> fetch_and_announce_settings end, name: __MODULE__)
10 10 end
11 11
12 12 @doc """
  @@ -25,28 +25,28 @@ defmodule Ngrok.Settings do
25 25 Agent.get(__MODULE__, &Map.get(&1, field_name))
26 26 end
27 27
28 - @spec announce_settings :: map
29 - defp announce_settings do
30 - settings = first_tunnel_settings
31 - announce(settings)
32 - settings
28 + @spec fetch_and_announce_settings :: map
29 + defp fetch_and_announce_settings do
30 + tunnel_settings
31 + |> announce
33 32 end
34 33
35 - @spec first_tunnel_settings :: map
36 - defp first_tunnel_settings(), do: first_tunnel_settings(0, "")
37 - defp first_tunnel_settings(6, error_message), do: raise "Unable to retrieve setting from Ngrok: #{error_message}"
38 - defp first_tunnel_settings(total_attempts, _) do
34 + @spec tunnel_settings :: map
35 + defp tunnel_settings(), do: tunnel_settings(0, "")
36 + defp tunnel_settings(6, error_message), do: raise "Unable to retrieve setting from Ngrok: #{error_message}"
37 + defp tunnel_settings(total_attempts, _) do
39 38 :timer.sleep(total_attempts * 100)
40 - case Ngrok.Api.first_tunnel_settings do
39 + case Ngrok.Api.tunnel_settings do
41 40 {:ok, settings} ->
42 41 settings
43 42 {:error, message} ->
44 - first_tunnel_settings(total_attempts + 1, message)
43 + tunnel_settings(total_attempts + 1, message)
45 44 end
46 45 end
47 46
48 - @spec announce(map) :: :ok
47 + @spec announce(map) :: map
49 48 defp announce(settings) do
50 49 Logger.info "ex_ngrok: Ngrok tunnel available at #{settings["public_url"]}"
50 + settings
51 51 end
52 52 end
Loading more files…