rest-gen 0.14.2.1 → 0.15
raw patch · 4 files changed
+58/−22 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +8/−0
- files/Javascript/base.js +43/−17
- rest-gen.cabal +1/−1
- src/Rest/Gen/JavaScript.hs +6/−4
CHANGELOG.md view
@@ -1,5 +1,13 @@ # Changelog +## 0.15++* JavaScript/node.js: Clients now use and require Q promises+* JavaScript/web: Will now use Q if available, and otherwise return the normal jQuery objects++Bugfixes:+* JavaScript: Fix propagation of URLs to secure end points+ ### 0.14.2 * Generated JavaScript now also works as a Node module
files/Javascript/base.js view
@@ -1,10 +1,11 @@ var $apinamespace$ = function (url, secureUrl) {- var postfix = '/v' + this.version + '/';- var sUrl = url + postfix;- $apinamespace$.setContext(this, sUrl);- this.secureContextUrl = (secureUrl || url.replace(/^http:/, "https:")) + postfix;+ var postfix = '/v' + this.version + '/';+ var contextUrl = url + postfix;+ var secureContextUrl = (secureUrl || url.replace(/^http:/, "https:")) + postfix;++ $apinamespace$.setContext(this, contextUrl, secureContextUrl); }; if (typeof module === "object" && module && typeof module.exports === "object")@@ -34,9 +35,12 @@ }; $apinamespace$.defaultAjaxOptions = {};+$apinamespace$.defaultHeaders = {}; function jQueryRequest (method, url, params, success, error, contentType, dataType, data, callOpts) {+ var q = window.Q || function (a) { return a };+ var callData = { type: method , url: url + (params ? '?' + $dollar$.param(params) : '')@@ -47,12 +51,13 @@ , dataType: dataType , xhrFields: { withCredentials: true } , data: data || []+ , headers: $apinamespace$.defaultHeaders }; $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions); $apinamespace$.addObject(callData, callOpts); - return $dollar$.ajax(callData);+ return q($dollar$.ajax(callData)); } function nodeRequest (method, url, params, onSuccess, onError, contentType, dataType, data, callOpts)@@ -71,6 +76,8 @@ else if (dataType === 'xml') headers.Accept = 'text/xml'; + $apinamespace$.addObject(headers, $apinamespace$.defaultHeaders);+ var callData = { url : url , qs : allParams@@ -83,17 +90,35 @@ $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions); $apinamespace$.addObject(callData, callOpts); - return require("request")(callData, callback);-- function callback (error, message, response)+ return require("q").Promise(function (resolve, reject) {- var parsedResponse = parse(response);- if (message.statusCode >= 200 && message.statusCode < 300)- onSuccess && onSuccess(parsedResponse, message);- else if (onError)- onError(error, parsedResponse, message);- }+ require("request")(callData, callback); + function callback (error, message, body)+ {+ if (message.statusCode >= 200 && message.statusCode < 300)+ {+ var parsedResponse = parse(body);+ onSuccess && onSuccess(parsedResponse, message);+ resolve(parsedResponse)+ }+ else+ {+ if (!error)+ {+ error = new Error("HTTP request error");+ error.statusCode = message.statusCode;+ error.responseBody = body;+ }++ if (onError)+ onError(error);++ reject(error);+ }+ }+ });+ function parse (response) { if (dataType === 'json')@@ -103,15 +128,16 @@ } $apinamespace$.setContext =- function (obj, url)+ function (obj, url, secureUrl) { obj.contextUrl = url;+ obj.secureContextUrl = secureUrl; for (var fld in obj) { if (obj[fld] != undefined && obj[fld].apiObjectType != undefined && obj[fld].apiObjectType == 'resourceDir') {- var newUrl = url + fld.replace(/([a-z0-9])([A-Z])/g, '$dollar$1-$dollar$2').toLowerCase() + '/'- $apinamespace$.setContext(obj[fld], newUrl);+ var postfix = fld.replace(/([a-z0-9])([A-Z])/g, '$dollar$1-$dollar$2').toLowerCase() + '/';+ $apinamespace$.setContext(obj[fld], url + postfix, secureUrl + postfix); } } };
rest-gen.cabal view
@@ -1,5 +1,5 @@ name: rest-gen-version: 0.14.2.1+version: 0.15 description: Documentation and client generation from rest definition. synopsis: Documentation and client generation from rest definition. maintainer: code@silk.co
src/Rest/Gen/JavaScript.hs view
@@ -47,10 +47,10 @@ mkAccessorConstructor :: String -> ApiResource -> Code mkAccessorConstructor ns resource = let constrName = jsDir (cleanName (resName resource))- in functionDecl constrName ["url"] $+ in functionDecl constrName ["url", "secureUrl"] $ jsIf (code $ "this instanceof " ++ constrName)- (proc (ns ++ ".setContext") (code "this, url"))- <-> jsElse (ret $ call (constrName ++ ".access") (code "url"))+ (proc (ns ++ ".setContext") (code "this, url, secureUrl"))+ <-> jsElse (ret $ call (constrName ++ ".access") (code "url, secureUrl")) mkPreFuncs :: String -> ApiResource -> Code mkPreFuncs ns node =@@ -77,7 +77,9 @@ ++ maybe "" (\i -> "' + encodeURIComponent(" ++ i ++ ") + '/") mIdent mIdent = fmap (jsId . cleanName . description) $ ident ai in function fParams $- [ var "accessor" $ new "this" . code $ "this.contextUrl + '" ++ urlPart ++ "'"+ [ var "postfix" $ "'" ++ urlPart ++ "'"+ , var "accessor" $ new "this" . code $ "this.contextUrl + postfix, "+ ++ "this.secureContextUrl + postfix" , "accessor.get" .=. mkFunction ns node , ret "accessor" ]