   defmacro post(route, controller, action) do
     quote do
       post unquote(route), do: unquote(
-        quote do 
-          binding = binding()
-          {:ok, conn} = apply(unquote(controller), unquote(action), [var!(conn), Keyword.delete(binding, :conn)])
-          Lager.info "POST #{conn.status} /#{Enum.join conn.path_info, "/"}"
-          {:ok, conn}
-        end
+        build_match controller, action
       )
     end
   end

  defmacro delete(route, controller, action) do
    quote do
      delete unquote(route), do: unquote(
        quote do 
          binding = binding()
          {:ok, conn} = apply(unquote(controller), unquote(action), [var!(conn), Keyword.delete(binding, :conn)])
          Lager.info "DELETE #{conn.status} /#{Enum.join conn.path_info, "/"}"
          {:ok, conn}
        end
      )
    end
  end

  defmacro patch(route, controller, action) do
    quote do
      patch unquote(route), do: unquote(
        build_match controller, action
      )
    end
  end
