File size: 1,447 Bytes
8da2481 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | defmodule Plausible do
@moduledoc """
Build-related macros
"""
@ce_builds [:ce, :ce_test, :ce_dev]
defmacro __using__(_) do
quote do
require Plausible
import Plausible
end
end
defmacro on_ee(clauses) do
do_on_ee(clauses)
end
defmacro on_ce(clauses) do
do_on_ce(clauses)
end
# :erlang.phash2(1, 1) == 0 tricks dialyzer as per:
# https://github.com/elixir-lang/elixir/blob/v1.12.3/lib/elixir/lib/gen_server.ex#L771-L778
# and also tricks elixir >1.18 type checker
defmacro always(term) do
quote do
case :erlang.phash2(1, 1) do
0 ->
unquote(term)
1 ->
not unquote(term)
end
end
end
defmacro ee? do
quote do
always(unquote(Mix.env() not in @ce_builds))
end
end
defmacro ce? do
quote do
always(unquote(Mix.env() in @ce_builds))
end
end
defp do_on_ce(do: block) do
do_on_ee(do: nil, else: block)
end
defp do_on_ce(do: do_block, else: else_block) do
do_on_ee(do: else_block, else: do_block)
end
defp do_on_ee(do: block) do
do_on_ee(do: block, else: nil)
end
defp do_on_ee(do: do_block, else: else_block) do
if ee?() do
quote do
unquote(do_block)
end
else
quote do
unquote(else_block)
end
end
end
def product_name do
if ee?() do
"Plausible Analytics"
else
"Plausible CE"
end
end
end
|