From fdac8a151f96391542eefb6453226fcff20379e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hedenstro=CC=88m?= <erik@erlang.ninja> Date: Tue, 15 Dec 2015 16:33:48 +0100 Subject: [PATCH] Initial implementation --- .gitlab-ci.yml | 6 +++--- Makefile | 3 +++ src/tsuru_application.erl | 31 +++++++++++++++++++++++++++++++ src/tsuru_string.erl | 20 ++++++++++++++++++++ test/tsuru_application_test.erl | 16 ++++++++++++++++ test/tsuru_string_test.erl | 11 +++++++++++ 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 src/tsuru_application.erl create mode 100644 src/tsuru_string.erl create mode 100644 test/tsuru_application_test.erl create mode 100644 test/tsuru_string_test.erl diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d0659c3..f4e7af8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,7 +37,7 @@ aws_publish: - /^\d+[.]\d+[.]\d+$/ # Only publish HEAD tagged with semantic version script: - rebar3 edoc - - aws s3 cp doc s3://s3.erlang.ninja/gurka/$CI_BUILD_REF_NAME/ --recursive + - aws s3 cp doc s3://s3.erlang.ninja/tsuru/$CI_BUILD_REF_NAME/ --recursive - rebar3 as production do tar - - aws s3 cp _build/production/rel/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/ - - aws s3 cp s3://s3.erlang.ninja/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/gurka-latest.tar.gz + - aws s3 cp _build/production/rel/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/ + - aws s3 cp s3://s3.erlang.ninja/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/tsuru-latest.tar.gz diff --git a/Makefile b/Makefile index 843e42f..ecced7c 100644 --- a/Makefile +++ b/Makefile @@ -28,3 +28,6 @@ clean: distclean: @rm -rf _build rebar.lock $(REBAR) + +shell: + @$(REBAR) shell diff --git a/src/tsuru_application.erl b/src/tsuru_application.erl new file mode 100644 index 0000000..743b8eb --- /dev/null +++ b/src/tsuru_application.erl @@ -0,0 +1,31 @@ +-module(tsuru_application). +-author("erikh"). + +%% API +-export([get_os_env/1]). + +get_os_env(Application) -> + Pattern = string:to_upper(atom_to_list(Application)) ++ "_(.+)=(.+)", + get_os_env(Pattern, os:getenv(), erl_eval:new_bindings()). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +get_os_env(_Pattern, [], Bindings) -> + erl_eval:bindings(Bindings); + +get_os_env(Pattern, [Var | Vars], Bindings) -> + case re:run(Var, Pattern) of + {match, [{0, _}, {S1, L1}, {S2, L2}]} -> + Name = list_to_atom(string:to_lower(string:substr(Var, S1 + 1, L1))), + try + {ok, ErlTokens, _} = erl_scan:string(string:substr(Var, S2 + 1, L2) ++ "."), + {ok, ErlAbsForm} = erl_parse:parse_exprs(ErlTokens), + {value, Value, _} = erl_eval:exprs(ErlAbsForm, Bindings), + get_os_env(Pattern, Vars, erl_eval:add_binding(Name, Value, Bindings)) + catch + _:_ -> get_os_env(Pattern, Vars, erl_eval:add_binding(Name, string:substr(Var, S2 + 1, L2), Bindings)) + end; + nomatch -> + get_os_env(Pattern, Vars, Bindings) + end. diff --git a/src/tsuru_string.erl b/src/tsuru_string.erl new file mode 100644 index 0000000..1b2b941 --- /dev/null +++ b/src/tsuru_string.erl @@ -0,0 +1,20 @@ +-module(tsuru_string). +-author("erikh"). + +%% API +-export([prefix_matches/2, strip_prefix/2]). + +prefix_matches([H | Prefix], [H | String]) -> + prefix_matches(Prefix, String); + +prefix_matches([], _String) -> + true; + +prefix_matches(_Prefix, _String) -> + false. + +strip_prefix([H | Prefix], [H | String]) -> + strip_prefix(Prefix, String); + +strip_prefix(_Prefix, String) -> + String. diff --git a/test/tsuru_application_test.erl b/test/tsuru_application_test.erl new file mode 100644 index 0000000..0af7f87 --- /dev/null +++ b/test/tsuru_application_test.erl @@ -0,0 +1,16 @@ +-module(tsuru_application_test). +-author("erikh"). + +-include_lib("eunit/include/eunit.hrl"). + +get_os_env_test() -> + os:putenv("TEST_NUMBER", "123"), + os:putenv("TEST_NON_EVAL", "/1/2/3"), + os:putenv("TEST_STRING", "\"/1/2/3\""), + os:putenv("TEST_ATOM", "'/1/2/3'"), + ?assertEqual(tsuru_application:get_os_env(test), [ + {atom, '/1/2/3'}, + {non_eval, "/1/2/3"}, + {number, 123}, + {string, "/1/2/3"} + ]). diff --git a/test/tsuru_string_test.erl b/test/tsuru_string_test.erl new file mode 100644 index 0000000..1209a66 --- /dev/null +++ b/test/tsuru_string_test.erl @@ -0,0 +1,11 @@ +-module(tsuru_string_test). +-author("erikh"). + +-include_lib("eunit/include/eunit.hrl"). + +prefix_matches_test() -> + ?assert(tsuru_string:prefix_matches("HELLO", "HELLO_WORLD")), + ?assertNot(tsuru_string:prefix_matches("HELLOW", "HELLO_WORLD")). + +strip_prefix_test() -> + ?assertEqual(tsuru_string:strip_prefix("HELLO_", "HELLO_WORLD"), "WORLD"). -- GitLab