Packages
rebar3_hex
0.2.0
7.1.0
7.0.11
7.0.10
7.0.9
7.0.8
7.0.7
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.11.9
6.11.8
6.11.7
6.11.6
6.11.5
6.11.4
6.11.3
6.11.2
6.11.1
6.11.0
6.10.3
6.10.2
6.10.1
6.10.0
6.9.6
6.9.5
6.9.4
6.9.3
6.9.2
6.9.1
6.9.0
6.8.0
6.7.0
6.6.0
6.5.0
6.4.0
6.3.0
6.2.0
6.1.0
6.0.0
4.1.0
4.0.0
3.1.0
3.0.0
2.5.1
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.0
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.3
1.6.1
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Hex.pm plugin for rebar3
Current section
Files
Jump to
Current section
Files
src/rebar3_hex_config.erl
-module(rebar3_hex_config).
-behaviour(provider).
-export([init/1,
do/1,
format_error/1]).
-export([path/0
,read/0
,api_url/0
,cdn_url/0
,username/0
,auth/0
,http_proxy/0
,https_proxy/0
,update/1
,write/1]).
-include_lib("providers/include/providers.hrl").
-define(PROVIDER, config).
-define(DEPS, []).
-define(DEFAULT_HEX_CONFIG, "hex.config").
-define(DEFAULT_API_URL, "https://hex.pm").
-define(DEFAULT_CDN_URL, "https://s3.amazonaws.com/s3.hex.pm").
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
Provider = providers:create([
{name, ?PROVIDER},
{module, ?MODULE},
{namespace, hex},
{bare, false},
{deps, ?DEPS},
{example, "rebar3 hex config <key> [<value>]"},
{short_desc, "."},
{desc, ""},
{opts, []}
]),
State1 = rebar_state:add_provider(State, Provider),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
case rebar_state:command_args(State) of
["username" | Value] ->
maybe_update(username, Value),
ec_talk:say("username: ~s", [username()]);
["key" | Value] ->
maybe_update(key, Value),
case auth() of
{ok, Key} ->
ec_talk:say("key: ~s", [Key]);
error ->
ignore
end;
["api_url" | Value] ->
maybe_update(api_url, Value),
ec_talk:say("api_url: ~s", [api_url()]);
["cdn_url" | Value] ->
maybe_update(cdn_url, Value),
ec_talk:say("cdn_url: ~s", [cdn_url()]);
["http_proxy" | Value] ->
maybe_update(http_proxy, Value),
ec_talk:say("http_proxy: ~s", [http_proxy()]);
["https_proxy" | Value] ->
maybe_update(https_proxy, Value),
ec_talk:say("https_proxy: ~s", [https_proxy()]);
[Other | _]->
rebar_api:error("Config does not contain a key ~s", [Other])
end,
{ok, State}.
-spec format_error(any()) -> iolist().
format_error(Reason) ->
io_lib:format("~p", [Reason]).
path() ->
filename:join(rebar3_hex_utils:hex_home(), ?DEFAULT_HEX_CONFIG).
read() ->
case file:consult(path()) of
{ok, Config} ->
Config;
_ ->
[]
end.
api_url() ->
proplists:get_value(api_url, read(), ?DEFAULT_API_URL).
cdn_url() ->
proplists:get_value(cdn_url, read(), ?DEFAULT_CDN_URL).
username() ->
proplists:get_value(username, read(), "").
http_proxy() ->
proplists:get_value(http_proxy, read(), "").
https_proxy() ->
proplists:get_value(https_proxy, read(), "").
auth() ->
case lists:keyfind(key, 1, read()) of
{key, Key} ->
{ok, Key};
_ ->
error
end.
update(NewConfig) ->
Config = read(),
Config1 = lists:ukeymerge(1
,lists:keysort(1, NewConfig)
,lists:keysort(1, Config)),
write(Config1).
write(Config) ->
file:write_file(path(), encode_config(Config)).
%% Internal functions
maybe_update(_, []) ->
ok;
maybe_update(Key, Value) ->
update([{Key, ec_cnv:to_binary(Value)}]).
encode_config(Config) ->
iolist_to_binary([[io_lib:print(Term) | ".\n"] || Term <- Config]).