Skip to content

Instantly share code, notes, and snippets.

@rossjones
Created November 3, 2014 16:45
Show Gist options
  • Save rossjones/c157c6d52d1da098eb16 to your computer and use it in GitHub Desktop.
Save rossjones/c157c6d52d1da098eb16 to your computer and use it in GitHub Desktop.
defmodule Ddd.Macros do
defmacro __using__ do
@rules []
end
defmacro defrule(signature, body) do
quote do
# Prepend the signature to the list of rules....
@rules [ signature | @rules]
def unquote(signature) do
unquote(body[:do])
end
end
end
end
defmodule Ddd.Actions do
use Ddd.Macros
defrule something(items) do
....
end
end
@chrismccord
Copy link

defmodule Ddd.Macros  do
  defmacro __using__(_opts) do
    quote do
      import unquote(__MODULE__)
      Module.register_attribute __MODULE__, :rules, accumulate: true
    end
  end

  defmacro defrule(signature, body) do
    quote do
      # append the signature to the list of rules....
      @rules signature

      def unquote(signature) do
        unquote(body[:do])
      end
    end
  end

end



defmodule Ddd.Actions do 
  use Ddd.Macros 

  defrule something(items) do
      ....
  end 

end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment