exporter v0.1.0 Exporter

On the library side, you can specify functions and macros that the caller can use by default.

defmodule MyModule do

  use Exporter, default: [a: 0, b: 1]

  def a, do: "a"
  def b(_), do: "b"
  def c, do: "c"

end

defmodule MyApp do
  use MyModule
  a()  # ok
  b(1) # ok
  c()  # error

  use MyModule, [c: 0]
  a()  # error
  b(1) # error
  c()  # ok
end

# allow override

defmodule MyModule do

  use Exporter, default: [a: 0, b: 1]

  defmacro __using__(opt)  do
    ast = super(opt)
    quote do
      import Enum, only: [min: 1]
      unquote(ast)
    end
  end

end