Skip to content

Commit 59831df

Browse files
committed
Cleaning code with the help of Credo
Credo helps us identify code style issues. Missing spaces or extra parens and all that. We're read the advice and we've done our best to apply it. Our goal was to execute a partial refactoring of the code but this shouldn't have sipled through in the current implementation.
1 parent d6bff40 commit 59831df

File tree

5 files changed

+108
-80
lines changed

5 files changed

+108
-80
lines changed

lib/cache/cache.ex

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,138 @@
1-
defmodule UsePlugProxy.Cache do
1+
defmodule Cache.Registry do
2+
@moduledoc """
3+
Maintains all cached requests and can clean them if needed.
4+
"""
5+
26
use GenServer
37

4-
def find_cache( { _method, _full_path, _get_params, _allowed_groups } = key ) do
5-
case GenServer.call( __MODULE__, { :find_cache, key } ) do
6-
{ :ok, response } -> response
7-
{ :not_found } -> nil
8+
@type header :: {String.t(), String.t(), any, allowed_groups}
9+
@type cache_key :: any
10+
@doc "Allowed groups is currently treated as a string, if none were supplied, we can use nil instead."
11+
@type allowed_groups :: String.t() | nil
12+
13+
def find_cache({_method, _full_path, _get_params, _allowed_groups} = key) do
14+
case GenServer.call(__MODULE__, {:find_cache, key}) do
15+
{:ok, response} -> response
16+
{:not_found} -> nil
817
end
918
end
1019

11-
def store( { _method, _full_path, _get_params, _allowed_groups } = key, response ) do
20+
def store({_method, _full_path, _get_params, _allowed_groups} = key, response) do
1221
# IO.puts "Going to store new content"
1322
# IO.inspect( key, label: "Key to store under" )
1423
# IO.inspect( response, label: "Response to save" )
15-
GenServer.call( __MODULE__, {:store, key, response } )
24+
GenServer.call(__MODULE__, {:store, key, response})
1625
end
1726

18-
def clear_keys( keys ) do
19-
GenServer.call( __MODULE__, {:clear_keys, keys} )
27+
def clear_keys(keys) do
28+
GenServer.call(__MODULE__, {:clear_keys, keys})
2029
end
2130

2231
###
2332
# GenServer API
2433
###
2534
def start_link(_) do
26-
GenServer.start_link( __MODULE__, [%{cache: %{}, caches_by_key: %{}}], name: __MODULE__ )
35+
GenServer.start_link(__MODULE__, [%{cache: %{}, caches_by_key: %{}}], name: __MODULE__)
2736
end
2837

2938
def init(_) do
3039
{:ok, %{cache: %{}, caches_by_key: %{}}}
3140
end
3241

3342
def handle_call({:find_cache, key}, _from, state) do
34-
if has_key? state, key do
35-
{ :reply, { :ok, Map.get( state.cache, key ) }, state }
43+
if has_key?(state, key) do
44+
{:reply, {:ok, Map.get(state.cache, key)}, state}
3645
else
37-
{ :reply, { :not_found }, state }
46+
{:reply, {:not_found}, state}
3847
end
3948
end
4049

4150
def handle_call({:store, request_key, response}, _from, state) do
4251
# IO.inspect( request_key, label: "Request key" )
4352
# IO.inspect( response, label: "Response" )
4453

45-
%{ cache_keys: cache_keys, clear_keys: clear_keys } = response
54+
%{cache_keys: cache_keys, clear_keys: clear_keys} = response
4655

4756
# IO.inspect { :cache_keys, cache_keys }
4857
# IO.inspect { :clear_keys, clear_keys }
4958

5059
state =
5160
state
5261
# update state for clear_keys
53-
|> clear_keys!( clear_keys )
62+
|> clear_keys!(clear_keys)
5463

5564
# IO.puts "Executed clear keys"
5665

