summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml20
-rw-r--r--lib/powerdnsex.ex21
-rw-r--r--lib/powerdnsex/config.ex25
-rw-r--r--lib/powerdnsex/gen_server/server.ex4
-rw-r--r--mix.exs7
-rw-r--r--mix.lock3
-rw-r--r--test/lib/powerdnsex/config_test.exs15
-rw-r--r--test/lib/powerdnsex/powerdnsex_test.exs4
8 files changed, 64 insertions, 35 deletions
diff --git a/.travis.yml b/.travis.yml
index ff0b64d..775894c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,13 +2,25 @@
language: elixir
elixir:
- - 1.8
+ - 1.10
otp_release:
- - 21.0
+ - 22.3
script: mix test
matrix:
include:
- - elixir: '1.8.2'
-otp_release: '21.3'
+ - elixir: '1.6'
+ otp_release: '19.3'
+
+ - elixir: '1.7'
+ otp_release: '20.0'
+
+ - elixir: '1.7'
+ otp_release: '21.0'
+
+ - elixir: '1.8'
+ otp_release: '21.3'
+
+ - elixir: '1.9'
+ otp_release: '22.3'
diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex
index 86628b7..b77389c 100644
--- a/lib/powerdnsex.ex
+++ b/lib/powerdnsex.ex
@@ -9,10 +9,8 @@ defmodule PowerDNSex do
@spec start() :: GenServer.on_start()
@doc false
- def start() do
- import Supervisor.Spec
-
- children = [worker(Server, [@name])]
+ def start do
+ children = [:poolboy.child_spec(:pool, pool_config())]
options = [strategy: :one_for_one, name: :"#{@name}.Supervisor"]
try do
@@ -98,5 +96,18 @@ defmodule PowerDNSex do
# Private #
###########
- defp call(params), do: GenServer.call(@name, params, Config.powerdns_timeout)
+ defp pool_config do
+ [
+ name: {:local, @name},
+ worker_module: Server,
+ size: Application.get_env(:powerdnsex, :pool_size, 20),
+ max_overflow: Application.get_env(:powerdnsex, :pool_overflow, 8)
+ ]
+ end
+
+ defp call(params) do
+ :poolboy.transaction(@name, fn pid ->
+ GenServer.call(pid, params, Config.powerdns_timeout)
+ end)
+ end
end
diff --git a/lib/powerdnsex/config.ex b/lib/powerdnsex/config.ex
index 1302524..314dbca 100644
--- a/lib/powerdnsex/config.ex
+++ b/lib/powerdnsex/config.ex
@@ -1,12 +1,10 @@
defmodule PowerDNSex.Config do
- defstruct url: "",
- token: "",
- timeout: "60"
+ defstruct [:url, :token, timeout: 60]
alias PowerDNSex.Config
def data do
- set_attr_value = &Map.put(&2, &1, get_key(&1))
+ set_attr_value = &Map.update!(&2, &1, get_key(&1))
%Config{}
|> Map.from_struct()
@@ -30,15 +28,20 @@ defmodule PowerDNSex.Config do
###
defp get_key(key) do
- case Application.fetch_env(:powerdnsex, key) do
- {:ok, {:system, env_var_name}} ->
- System.get_env(env_var_name)
+ fn default ->
+ case Application.fetch_env(:powerdnsex, key) do
+ {:ok, {:system, env_var_name}} ->
+ System.get_env(env_var_name)
- {:ok, value} ->
- value
+ {:ok, value} ->
+ value
- _ ->
- raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured."
+ _ when default != nil ->
+ default
+
+ _ ->
+ raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured."
+ end
end
end
end
diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex
index a0bb7d8..df8a453 100644
--- a/lib/powerdnsex/gen_server/server.ex
+++ b/lib/powerdnsex/gen_server/server.ex
@@ -8,8 +8,8 @@ defmodule PowerDNSex.Server do
{:ok, args}
end
- def start_link(name) do
- GenServer.start_link(__MODULE__, :ok, name: name)
+ def start_link(_) do
+ GenServer.start_link(__MODULE__, :ok)
end
###
diff --git a/mix.exs b/mix.exs
index 00c9ccb..a2704bb 100644
--- a/mix.exs
+++ b/mix.exs
@@ -4,8 +4,8 @@ defmodule PowerDNSex.Mixfile do
def project do
[
app: :powerdnsex,
- version: "0.3.1",
- elixir: "~> 1.8",
+ version: "0.4.0",
+ elixir: "~> 1.6",
description: description(),
package: package(),
build_embedded: Mix.env() == :prod,
@@ -20,8 +20,9 @@ defmodule PowerDNSex.Mixfile do
defp deps do
[
+ {:poolboy, "~> 1.5"},
{:httpoison, "~> 1.5.0"},
- {:poison, "~> 3.1.0"},
+ {:poison, "~> 3.0 or ~> 4.0.1"},
{:exvcr, "~> 0.10.3", only: :test},
{:ex_doc, ">= 0.0.0", only: :dev}
]
diff --git a/mix.lock b/mix.lock
index 82215fa..50c873c 100644
--- a/mix.lock
+++ b/mix.lock
@@ -16,7 +16,8 @@
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"},
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm", "5c040b8469c1ff1b10093d3186e2e10dbe483cd73d79ec017993fb3985b8a9b3"},
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
- "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"},
+ "poison": {:hex, :poison, "4.0.1", "bcb755a16fac91cad79bfe9fc3585bb07b9331e50cfe3420a24bcc2d735709ae", [:mix], [], "hexpm", "ba8836feea4b394bb718a161fc59a288fe0109b5006d6bdf97b6badfcf6f0f25"},
+ "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm", "603561dc0fd62f4f2ea9b890f4e20e1a0d388746d6e20557cafb1b16950de88c"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
}
diff --git a/test/lib/powerdnsex/config_test.exs b/test/lib/powerdnsex/config_test.exs
index 37f0f63..c8649ae 100644
--- a/test/lib/powerdnsex/config_test.exs
+++ b/test/lib/powerdnsex/config_test.exs
@@ -1,5 +1,5 @@
defmodule PowerDNSex.ConfigTest do
- use ExUnit.Case, async: true
+ use ExUnit.Case, async: false
alias PowerDNSex.FakeConfig, as: Config
@@ -65,14 +65,15 @@ defmodule PowerDNSex.ConfigTest do
end
@tag :configs
- test "given none timeout config" do
+ test "uses default timeout" do
+ existing = Application.get_env(:powerdnsex, :timeout)
+ on_exit fn ->
+ Application.put_env(:powerdnsex, :timeout, existing)
+ end
+
Application.delete_env(:powerdnsex, :timeout)
- expected_error = "[PowerDNSex] PowerDNS timeout not configured."
- assert_raise RuntimeError, expected_error, fn ->
- PowerDNSex.Config.powerdns_timeout()
- end
+ assert PowerDNSex.Config.powerdns_timeout() == :timer.seconds(60)
end
end
-
end
diff --git a/test/lib/powerdnsex/powerdnsex_test.exs b/test/lib/powerdnsex/powerdnsex_test.exs
index 92e7f91..42c3dfd 100644
--- a/test/lib/powerdnsex/powerdnsex_test.exs
+++ b/test/lib/powerdnsex/powerdnsex_test.exs
@@ -3,8 +3,8 @@ defmodule PowerDNSexTest do
use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney
setup do
- Config.set_url()
- Config.set_token()
+ PowerDNSex.FakeConfig.set_url()
+ PowerDNSex.FakeConfig.set_token()
ExVCR.Config.cassette_library_dir(
"test/support/cassettes",