     :erlang.send_after(time, dest, message)
   end
 
-  defp call(method, %GenSpider{}=spider, args \\ nil) when is_atom(method) do
-    Kernel.apply(spider.module, method, args || [spider.state])
+  defp call(method, %GenSpider{}=spider, nil) when is_atom(method) do
+    call(method, spider, [spider.state])
+  end
+  defp call(method, %GenSpider{}=spider, args) when is_atom(method) do
+    Kernel.apply(spider.module, method, args)
   end
 end
  def handle_info(:crawl, spider) do
    options = spider.options
    urls = options[:urls] || []

    args = [urls, spider.state]
    spider = case call(:start_requests, spider, args) do

  defmacro __using__(_) do
    quote location: :keep do
      @behaviour GenSpider
      require Logger

      @start_urls []