5766
if cache_keys == [] do
58-
{:reply, :ok, state }
67+
{:reply, :ok, state}
5968
else
6069
# IO.puts "Caching request"
6170
# update state for new cache
6271
state =
6372
state
64-
|> add_cache_key_dependency!( cache_keys, request_key )
65-
|> add_cached_value!( request_key, response )
73+
|> add_cache_key_dependency!(cache_keys, request_key)
74+
|> add_cached_value!(request_key, response)
6675

67-
{:reply, :ok, state }
76+
{:reply, :ok, state}
6877
end
6978
end
7079

7180
def handle_call({:clear_keys, keys}, _from, state) do
72-
{:reply, :ok, clear_keys!( state, keys )}
81+
{:reply, :ok, clear_keys!(state, keys)}
7382
end
7483

75-
defp has_key?( state, key ) do
76-
Map.has_key?( state.cache, key )
84+
defp has_key?(state, key) do
85+
Map.has_key?(state.cache, key)
7786
end
7887

79-
defp clear_keys!( state, [] ) do
88+
defp clear_keys!(state, []) do
8089
state
8190
end
82-
defp clear_keys!( state, clear_keys ) do
91+
92+
defp clear_keys!(state, clear_keys) do
8393
# We have multiple clear_keys and need to update the state for it.
84-
%{ cache: cache, caches_by_key: caches_by_key } = state
94+
%{cache: cache, caches_by_key: caches_by_key} = state
8595

8696
cache =
87-
Enum.reduce( clear_keys, cache, fn (clear_key, cache) ->
88-
keys_to_remove = Map.get( caches_by_key, clear_key, [] )
89-
cache = Map.drop( cache, keys_to_remove )
97+
Enum.reduce(clear_keys, cache, fn clear_key, cache ->
98+
keys_to_remove = Map.get(caches_by_key, clear_key, [])
99+
cache = Map.drop(cache, keys_to_remove)
90100
cache
91-
end )
101+
end)
92102

93-
caches_by_key =
94-
Map.drop( caches_by_key, clear_keys )
103+
caches_by_key = Map.drop(caches_by_key, clear_keys)
95104

96-
%{ state |
97-
cache: cache,
98-
caches_by_key: caches_by_key }
105+
%{state | cache: cache, caches_by_key: caches_by_key}
99106
end
100107

101-
defp add_cache_key_dependency!( state, [], _request_key ) do
108+
defp add_cache_key_dependency!(state, [], _request_key) do
102109
state
103110
end
104-
defp add_cache_key_dependency!( state, cache_keys, request_key ) do
111+
112+
defp add_cache_key_dependency!(state, cache_keys, request_key) do
105113
# For each cache_key, we need to see if the request_key is already
106114
# in the cache_keys and add it if it is not there.
107-
%{ caches_by_key: caches_by_key } = state
115+
%{caches_by_key: caches_by_key} = state
108116

109117
caches_by_key =
110-
Enum.reduce( cache_keys, caches_by_key, fn (cache_key, caches_by_key) ->
111-
relevant_keys = Map.get( caches_by_key, cache_key, [] )
118+
Enum.reduce(cache_keys, caches_by_key, fn cache_key, caches_by_key ->
119+
relevant_keys = Map.get(caches_by_key, cache_key, [])
112120

113-
if Enum.member?( relevant_keys, request_key ) do
121+
if Enum.member?(relevant_keys, request_key) do
114122
caches_by_key
115123
else
116-
Map.put( caches_by_key, cache_key, [ request_key | relevant_keys ] )
124+
Map.put(caches_by_key, cache_key, [request_key | relevant_keys])
117125
end
118-
end )
126+
end)
119127

120-
%{ state | caches_by_key: caches_by_key }
128+
%{state | caches_by_key: caches_by_key}
121129
end
122130

123-
defp add_cached_value!( state, request_key, response ) do
124-
%{ cache: cache } = state
131+
defp add_cached_value!(state, request_key, response) do
132+
%{cache: cache} = state
125133

126-
cache = Map.put( cache, request_key, response )
134+
cache = Map.put(cache, request_key, response)
127135

