elixir-toniq / vapor

Runtime configuration system for Elixir
MIT License
596 stars 37 forks source link

Exporting .env files does not behave same as loading file in Vapor with regard to empty strings #110

Open tomjoro opened 3 years ago

tomjoro commented 3 years ago

When a setting is exported from a .env file empty strings will appear in environment like this:

.env SOME_SETTING=

Running: export $(xargs < config/environments/.env)

Will set in environment: SOME_SETTING=''

Now if you try to load this .env with Vapor the setting SOME_SETTING will not be set at all. Some configurations, e.g. RabbitMQ treat an empty string as a request to autogenerate so we must use an empty string for the setting.

The solution I propose is to detect empty string values and then set it. This change in Vapor.Provider.Dotenv would be this:

defp parse_pair([key, value], acc) do
    cond do
      String.length(key) > 0 && String.length(value) > 0 ->
        key = String.trim(key)
        value = String.trim(value)

        case starting_heredoc(value) do
          [_, delimiter] -> {key, delimiter, [], acc}
          _ -> [{key, value} | acc]
        end
      String.length(key) > 0 && String.length(value) == 0 ->
        key = String.trim(key)
        value = ""
        [{key, value} | acc]
      true ->
        acc
    end
  end

This fix is working for us.

I can generate a pull request but wanted to verify with you if this is correct?

Great project, thanks!