<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -430,7 +430,7 @@ class Merb::AbstractController
   # ====
   # TODO: Update this documentation
   def url(name, *args)
-    args &lt;&lt; params
+    args &lt;&lt; {}
     Merb::Router.url(name, *args)
   end
   
@@ -452,17 +452,19 @@ class Merb::AbstractController
   # ==== Alternatives
   # If a hash is used as the first argument, a default route will be
   # generated based on it and rparams.
-  def absolute_url(name, rparams={})
+  def absolute_url(name, *args)
     # FIXME: arrgh, why request.protocol returns http://?
     # :// is not part of protocol name
-    if rparams.is_a?(Hash)
-      protocol = rparams.delete(:protocol)
-      host = rparams.delete(:host)
-    end
+    options  = extract_options_from_args!(args) || {}
+    protocol = options.delete(:protocol)
+    host     = options.delete(:host)
+    
+    raise ArgumentError, &quot;The :protocol option must be specified&quot; unless protocol
+    raise ArgumentError, &quot;The :host option must be specified&quot;     unless host
+    
+    args &lt;&lt; options
     
-    (protocol || request.protocol) + &quot;://&quot; +
-      (host || request.host) +
-      url(name, rparams)
+    protocol + &quot;://&quot; + host + url(name, *args)
   end
   
   # Generates a URL for a single or nested resource.</diff>
      <filename>lib/merb-core/controller/abstract_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -218,6 +218,33 @@ class Merb::Controller &lt; Merb::AbstractController
   # ==== Returns
   # Hash:: The parameters from the request object
   def params()  request.params  end
+    
+  # ==== Parameters
+  # name&lt;~to_sym, Hash&gt;:: The name of the URL to generate.
+  # rparams&lt;Hash&gt;:: Parameters for the route generation.
+  #
+  # ==== Returns
+  # String:: The generated URL.
+  #
+  # ==== Alternatives
+  # If a hash is used as the first argument, a default route will be
+  # generated based on it and rparams.
+  # ====
+  # TODO: Update this documentation
+  def url(name, *args)
+    args &lt;&lt; params
+    Merb::Router.url(name, *args)
+  end
+
+  alias_method :relative_url, :url
+  
+  def absolute_url(*args)
+    options  = extract_options_from_args!(args) || {}
+    options[:protocol] ||= request.protocol
+    options[:host] ||= request.host
+    args &lt;&lt; options
+    super(args.first, *args[1..-1])
+  end
 
   # The results of the controller's render, to be returned to Rack.
   #</diff>
      <filename>lib/merb-core/controller/merb_controller.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>62bbcc46c28e3921a1efb43b02da4f20b51d080e</id>
    </parent>
  </parents>
  <author>
    <name>Carl Lerche</name>
    <email>carllerche@mac.com</email>
  </author>
  <url>http://github.com/wycats/merb-core/commit/b085564bc37ed1a46d1a727b533cd4a03097e2ab</url>
  <id>b085564bc37ed1a46d1a727b533cd4a03097e2ab</id>
  <committed-date>2008-09-30T13:54:10-07:00</committed-date>
  <authored-date>2008-09-30T13:54:10-07:00</authored-date>
  <message>Reorganized URL generation methods across Controller classes

Organized the #url, #relative_url, and #absolute_url methods
across Merb::AbstractController and Merb::Controller</message>
  <tree>b232b0e212afef5bf1caa827ccd7eb141a130984</tree>
  <committer>
    <name>Carl Lerche</name>
    <email>carllerche@mac.com</email>
  </committer>
</commit>
