From 48a60cec46ff219b50b6a455e0590a051aab32a0 Mon Sep 17 00:00:00 2001 From: Katherine Smith Date: Mon, 4 Sep 2017 15:49:36 +0100 Subject: [PATCH 1/2] Generate correct string for array of objects --- addon/generator.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/addon/generator.js b/addon/generator.js index 91f6e01..4fee51c 100644 --- a/addon/generator.js +++ b/addon/generator.js @@ -62,8 +62,20 @@ export default { }, wrapArrayInStringTokens(array) { - return array.map((ele) => { - return this.wrapInStringTokens(ele); + return array.map(ele => { + if (typeof ele === 'object') { + let generatedElements = []; + let eleKeys = Object.keys(ele); + + eleKeys.forEach(key => { + let generatedValue = this.generateArgument({ name: key, value: ele[key] }); + generatedElements.push(generatedValue); + }); + + return this.argumentObjectOpeningToken + generatedElements.join(', ') + this.argumentObjectClosingToken; + } else { + return this.wrapInStringTokens(ele); + } }).join(); }, From d6cdc0027c1553d06556e70de9686164e9f4d026 Mon Sep 17 00:00:00 2001 From: Katherine Smith Date: Mon, 4 Sep 2017 17:05:48 +0100 Subject: [PATCH 2/2] Test arrays of objects are generated correctly --- tests/unit/generator-test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/unit/generator-test.js b/tests/unit/generator-test.js index 8e9ac37..1b22d78 100644 --- a/tests/unit/generator-test.js +++ b/tests/unit/generator-test.js @@ -19,7 +19,8 @@ test('all the things', function(assert) { new Type.Argument('status', 'active'), new Type.Argument('embedded', new Type.ArgumentSet(new Type.Argument('id', 1))), new Type.Argument('limit', 10), - new Type.Argument('offset', 0) + new Type.Argument('offset', 0), + new Type.Argument('objectArray', [{ foo: 'bar', bar: 'foo' }]) ); let post = new Type.Field('post', 'postAlias', postArgumentSet, postSelectionSet); @@ -27,5 +28,8 @@ test('all the things', function(assert) { let operationArgumentSet = new Type.ArgumentSet(); let operation = new Type.Operation('query', 'postsQuery', operationArgumentSet, operationSelectionSet); - assert.equal(Generator.generate(operation), `query postsQuery { postAlias: post(ids: ["1","2","3"], status: "active", embedded: { id: 1 }, limit: 10, offset: 0) { id status author { id username } } }`); + assert.equal( + Generator.generate(operation), + `query postsQuery { postAlias: post(ids: ["1","2","3"], status: "active", embedded: { id: 1 }, limit: 10, offset: 0, objectArray: [{ foo: "bar", bar: "foo" }]) { id status author { id username } } }` + ); });