From 95596b949714afa5f98a5c306b651ceaf69d4ae6 Mon Sep 17 00:00:00 2001 From: Yath Seanghay Date: Tue, 28 Jul 2020 12:02:42 +0700 Subject: [PATCH 1/2] Add Koltin for OkHttp Support --- src/targets/index.js | 1 + src/targets/kotlin/index.js | 12 +++ src/targets/kotlin/okhttp.js | 78 ++++++++++++++++++ test/fixtures/available-targets.json | 14 ++++ test/fixtures/output/.DS_Store | Bin 0 -> 6148 bytes .../kotlin/okhttp/application-form-encoded.kt | 11 +++ .../output/kotlin/okhttp/application-json.kt | 11 +++ test/fixtures/output/kotlin/okhttp/cookies.kt | 9 ++ .../output/kotlin/okhttp/custom-method.kt | 8 ++ test/fixtures/output/kotlin/okhttp/full.kt | 13 +++ test/fixtures/output/kotlin/okhttp/headers.kt | 10 +++ test/fixtures/output/kotlin/okhttp/https.kt | 8 ++ .../output/kotlin/okhttp/jsonObj-multiline.kt | 11 +++ .../kotlin/okhttp/jsonObj-null-value.kt | 11 +++ .../output/kotlin/okhttp/multipart-data.kt | 11 +++ .../output/kotlin/okhttp/multipart-file.kt | 11 +++ .../kotlin/okhttp/multipart-form-data.kt | 11 +++ test/fixtures/output/kotlin/okhttp/query.kt | 8 ++ test/fixtures/output/kotlin/okhttp/short.kt | 8 ++ .../output/kotlin/okhttp/text-plain.kt | 11 +++ test/targets/kotlin/okhttp.js | 5 ++ 21 files changed, 262 insertions(+) create mode 100644 src/targets/kotlin/index.js create mode 100644 src/targets/kotlin/okhttp.js create mode 100644 test/fixtures/output/.DS_Store create mode 100644 test/fixtures/output/kotlin/okhttp/application-form-encoded.kt create mode 100644 test/fixtures/output/kotlin/okhttp/application-json.kt create mode 100644 test/fixtures/output/kotlin/okhttp/cookies.kt create mode 100644 test/fixtures/output/kotlin/okhttp/custom-method.kt create mode 100644 test/fixtures/output/kotlin/okhttp/full.kt create mode 100644 test/fixtures/output/kotlin/okhttp/headers.kt create mode 100644 test/fixtures/output/kotlin/okhttp/https.kt create mode 100644 test/fixtures/output/kotlin/okhttp/jsonObj-multiline.kt create mode 100644 test/fixtures/output/kotlin/okhttp/jsonObj-null-value.kt create mode 100644 test/fixtures/output/kotlin/okhttp/multipart-data.kt create mode 100644 test/fixtures/output/kotlin/okhttp/multipart-file.kt create mode 100644 test/fixtures/output/kotlin/okhttp/multipart-form-data.kt create mode 100644 test/fixtures/output/kotlin/okhttp/query.kt create mode 100644 test/fixtures/output/kotlin/okhttp/short.kt create mode 100644 test/fixtures/output/kotlin/okhttp/text-plain.kt create mode 100644 test/targets/kotlin/okhttp.js diff --git a/src/targets/index.js b/src/targets/index.js index 68f83a6b8..dd90b4874 100644 --- a/src/targets/index.js +++ b/src/targets/index.js @@ -8,6 +8,7 @@ module.exports = { http: require('./http'), java: require('./java'), javascript: require('./javascript'), + kotlin: require('./kotlin'), node: require('./node'), objc: require('./objc'), ocaml: require('./ocaml'), diff --git a/src/targets/kotlin/index.js b/src/targets/kotlin/index.js new file mode 100644 index 000000000..fd9fbd698 --- /dev/null +++ b/src/targets/kotlin/index.js @@ -0,0 +1,12 @@ +'use strict' + +module.exports = { + info: { + key: 'kotlin', + title: 'Kotlin', + extname: '.kt', + default: 'okhttp' + }, + + okhttp: require('./okhttp') +} diff --git a/src/targets/kotlin/okhttp.js b/src/targets/kotlin/okhttp.js new file mode 100644 index 000000000..85391abd8 --- /dev/null +++ b/src/targets/kotlin/okhttp.js @@ -0,0 +1,78 @@ +/** + * @description + * HTTP code snippet generator for Kotlin using OkHttp. + * + * @author + * @seanghay + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +var CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + var opts = Object.assign({ + indent: ' ' + }, options) + + var code = new CodeBuilder(opts.indent) + + var methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'] + + var methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'] + + code.push('val client = OkHttpClient()') + .blank() + + if (source.postData.text) { + if (source.postData.boundary) { + code.push('val mediaType = MediaType.parse("%s; boundary=%s")', source.postData.mimeType, source.postData.boundary) + } else { + code.push('val mediaType = MediaType.parse("%s")', source.postData.mimeType) + } + code.push('val body = RequestBody.create(mediaType, %s)', JSON.stringify(source.postData.text)) + } + + code.push('val request = Request.Builder()') + code.push(1, '.url("%s")', source.fullUrl) + if (methods.indexOf(source.method.toUpperCase()) === -1) { + if (source.postData.text) { + code.push(1, '.method("%s", body)', source.method.toUpperCase()) + } else { + code.push(1, '.method("%s", null)', source.method.toUpperCase()) + } + } else if (methodsWithBody.indexOf(source.method.toUpperCase()) >= 0) { + if (source.postData.text) { + code.push(1, '.%s(body)', source.method.toLowerCase()) + } else { + code.push(1, '.%s(null)', source.method.toLowerCase()) + } + } else { + code.push(1, '.%s()', source.method.toLowerCase()) + } + + // Add headers, including the cookies + var headers = Object.keys(source.allHeaders) + + // construct headers + if (headers.length) { + headers.forEach(function (key) { + code.push(1, '.addHeader("%s", "%s")', key, source.allHeaders[key]) + }) + } + + code.push(1, '.build()') + .blank() + .push('val response = client.newCall(request).execute()') + + return code.join() +} + +module.exports.info = { + key: 'okhttp', + title: 'OkHttp', + link: 'http://square.github.io/okhttp/', + description: 'An HTTP Request Client Library' +} diff --git a/test/fixtures/available-targets.json b/test/fixtures/available-targets.json index 261c48160..da7e47caf 100644 --- a/test/fixtures/available-targets.json +++ b/test/fixtures/available-targets.json @@ -320,5 +320,19 @@ "title": "HTTP/1.1" } ] + }, + { + "key": "kotlin", + "title": "Kotlin", + "extname": ".kt", + "default": "okhttp", + "clients": [ + { + "key": "okhttp", + "title": "OkHttp", + "link": "http://square.github.io/okhttp/", + "description": "An HTTP Request Client Library" + } + ] } ] diff --git a/test/fixtures/output/.DS_Store b/test/fixtures/output/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..63b728b450e912f8fa3bc98e04a9fc67ff4fcf03 GIT binary patch literal 6148 zcmeH~K?=e^3`G;|qTr@Wm$UHz-e4$t0xzH-2qF~(yPl)_lL>;=wTS#c@+X-IrEk$` zL`3`haV^q`NDDWWm4%5Z@&JhP8{Tj3ht;B=96)--iS@&7q~Le>xC+1b{XuyJ79K1T}(S!u1*@b}wNMJ%>Uh~fG|1JE}{6A@7N&+PC zX9Tp_>^41KD(=>|*R%RQs Date: Tue, 28 Jul 2020 12:18:17 +0700 Subject: [PATCH 2/2] Add `kotlin` to package.json keywords --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 638ccbb55..b96294034 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "java", "javascript", "jquery", + "kotlin", "objc", "objective-c", "ocaml",