@@ -101,54 +101,46 @@ defmodule Toml.Provider do
101101 end
102102 end
103103
104- if has_config_api? do
105- defp persist ( config , keyword ) when is_list ( keyword ) do
106- config = Config.Reader . merge ( config , keyword )
107- Application . put_all_env ( config , persistent: true )
108- config
109- end
110- else
111- defp persist ( config , keyword ) when is_list ( keyword ) do
112- # For each app
113- for { app , app_config } <- keyword do
114- # Get base config
115- base = Application . get_all_env ( app )
116- base = deep_merge ( base , Keyword . get ( config , app , [ ] ) )
117- # Merge this app's TOML config over the base config
118- merged = deep_merge ( base , app_config )
119- # Persist key/value pairs for this app
120- for { k , v } <- merged do
121- Application . put_env ( app , k , v , persistent: true )
122- end
123-
124- # Return merged config
125- { app , merged }
104+ defp persist ( config , keyword ) when is_list ( keyword ) do
105+ # For each app
106+ for { app , app_config } <- keyword do
107+ # Get base config
108+ base = Application . get_all_env ( app )
109+ base = deep_merge ( base , Keyword . get ( config , app , [ ] ) )
110+ # Merge this app's TOML config over the base config
111+ merged = deep_merge ( base , app_config )
112+ # Persist key/value pairs for this app
113+ for { k , v } <- merged do
114+ Application . put_env ( app , k , v , persistent: true )
126115 end
127- end
128116
129- defp deep_merge ( a , b ) when is_list ( a ) and is_list ( b ) do
130- if Keyword . keyword? ( a ) and Keyword . keyword? ( b ) do
131- Keyword . merge ( a , b , & deep_merge / 3 )
132- else
133- b
134- end
117+ # Return merged config
118+ { app , merged }
135119 end
120+ end
136121
137- defp deep_merge ( _k , a , b ) when is_list ( a ) and is_list ( b ) do
138- if Keyword . keyword? ( a ) and Keyword . keyword? ( b ) do
139- Keyword . merge ( a , b , & deep_merge / 3 )
140- else
141- b
142- end
122+ defp deep_merge ( a , b ) when is_list ( a ) and is_list ( b ) do
123+ if Keyword . keyword? ( a ) and Keyword . keyword? ( b ) do
124+ Keyword . merge ( a , b , & deep_merge / 3 )
125+ else
126+ b
143127 end
128+ end
144129
145- defp deep_merge ( _k , a , b ) when is_map ( a ) and is_map ( b ) do
146- Map . merge ( a , b , & deep_merge / 3 )
130+ defp deep_merge ( _k , a , b ) when is_list ( a ) and is_list ( b ) do
131+ if Keyword . keyword? ( a ) and Keyword . keyword? ( b ) do
132+ Keyword . merge ( a , b , & deep_merge / 3 )
133+ else
134+ b
147135 end
136+ end
148137
149- defp deep_merge ( _k , _a , b ) , do: b
138+ defp deep_merge ( _k , a , b ) when is_map ( a ) and is_map ( b ) do
139+ Map . merge ( a , b , & deep_merge / 3 )
150140 end
151141
142+ defp deep_merge ( _k , _a , b ) , do: b
143+
152144 # At the top level, convert the map to a keyword list of keyword lists
153145 # Keys with no children (i.e. keys which are not tables) are dropped
154146 defp to_keyword ( map ) when is_map ( map ) do
0 commit comments