UNPKG

httpsnippet-fsless

Version:

HTTP Request snippet generator for *most* languages without using node-fs

71 lines (66 loc) 2.57 kB
'use strict' var util = require('util') module.exports = { /** * Create an string of given length filled with blank spaces * * @param {number} length Length of the array to return * @return {string} */ blankString: function (length) { return Array.apply(null, new Array(length)).map(String.prototype.valueOf, ' ').join('') }, /** * Create a string corresponding to a valid declaration and initialization of an Objective-C object literal. * * @param {string} nsClass Class of the litteral * @param {string} name Desired name of the instance * @param {Object} parameters Key-value object of parameters to translate to an Objective-C object litearal * @param {boolean} indent If true, will declare the litteral by indenting each new key/value pair. * @return {string} A valid Objective-C declaration and initialization of an Objective-C object litteral. * * @example * nsDeclaration('NSDictionary', 'params', {a: 'b', c: 'd'}, true) * // returns: * NSDictionary *params = @{ @"a": @"b", * @"c": @"d" }; * * nsDeclaration('NSDictionary', 'params', {a: 'b', c: 'd'}) * // returns: * NSDictionary *params = @{ @"a": @"b", @"c": @"d" }; */ nsDeclaration: function (nsClass, name, parameters, indent) { var opening = nsClass + ' *' + name + ' = ' var literal = this.literalRepresentation(parameters, indent ? opening.length : undefined) return opening + literal + ';' }, /** * Create a valid Objective-C string of a literal value according to its type. * * @param {*} value Any JavaScript literal * @return {string} */ literalRepresentation: function (value, indentation) { var join = indentation === undefined ? ', ' : ',\n ' + this.blankString(indentation) if(!value) { value = ""; //to avoid calling .replace on undefined } switch (Object.prototype.toString.call(value)) { case '[object Number]': return '@' + value case '[object Array]': var values_representation = value.map(function (v) { return this.literalRepresentation(v) }.bind(this)) return '@[ ' + values_representation.join(join) + ' ]' case '[object Object]': var keyValuePairs = [] for (var k in value) { keyValuePairs.push(util.format('@"%s": %s', k, this.literalRepresentation(value[k]))) } return '@{ ' + keyValuePairs.join(join) + ' }' default: return '@"' + value.replace(/"/g, '\\"') + '"' } } }