@@ -79,12 +79,14 @@ defmodule Terrarium do
7979 def create ( provider_or_opts \\ [ ] , opts \\ [ ] )
8080
8181 def create ( name , opts ) when is_atom ( name ) and name != nil do
82- { provider , provider_opts } = resolve_named_or_module ( name )
82+ { config , opts } = Keyword . pop ( opts , :config )
83+ { provider , provider_opts } = resolve_named_or_module ( name , config )
8384 provider . create ( Keyword . merge ( provider_opts , opts ) )
8485 end
8586
8687 def create ( opts , [ ] ) when is_list ( opts ) do
87- { provider , provider_opts , opts } = resolve_from_opts ( opts )
88+ { config , opts } = Keyword . pop ( opts , :config )
89+ { provider , provider_opts , opts } = resolve_from_opts ( opts , config )
8890 provider . create ( Keyword . merge ( provider_opts , opts ) )
8991 end
9092
@@ -205,10 +207,13 @@ defmodule Terrarium do
205207 provider . ls ( sandbox , path )
206208 end
207209
210+ defp get_config ( nil , key , default ) , do: Application . get_env ( :terrarium , key , default )
211+ defp get_config ( config , key , default ) , do: Keyword . get ( config , key , default )
212+
208213 # Resolves an atom that could be either a named provider from config
209214 # or a direct provider module.
210- defp resolve_named_or_module ( name ) do
211- providers = Application . get_env ( :terrarium , :providers , [ ] )
215+ defp resolve_named_or_module ( name , config ) do
216+ providers = get_config ( config , :providers , [ ] )
212217
213218 case Keyword . fetch ( providers , name ) do
214219 { :ok , { module , opts } } -> { module , opts }
@@ -219,30 +224,30 @@ defmodule Terrarium do
219224
220225 # Resolves the provider from opts (inline :provider key) or falls back
221226 # to the configured default.
222- defp resolve_from_opts ( opts ) do
227+ defp resolve_from_opts ( opts , config ) do
223228 case Keyword . pop ( opts , :provider ) do
224229 { nil , opts } ->
225- { provider , provider_opts } = resolve_default! ( )
230+ { provider , provider_opts } = resolve_default! ( config )
226231 { provider , provider_opts , opts }
227232
228233 { { module , provider_opts } , opts } when is_atom ( module ) ->
229234 { module , provider_opts , opts }
230235
231236 { module , opts } when is_atom ( module ) ->
232- { provider , provider_opts } = resolve_named_or_module ( module )
237+ { provider , provider_opts } = resolve_named_or_module ( module , config )
233238 { provider , provider_opts , opts }
234239 end
235240 end
236241
237- defp resolve_default! do
238- case Application . get_env ( :terrarium , :default ) do
242+ defp resolve_default! ( config ) do
243+ case get_config ( config , :default , nil ) do
239244 nil ->
240245 raise ArgumentError ,
241246 "no default provider configured. Either pass a provider explicitly " <>
242247 "or configure one: config :terrarium, default: :local, providers: [local: Terrarium.Providers.Local]"
243248
244249 name ->
245- resolve_named_or_module ( name )
250+ resolve_named_or_module ( name , config )
246251 end
247252 end
248253end
0 commit comments