128-
%{ state | cache: cache }
136+
%{state | cache: cache}
129137
end
130-
131138
end

lib/mu_elixir_cache.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
defmodule MuElixirCache do
2+
@moduledoc """
3+
Main supervisor for the cache.
4+
"""
25
use Application
36

47
def start(_type, _args) do
58
IO.puts("Starting application")
69
# List all child processes to be supervised
710
children = [
8-
{UsePlugProxy.Cache, %{}},
11+
{Cache.Registry, %{}},
912
{Plug.Cowboy,
1013
scheme: :http,
1114
plug: UsePlugProxy,

lib/use_plug_proxy.ex

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
alias UsePlugProxy.Cache, as: Cache
1+
alias Cache.Registry, as: Cache
22

33
defmodule UsePlugProxy do
4+
@moduledoc """
5+
Router for receiving cache requests.
6+
"""
47
use Plug.Router
58

69
plug(Plug.Logger)
@@ -47,6 +50,7 @@ defmodule UsePlugProxy do
4750

4851
defp maybe_log_clear_keys(clear_keys) do
4952
if Application.get_env(:use_plug_proxy, :log_clear_keys) do
53+
# credo:disable-for-next-line Credo.Check.Warning.IoInspect
5054
IO.inspect(clear_keys, label: "Clear keys")
5155
end
5256

@@ -55,15 +59,17 @@ defmodule UsePlugProxy do
5559

5660
defp maybe_log_cache_keys(cache_keys) do
5761
if Application.get_env(:use_plug_proxy, :log_cache_keys) do
62+
# credo:disable-for-next-line Credo.Check.Warning.IoInspect
5863
IO.inspect(cache_keys, label: "Cache keys")
5964
end
6065

6166
cache_keys
6267
end
6368

64-
@spec calculate_response_from_backend(String.t, Plug.Conn.t) :: Plug.Conn.t
69+
@spec calculate_response_from_backend(String.t(), Plug.Conn.t()) :: Plug.Conn.t()
6570
defp calculate_response_from_backend(full_path, conn) do
66-
url = "http://backend" <> full_path #Full path starts with /
71+
# Full path starts with /
72+
url = "http://backend" <> full_path
6773

6874
url =
6975
case conn.query_string do
@@ -80,8 +86,8 @@ defmodule UsePlugProxy do
8086
{headers, cache_keys} = extract_json_header(headers, "cache-keys")
8187
{headers, clear_keys} = extract_json_header(headers, "clear-keys")
8288

83-
maybe_log_cache_keys( cache_keys )
84-
maybe_log_clear_keys( clear_keys )
89+
maybe_log_cache_keys(cache_keys)
90+
maybe_log_clear_keys(clear_keys)
8591

8692
{headers,
8793
%{

mix.exs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ defmodule UsePlugProxy.Mixfile do
22
use Mix.Project
33

44
def project do
5-
[app: :use_plug_proxy,
6-
version: "2.0.2",
7-
elixir: "~> 1.5",
8-
build_embedded: Mix.env == :prod,
9-
start_permanent: Mix.env == :prod,
10-
deps: deps(),
11-
aliases: aliases()]
5+
[
6+
app: :use_plug_proxy,
7+
version: "2.0.2",
8+
elixir: "~> 1.5",
9+
build_embedded: Mix.env() == :prod,
10+
start_permanent: Mix.env() == :prod,
11+
deps: deps(),
12+
aliases: aliases()
13+
]
1214
end
1315

1416
def aliases do
@@ -40,8 +42,12 @@ defmodule UsePlugProxy.Mixfile do
4042
#
4143
# Type "mix help deps" for more examples and options
4244
defp deps do
43-
[{:plug_proxy, git: "https://github.com/madnificent/plug-proxy.git"},
44-
{:plug_cowboy, "~> 1.0"},
45-
{:poison, "~> 2.0"}]
45+
[
46+
{:plug_proxy, git: "https://github.com/madnificent/plug-proxy.git"},
47+
{:plug_cowboy, "~> 1.0"},
48+
{:dialyxir, "~> 1.0", only: [:dev], runtime: false},
49+
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},
50+
{:poison, "~> 2.0"}
51+
]
4652
end
4753
end

mix.lock

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
%{
2-
"certifi": {:hex, :certifi, "2.4.2", "75424ff0f3baaccfd34b1214184b6ef616d89e420b258bb0a5ea7d7bc628f7f0", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"},
3-
"cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"},
4-
"cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm"},
5-
"hackney": {:hex, :hackney, "1.14.3", "b5f6f5dcc4f1fba340762738759209e21914516df6be440d85772542d4a5e412", [:rebar3], [{:certifi, "2.4.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
6-
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
7-
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
8-
"mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm"},
9-
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"},
10-
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"},
11-
"plug": {:hex, :plug, "1.7.1", "8516d565fb84a6a8b2ca722e74e2cd25ca0fc9d64f364ec9dbec09d33eb78ccd", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}], "hexpm"},
12-
"plug_cowboy": {:hex, :plug_cowboy, "1.0.0", "2e2a7d3409746d335f451218b8bb0858301c3de6d668c3052716c909936eb57a", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
13-
"plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm"},
2+
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
3+
"certifi": {:hex, :certifi, "2.4.2", "75424ff0f3baaccfd34b1214184b6ef616d89e420b258bb0a5ea7d7bc628f7f0", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "01d479edba0569a7b7a2c8bf923feeb6dc6a358edc2965ef69aea9ba288bb243"},
4+
"cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "f4763bbe08233eceed6f24bc4fcc8d71c17cfeafa6439157c57349aa1bb4f17c"},
5+
"cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm", "db622da03aa039e6366ab953e31186cc8190d32905e33788a1acb22744e6abd2"},
6+
"credo": {:hex, :credo, "1.5.5", "e8f422026f553bc3bebb81c8e8bf1932f498ca03339856c7fec63d3faac8424b", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "dd8623ab7091956a855dc9f3062486add9c52d310dfd62748779c4315d8247de"},
7+
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
8+
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
9+
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
10+
"hackney": {:hex, :hackney, "1.14.3", "b5f6f5dcc4f1fba340762738759209e21914516df6be440d85772542d4a5e412", [:rebar3], [{:certifi, "2.4.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "ed15491f324aa0e95647dca8ef4340418dac479d1204d57e455d52dcfba3f705"},
11+
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
12+
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
13+
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
14+
"mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"},
15+
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"},
16+
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
17+
"plug": {:hex, :plug, "1.7.1", "8516d565fb84a6a8b2ca722e74e2cd25ca0fc9d64f364ec9dbec09d33eb78ccd", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}], "hexpm", "daa5fee4209c12c3c48b05a96cf88c320b627c9575f987554dcdc1fdcdf2c15e"},
18+
"plug_cowboy": {:hex, :plug_cowboy, "1.0.0", "2e2a7d3409746d335f451218b8bb0858301c3de6d668c3052716c909936eb57a", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "01d201427a8a1f4483be2465a98b45f5e82263327507fe93404a61c51eb9e9a8"},
19+
"plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"},
1420
"plug_proxy": {:git, "https://github.com/madnificent/plug-proxy.git", "201b26a05eb869cb3773549e67606756c3b9cd8a", []},
15-
"poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], [], "hexpm"},
16-
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
17-
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm"},
18-
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"},
21+
"poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], [], "hexpm", "519bc209e4433961284174c497c8524c001e285b79bdf80212b47a1f898084cc"},
22+
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm", "6e56493a862433fccc3aca3025c946d6720d8eedf6e3e6fb911952a7071c357f"},
23+
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm", "603561dc0fd62f4f2ea9b890f4e20e1a0d388746d6e20557cafb1b16950de88c"},
24+
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
1925
}

0 commit comments

Comments
 (0)