Skip to content

Instantly share code, notes, and snippets.

@amencarini
Created September 7, 2015 07:50
Show Gist options
  • Save amencarini/dd50a97a6f2685396843 to your computer and use it in GitHub Desktop.
Save amencarini/dd50a97a6f2685396843 to your computer and use it in GitHub Desktop.
# This works
defmodule Resources do
defmacro __using__(resource) do
quote bind_quoted: [resource: resource] do
def one(resource, id), do: IO.puts "/api/#{resource}/#{id}"
end
end
end
defmodule MainApp do
use Resources, :products
def test, do: one(:products, 12)
end
MainApp.test
# This gives me:
# ** (CompileError) iex:4: function plural/0 undefined
defmodule Resources do
defmacro __using__({singular, plural}) do
quote bind_quoted: [singular: singular, plural: plural] do
def one(singular, id), do: IO.puts "/api/#{plural}/#{id}"
end
end
end
defmodule MainApp do
use Resources, {:product, :products}
def test, do: one(:products, 12)
end
MainApp.test
# This also works
defmodule Resources do
defmacro __using__({singular, plural}) do
quote do
def one(unquote(singular), id), do: IO.puts "/api/#{unquote(plural)}/#{id}"
end
end
end
defmodule MainApp do
use Resources, {:product, :products}
def test, do: one(:product, 12)
end
MainApp.test
@romul
Copy link

romul commented Sep 7, 2015

How about

defmodule Resources do
  defmacro __using__({singular, plural}) do
    quote do
      @singular unquote(singular)
      @plural unquote(plural)
      def one(@singular, id), do: IO.puts "/api/#{@plural}/#{id}"
    end
  end
end
defmodule MainApp do
  use Resources, {:product, :products}
  def test, do: one(:product, 12)
end

MainApp.test

?

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