Skip to content

Commit

Permalink
Add jsdocs, use .join() for headers and formdata
Browse files Browse the repository at this point in the history
  • Loading branch information
umeshp7 committed Nov 22, 2019
1 parent c68fab7 commit 19e1aac
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 82 deletions.
94 changes: 43 additions & 51 deletions codegens/objective-c/lib/index.js
Expand Up @@ -5,11 +5,11 @@ var _ = require('./lodash'),
self;

/**
* Parses Raw data to fetch syntax
* Parses Raw data
*
* @param {Object} body Raw body data
* @param {String} indent Indent
* @param {Boolean} trim Trim request body if this is true.
* @param {String} indent indentation required for code snippet
* @param {Boolean} trim indicates whether to trim string or not
*/
function parseRawBody (body, indent, trim) {
var bodySnippet = '';
Expand All @@ -23,8 +23,8 @@ function parseRawBody (body, indent, trim) {
* Parses GraphQL body
*
* @param {Object} body GraphQL body
* @param {String} indent Indent
* @param {Boolean} trim Trim request body if this is true.
* @param {String} indent indentation required for code snippet
* @param {Boolean} trim indicates whether to trim string or not
*/
function parseGraphqlBody (body, indent, trim) {
var bodySnippet = '',
Expand All @@ -36,11 +36,11 @@ function parseGraphqlBody (body, indent, trim) {
}

/**
* Parses URLEncoded body from request to fetch syntax
* Parses URLEncoded body
*
* @param {Object} body URLEncoded Body
* @param {String} indent Indent
* @param {Boolean} trim Trim request body is this true.
* @param {String} indent indentation required for code snippet
* @param {Boolean} trim indicates whether to trim string or not
*/
function parseURLEncodedBody (body, indent, trim) {
let bodySnippet = '',
Expand All @@ -67,37 +67,33 @@ function parseURLEncodedBody (body, indent, trim) {
}

/**
* Parses URLEncoded body from request to fetch syntax
* Parses form data body from request
*
* @param {Object} body URLEncoded Body
* @param {String} indent Indent
* @param {Boolean} trim Trim request body is this true.
* @param {Object} body form data Body
* @param {String} indent indentation required for code snippet
* @param {Boolean} trim indicates whether to trim string or not
*/
function parseFormData (body, indent, trim) {
let bodySnippet = '',
formDataArray = [],
key,
value,
first = true;
value;

bodySnippet += 'NSArray *parameters = @[';

_.forEach(body, function (data) {
key = trim ? data.key.trim() : data.key;
value = trim ? data.value.trim() : data.value;
if (!data.disabled) {
if (first) {
bodySnippet += 'NSArray *parameters = @[';
}
if (!first) {
bodySnippet += ', ';
}
first = false;
if (data.type === 'file') {
bodySnippet += `\n${indent}@{ @"name": @"${key}", @"fileName": @"${data.src}" }`;
formDataArray.push(`\n${indent}@{ @"name": @"${key}", @"fileName": @"${data.src}" }`);
}
else {
bodySnippet += `\n${indent}@{ @"name": @"${key}", @"value": @"${sanitize(value, trim)}" }`;
formDataArray.push(`\n${indent}@{ @"name": @"${key}", @"value": @"${sanitize(value, trim)}" }`);
}
}
});
bodySnippet += formDataArray.join(', ');
bodySnippet += ' ];\n';
bodySnippet += 'NSString *boundary = @"----WebKitFormBoundary7MA4YWxkTrZu0gW";\n';
bodySnippet += 'NSError *error;\n';
Expand Down Expand Up @@ -129,8 +125,8 @@ function parseFormData (body, indent, trim) {
* Parses Body from the Request
*
* @param {Object} body body object from request.
* @param {String} indent
* @param {trim} trim
* @param {String} indent indentation required for code snippet
* @param {trim} trim indicates whether to trim string or not
*/
function parseBody (body, indent, trim) {
if (!_.isEmpty(body)) {
Expand All @@ -146,7 +142,7 @@ function parseBody (body, indent, trim) {
case 'graphql':
return parseGraphqlBody(body.graphql, indent, trim);
default:
return '';
return '<file-content-here>';
}
}
return '';
Expand All @@ -155,32 +151,27 @@ function parseBody (body, indent, trim) {
/**
* Parses headers from the request.
*
* @param {Object} obj
* @param {String} indent
* @param {Boolean} trim
* @param {Object} headersArray array containing headers
* @param {String} indent indentation required for code snippet
* @param {Boolean} trim indicates whether to trim string or not
*/
function parseHeaders (obj, indent, trim) {
let headers = '';
if (_.isEmpty(obj)) {
return headers;
function parseHeaders (headersArray, indent, trim) {
var headerString = '',
headerDictionary = [];
if (_.isEmpty(headersArray)) {
return headerString;
}
headers = indent + 'NSDictionary *headers = @{\n';
var first = true;
_.forEach(obj, function (value, key) {
if (!first) {
headers += ',\n';
}
first = false;
if (typeof value !== 'string') {
headers += indent.repeat(2) + '@"' + key + '":@"' + value + '"';
}
else {
headers += indent.repeat(2) + '@"' + key + '": @"' + sanitize(value, trim) + '"';
headerString = indent + 'NSDictionary *headers = @{\n';

_.forEach(headersArray, function (header) {
if (!header.disabled) {
headerDictionary.push(indent.repeat(2) + '@"' + header.key + '": @"' + sanitize(header.value, trim) + '"');
}
});
headers += '\n' + indent + '};\n';
headers += indent + '[request setAllHTTPHeaderFields:headers];\n';
return headers;
headerString += headerDictionary.join(',\n');
headerString += '\n' + indent + '};\n';
headerString += indent + '[request setAllHTTPHeaderFields:headers];\n';
return headerString;
}

self = module.exports = {
Expand Down Expand Up @@ -251,7 +242,6 @@ self = module.exports = {
});
}

let obj = {};
codeSnippet = '#import <Foundation/Foundation.h>\n';
codeSnippet += 'NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"' +
encodeURI(request.url.toString()) + '"]\n';
Expand All @@ -261,7 +251,7 @@ self = module.exports = {
// TODO: use defaultSessionConfiguration
// codeSnippet += 'NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];\n';

codeSnippet += parseHeaders(Object.assign(obj, request.getHeaders({enabled: true})), indent, trim);
codeSnippet += parseHeaders(request.headers.toJSON(), indent, trim);
codeSnippet += parseBody(request.body ? request.body.toJSON() : {}, indent, trim) + '\n';
codeSnippet += '[request setHTTPMethod:@"' + request.method + '"];\n';
codeSnippet += 'NSURLSession *session = [NSURLSession sharedSession];\n';
Expand Down Expand Up @@ -299,7 +289,9 @@ self = module.exports = {
name: 'Set request timeout',
id: 'requestTimeout',
type: 'positiveInteger',
default: 10000, // Using 10 secs as default
// Using 10 secs as default
// TODO: Find out a way to set infinite timeout.
default: 10000,
description: 'Set number of milliseconds the request should wait for a response' +
' before timing out (use 0 for infinity)'
},
Expand Down
30 changes: 0 additions & 30 deletions codegens/objective-c/test/unit/fixtures/collection.json
Expand Up @@ -1134,36 +1134,6 @@
},
"response": []
},
{
"name": "Same header",
"request": {
"method": "GET",
"header": [
{
"key": "key",
"value": "value1",
"type": "text"
},
{
"key": "key",
"value": "value2",
"type": "text"
}
],
"url": {
"raw": "https://postman-echo.com/get",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
"get"
]
}
},
"response": []
},
{
"name": "Post multiple files in the same parameter via form-data",
"request": {
Expand Down
1 change: 0 additions & 1 deletion codegens/objective-c/test/unit/fixtures/snippets.json
Expand Up @@ -24,7 +24,6 @@
"PURGE Request": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://mockbin.org/request\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\n\n[request setHTTPMethod:@\"PURGE\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"COPY Request": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://mockbin.org/request\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\n\n[request setHTTPMethod:@\"COPY\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"Post file": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://postman-echo.com/post\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\nNSArray *parameters = @[\n @{ @\"name\": @\"uohou\", @\"fileName\": @\"/Users/umesh/Desktop/Screenshot 2019-09-29 at 10.50.30 AM.png\" } ];\nNSString *boundary = @\"----WebKitFormBoundary7MA4YWxkTrZu0gW\";\nNSError *error;\nNSMutableString *body = [NSMutableString string];\nfor (NSDictionary *param in parameters) {\n [body appendFormat:@\"--%@\\r\\n\", boundary];\n if (param[@\"fileName\"]) {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\\r\\n\", param[@\"name\"], param[@\"fileName\"]];\n [body appendFormat:@\"Content-Type: %@\\r\\n\\r\\n\", param[@\"contentType\"]];\n [body appendFormat:@\"%@\", [NSString stringWithContentsOfFile:param[@\"fileName\"] encoding:NSUTF8StringEncoding error:&error]];\n if (error) {\n NSLog(@\"%@\", error);\n }\n } else {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"\\r\\n\\r\\n\", param[@\"name\"]];\n [body appendFormat:@\"%@\", param[@\"value\"]];\n }\n}\n[body appendFormat:@\"\\r\\n--%@--\\r\\n\", boundary];\nNSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];\n[request setHTTPBody:postData];\n\n[request setHTTPMethod:@\"POST\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"Same header": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://postman-echo.com/get\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\n NSDictionary *headers = @{\n @\"key\":@\"value1,value2\"\n };\n [request setAllHTTPHeaderFields:headers];\n\n[request setHTTPMethod:@\"GET\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"Post multiple files in the same parameter via form-data": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://postman-echo.com/post\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\nNSArray *parameters = @[\n @{ @\"name\": @\"multiple files\", @\"fileName\": @\"/Users/shreyshah/Desktop/openapi3.json\" }, \n @{ @\"name\": @\"multiple files\", @\"fileName\": @\"/Users/shreyshah/Desktop/openapi3.yaml\" } ];\nNSString *boundary = @\"----WebKitFormBoundary7MA4YWxkTrZu0gW\";\nNSError *error;\nNSMutableString *body = [NSMutableString string];\nfor (NSDictionary *param in parameters) {\n [body appendFormat:@\"--%@\\r\\n\", boundary];\n if (param[@\"fileName\"]) {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\\r\\n\", param[@\"name\"], param[@\"fileName\"]];\n [body appendFormat:@\"Content-Type: %@\\r\\n\\r\\n\", param[@\"contentType\"]];\n [body appendFormat:@\"%@\", [NSString stringWithContentsOfFile:param[@\"fileName\"] encoding:NSUTF8StringEncoding error:&error]];\n if (error) {\n NSLog(@\"%@\", error);\n }\n } else {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"\\r\\n\\r\\n\", param[@\"name\"]];\n [body appendFormat:@\"%@\", param[@\"value\"]];\n }\n}\n[body appendFormat:@\"\\r\\n--%@--\\r\\n\", boundary];\nNSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];\n[request setHTTPBody:postData];\n\n[request setHTTPMethod:@\"POST\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"Post a file via form-data, without file src specified": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://postman-echo.com/post\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\nNSArray *parameters = @[\n @{ @\"name\": @\"key\", @\"fileName\": @\"/path/to/file\" } ];\nNSString *boundary = @\"----WebKitFormBoundary7MA4YWxkTrZu0gW\";\nNSError *error;\nNSMutableString *body = [NSMutableString string];\nfor (NSDictionary *param in parameters) {\n [body appendFormat:@\"--%@\\r\\n\", boundary];\n if (param[@\"fileName\"]) {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\\r\\n\", param[@\"name\"], param[@\"fileName\"]];\n [body appendFormat:@\"Content-Type: %@\\r\\n\\r\\n\", param[@\"contentType\"]];\n [body appendFormat:@\"%@\", [NSString stringWithContentsOfFile:param[@\"fileName\"] encoding:NSUTF8StringEncoding error:&error]];\n if (error) {\n NSLog(@\"%@\", error);\n }\n } else {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"\\r\\n\\r\\n\", param[@\"name\"]];\n [body appendFormat:@\"%@\", param[@\"value\"]];\n }\n}\n[body appendFormat:@\"\\r\\n--%@--\\r\\n\", boundary];\nNSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];\n[request setHTTPBody:postData];\n\n[request setHTTPMethod:@\"POST\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
"Multiple form-data fields with same names": "#import <Foundation/Foundation.h>\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://postman-echo.com/post\"]\n cachePolicy:NSURLRequestUseProtocolCachePolicy\n timeoutInterval:10.0];\nNSArray *parameters = @[\n @{ @\"name\": @\"key\", @\"value\": @\"value1\" }, \n @{ @\"name\": @\"key\", @\"value\": @\"value2\" }, \n @{ @\"name\": @\"file\", @\"fileName\": @\"/Users/shreyshah/Desktop/openapi3.json\" }, \n @{ @\"name\": @\"file\", @\"fileName\": @\"/Users/shreyshah/Desktop/test.c\" } ];\nNSString *boundary = @\"----WebKitFormBoundary7MA4YWxkTrZu0gW\";\nNSError *error;\nNSMutableString *body = [NSMutableString string];\nfor (NSDictionary *param in parameters) {\n [body appendFormat:@\"--%@\\r\\n\", boundary];\n if (param[@\"fileName\"]) {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\\r\\n\", param[@\"name\"], param[@\"fileName\"]];\n [body appendFormat:@\"Content-Type: %@\\r\\n\\r\\n\", param[@\"contentType\"]];\n [body appendFormat:@\"%@\", [NSString stringWithContentsOfFile:param[@\"fileName\"] encoding:NSUTF8StringEncoding error:&error]];\n if (error) {\n NSLog(@\"%@\", error);\n }\n } else {\n [body appendFormat:@\"Content-Disposition:form-data; name=\"%@\"\\r\\n\\r\\n\", param[@\"name\"]];\n [body appendFormat:@\"%@\", param[@\"value\"]];\n }\n}\n[body appendFormat:@\"\\r\\n--%@--\\r\\n\", boundary];\nNSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];\n[request setHTTPBody:postData];\n\n[request setHTTPMethod:@\"POST\"];\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\ncompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else {\n NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n NSLog(@\"%@\", httpResponse);\n }\n}];\n[dataTask resume];",
Expand Down

0 comments on commit 19e1aac

Please sign in to comment.