
function API (config, custom) {
  this.options = {}

  var api = {}

  var wrap = {
    method: (key) => ((url) => {
      this.options.method = key.toUpperCase()
      this.options.url = url || ''
      return api
    }),
    option: (key) => ((value) => {
      this.options[key] = value
      return api
    }),
    custom: (key) => custom[key].bind(api, this.options)
  }

  Object.keys(config).forEach((type) => {
    Object.keys(config[type]).forEach((method) => {
      api[method] = wrap[type](method)

      config[type][method].forEach((alias) => {
        api[alias] = wrap[type](method)
      })
    })
  })

  return api
}

module.exports = (config, custom) => {
  return new API(config, custom)
}

@@ -1,17 +1,21 @@
 %0A
-function API
+module.exports =
  (co
@@ -31,96 +31,215 @@
 tom)
+ =%3E
  %7B%0A
+%0A
   
+var wrap = %7B%0A    method: function (key) %7B%0A      return (value) =%3E %7B%0A        if (!
 this.
+_
 options
- = %7B%7D%0A%0A  var api = %7B%7D%0A%0A  var wrap
+) %7B%0A          var api = init()%0A          api._options
  = %7B
+%7D
 %0A    
-method: (key) =%3E ((url) =%3E %7B%0A
+      return api%5Bkey%5D(value)%0A        %7D%0A  
     
@@ -237,32 +237,33 @@
  %7D%0A        this.
+_
 options.method =
@@ -283,29 +283,32 @@
 ase()%0A      
+ 
+ 
 this.
+_
 options.url 
@@ -313,18 +313,22 @@
 l = 
-url
+value
  %7C%7C ''%0A
+  
     
@@ -332,34 +332,42 @@
      return 
-api
+this
 %0A    
+  %7D%0A    
 %7D
-)
 ,%0A    option
@@ -372,31 +372,181 @@
 on: 
-(key) =%3E ((value) =%3E %7B%0A
+function (key) %7B%0A      return (value) =%3E %7B%0A        if (!this._options) %7B%0A          var api = init()%0A          api._options = %7B%7D%0A          return api%5Bkey%5D(value)%0A        %7D%0A  
     
@@ -548,24 +548,25 @@
        this.
+_
 options%5Bkey%5D
@@ -584,47 +584,194 @@
     
+  
 return 
-api%0A    %7D),%0A    custom: (key) =%3E
+this%0A      %7D%0A    %7D,%0A    custom: function (key) %7B%0A      return function () %7B%0A        if (!this._options) %7B%0A          var api = init()%0A          api._options = %7B%7D%0A          return
  cus
@@ -783,37 +783,161 @@
 ey%5D.
-bind
+apply
 (api, 
-this.options)%0A  
+arguments)%0A        %7D%0A        return custom%5Bkey%5D.apply(this, arguments)%0A      %7D.bind(this)%0A    %7D%0A  %7D%0A%0A  function init () %7B%0A    var api = %7B
 %7D%0A%0A
+  
   Ob
@@ -970,24 +970,26 @@
 (type) =%3E %7B%0A
+  
     Object.k
@@ -1030,24 +1030,26 @@
  =%3E %7B%0A      
+  
 api%5Bmethod%5D 
@@ -1052,33 +1052,43 @@
 od%5D = wrap%5Btype%5D
-(
+.call(api, 
 method)%0A%0A      c
@@ -1086,16 +1086,18 @@
 %0A%0A      
+  
 config%5Bt
@@ -1134,24 +1134,26 @@
 %3E %7B%0A        
+  
 api%5Balias%5D =
@@ -1163,17 +1163,27 @@
 ap%5Btype%5D
-(
+.call(api, 
 method)%0A
@@ -1192,24 +1192,32 @@
     
+  
 %7D)%0A
+  
     %7D)%0A
+  
   %7D)%0A%0A
+  
   re
@@ -1229,81 +1229,27 @@
 api%0A
-%7D%0A%0Amodule.exports = (config, custom) =%3E %7B%0A  return new API(config, custom
+  %7D%0A%0A  return init(
 )%0A%7D%0A

Allow options initialization from any method