From ab608c7544751b2af5cca77e56dba76dc39521b3 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Thu, 10 Sep 2020 18:32:17 -0400 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20serialize=20scop?= =?UTF-8?q?e=5Fid=20by=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/api/addon/serializers/application.js | 21 +++---------- addons/api/addon/serializers/auth-method.js | 13 -------- addons/api/addon/serializers/group.js | 8 ----- addons/api/addon/serializers/host-catalog.js | 13 -------- addons/api/addon/serializers/host-set.js | 8 ----- addons/api/addon/serializers/host.js | 13 -------- addons/api/addon/serializers/role.js | 8 ----- addons/api/addon/serializers/scope.js | 11 ------- addons/api/addon/serializers/target.js | 8 ----- addons/api/addon/serializers/user.js | 13 -------- addons/api/app/serializers/auth-method.js | 1 - addons/api/app/serializers/host-catalog.js | 1 - addons/api/app/serializers/host.js | 1 - addons/api/app/serializers/scope.js | 1 - addons/api/app/serializers/user.js | 1 - .../unit/serializers/application-test.js | 28 ++--------------- .../unit/serializers/auth-method-test.js | 24 -------------- .../unit/serializers/host-catalog-test.js | 23 -------------- .../api/tests/unit/serializers/host-test.js | 23 -------------- .../api/tests/unit/serializers/scope-test.js | 31 ------------------- .../api/tests/unit/serializers/user-test.js | 23 -------------- 21 files changed, 7 insertions(+), 266 deletions(-) delete mode 100644 addons/api/addon/serializers/auth-method.js delete mode 100644 addons/api/addon/serializers/host-catalog.js delete mode 100644 addons/api/addon/serializers/host.js delete mode 100644 addons/api/addon/serializers/scope.js delete mode 100644 addons/api/addon/serializers/user.js delete mode 100644 addons/api/app/serializers/auth-method.js delete mode 100644 addons/api/app/serializers/host-catalog.js delete mode 100644 addons/api/app/serializers/host.js delete mode 100644 addons/api/app/serializers/scope.js delete mode 100644 addons/api/app/serializers/user.js delete mode 100644 addons/api/tests/unit/serializers/auth-method-test.js delete mode 100644 addons/api/tests/unit/serializers/host-catalog-test.js delete mode 100644 addons/api/tests/unit/serializers/host-test.js delete mode 100644 addons/api/tests/unit/serializers/scope-test.js delete mode 100644 addons/api/tests/unit/serializers/user-test.js diff --git a/addons/api/addon/serializers/application.js b/addons/api/addon/serializers/application.js index cea8c06a0..65743c707 100644 --- a/addons/api/addon/serializers/application.js +++ b/addons/api/addon/serializers/application.js @@ -8,18 +8,6 @@ import { copy } from 'ember-copy'; */ export default class ApplicationSerializer extends RESTSerializer { - // =attributes - - attrs = { - scope: { serialize: false } - }; - - /** - * Whether or not to serialize the scope ID into scope_id. - * @type {boolean} - */ - serializeScopeID = false; - // =methods /** @@ -81,10 +69,11 @@ export default class ApplicationSerializer extends RESTSerializer { */ serialize(snapshot) { const serialized = super.serialize(...arguments); - if (this.serializeScopeID) { - const scope_id = snapshot?.attr('scope')?.attr('scope_id'); - if (scope_id) serialized.scope_id = scope_id; - } + // Delete `scope` field + delete serialized.scope; + // And serialize `scope_id` + const scope_id = snapshot?.attr('scope')?.attr('scope_id'); + if (scope_id) serialized.scope_id = scope_id; return serialized; } diff --git a/addons/api/addon/serializers/auth-method.js b/addons/api/addon/serializers/auth-method.js deleted file mode 100644 index d0c3c9312..000000000 --- a/addons/api/addon/serializers/auth-method.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationSerializer from './application'; - -export default class AuthMethodSerializer extends ApplicationSerializer { - - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - -} diff --git a/addons/api/addon/serializers/group.js b/addons/api/addon/serializers/group.js index 2c7327a84..bbccc068f 100644 --- a/addons/api/addon/serializers/group.js +++ b/addons/api/addon/serializers/group.js @@ -2,14 +2,6 @@ import ApplicationSerializer from './application'; export default class GroupSerializer extends ApplicationSerializer { - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - // =methods /** diff --git a/addons/api/addon/serializers/host-catalog.js b/addons/api/addon/serializers/host-catalog.js deleted file mode 100644 index 766dff5d6..000000000 --- a/addons/api/addon/serializers/host-catalog.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationSerializer from './application'; - -export default class HostCatalogSerializer extends ApplicationSerializer { - - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - -} diff --git a/addons/api/addon/serializers/host-set.js b/addons/api/addon/serializers/host-set.js index 697e7748d..3ce7c7161 100644 --- a/addons/api/addon/serializers/host-set.js +++ b/addons/api/addon/serializers/host-set.js @@ -2,14 +2,6 @@ import ApplicationSerializer from './application'; export default class HostSetSerializer extends ApplicationSerializer { - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - // =methods /** diff --git a/addons/api/addon/serializers/host.js b/addons/api/addon/serializers/host.js deleted file mode 100644 index 06a7b91d3..000000000 --- a/addons/api/addon/serializers/host.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationSerializer from './application'; - -export default class HostSerializer extends ApplicationSerializer { - - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - -} diff --git a/addons/api/addon/serializers/role.js b/addons/api/addon/serializers/role.js index 5c858bc1f..89d10353d 100644 --- a/addons/api/addon/serializers/role.js +++ b/addons/api/addon/serializers/role.js @@ -3,14 +3,6 @@ import { get } from '@ember/object'; export default class RoleSerializer extends ApplicationSerializer { - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - // =methods /** diff --git a/addons/api/addon/serializers/scope.js b/addons/api/addon/serializers/scope.js deleted file mode 100644 index 5e336e65f..000000000 --- a/addons/api/addon/serializers/scope.js +++ /dev/null @@ -1,11 +0,0 @@ -import ApplicationSerializer from './application'; - -export default class ScopeSerializer extends ApplicationSerializer { - - /** - * Serialize the scope ID into scope_id. - * @type {boolean} - */ - serializeScopeID = true; - -} diff --git a/addons/api/addon/serializers/target.js b/addons/api/addon/serializers/target.js index eb7fa1155..eae3ad5b1 100644 --- a/addons/api/addon/serializers/target.js +++ b/addons/api/addon/serializers/target.js @@ -2,14 +2,6 @@ import ApplicationSerializer from './application'; export default class TargetSerializer extends ApplicationSerializer { - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - // =methods /** diff --git a/addons/api/addon/serializers/user.js b/addons/api/addon/serializers/user.js deleted file mode 100644 index 7e9e54c21..000000000 --- a/addons/api/addon/serializers/user.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationSerializer from './application'; - -export default class UserSerializer extends ApplicationSerializer { - - // =attributes - - /** - * Serialized the scope ID into the `scope_id` field. - * @type {boolean} - */ - serializeScopeID = true; - -} diff --git a/addons/api/app/serializers/auth-method.js b/addons/api/app/serializers/auth-method.js deleted file mode 100644 index 39dadcf9d..000000000 --- a/addons/api/app/serializers/auth-method.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/serializers/auth-method'; diff --git a/addons/api/app/serializers/host-catalog.js b/addons/api/app/serializers/host-catalog.js deleted file mode 100644 index e2818e2c7..000000000 --- a/addons/api/app/serializers/host-catalog.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/serializers/host-catalog'; diff --git a/addons/api/app/serializers/host.js b/addons/api/app/serializers/host.js deleted file mode 100644 index 33844fbaf..000000000 --- a/addons/api/app/serializers/host.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/serializers/host'; diff --git a/addons/api/app/serializers/scope.js b/addons/api/app/serializers/scope.js deleted file mode 100644 index cdc15f3a2..000000000 --- a/addons/api/app/serializers/scope.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/serializers/scope'; diff --git a/addons/api/app/serializers/user.js b/addons/api/app/serializers/user.js deleted file mode 100644 index 5c5a92643..000000000 --- a/addons/api/app/serializers/user.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/serializers/user'; diff --git a/addons/api/tests/unit/serializers/application-test.js b/addons/api/tests/unit/serializers/application-test.js index 07385b071..df6dca9db 100644 --- a/addons/api/tests/unit/serializers/application-test.js +++ b/addons/api/tests/unit/serializers/application-test.js @@ -30,11 +30,9 @@ module('Unit | Serializer | application', function (hooks) { }); }); - test('it does not serialize scope_id when serializeScopeID is false', function (assert) { - assert.expect(2); + test('it serializes scope_id when scope is set', function (assert) { + assert.expect(1); const store = this.owner.lookup('service:store'); - const serializer = store.serializerFor('user'); - serializer.serializeScopeID = false; const record = store.createRecord('user', { name: 'User', description: 'Description', @@ -44,28 +42,6 @@ module('Unit | Serializer | application', function (hooks) { } }); const serializedRecord = record.serialize(); - assert.equal(serializer.serializeScopeID, false); - assert.deepEqual(serializedRecord, { - name: 'User', - description: 'Description' - }); - }); - - test('it does serialize scope_id when serializeScopeID is true', function (assert) { - assert.expect(2); - const store = this.owner.lookup('service:store'); - const serializer = store.serializerFor('user'); - serializer.serializeScopeID = true; - const record = store.createRecord('user', { - name: 'User', - description: 'Description', - scope: { - scope_id: 'global', - type: 'global' - } - }); - const serializedRecord = record.serialize(); - assert.equal(serializer.serializeScopeID, true); assert.deepEqual(serializedRecord, { name: 'User', description: 'Description', diff --git a/addons/api/tests/unit/serializers/auth-method-test.js b/addons/api/tests/unit/serializers/auth-method-test.js deleted file mode 100644 index 3ea3b3a32..000000000 --- a/addons/api/tests/unit/serializers/auth-method-test.js +++ /dev/null @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Serializer | auth method', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('auth-method'); - - assert.ok(serializer); - }); - - test('it serializes records', function(assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('auth-method', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); - -}); diff --git a/addons/api/tests/unit/serializers/host-catalog-test.js b/addons/api/tests/unit/serializers/host-catalog-test.js deleted file mode 100644 index 64a20b044..000000000 --- a/addons/api/tests/unit/serializers/host-catalog-test.js +++ /dev/null @@ -1,23 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Serializer | host catalog', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('host-catalog'); - - assert.ok(serializer); - }); - - test('it serializes records', function(assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('host-catalog', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); -}); diff --git a/addons/api/tests/unit/serializers/host-test.js b/addons/api/tests/unit/serializers/host-test.js deleted file mode 100644 index c31a5ce4e..000000000 --- a/addons/api/tests/unit/serializers/host-test.js +++ /dev/null @@ -1,23 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Serializer | host', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('host'); - - assert.ok(serializer); - }); - - test('it serializes records', function(assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('host', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); -}); diff --git a/addons/api/tests/unit/serializers/scope-test.js b/addons/api/tests/unit/serializers/scope-test.js deleted file mode 100644 index d8b783344..000000000 --- a/addons/api/tests/unit/serializers/scope-test.js +++ /dev/null @@ -1,31 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Serializer | scope', function(hooks) { - setupTest(hooks); - - test('it serializes scope_id into payloads', function (assert) { - assert.expect(2); - const store = this.owner.lookup('service:store'); - const serializer = store.serializerFor('scope'); - serializer.serializeScopeID = true; - const record = store.createRecord('scope', { - name: 'My Scope', - description: 'Foo', - type: 'org', - scope: { - scope_id: 'global', - type: 'global' - } - }); - const serializedRecord = record.serialize(); - assert.equal(serializer.serializeScopeID, true); - assert.deepEqual(serializedRecord, { - name: 'My Scope', - description: 'Foo', - type: 'org', - scope_id: 'global' - }); - }); - -}); diff --git a/addons/api/tests/unit/serializers/user-test.js b/addons/api/tests/unit/serializers/user-test.js deleted file mode 100644 index b96a53b13..000000000 --- a/addons/api/tests/unit/serializers/user-test.js +++ /dev/null @@ -1,23 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Serializer | user', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('user'); - - assert.ok(serializer); - }); - - test('it serializes records', function(assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('user', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); -}); From 795f3f58398bc865b7f2e7f2f3c5da8a98e18251 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Thu, 10 Sep 2020 19:02:53 -0400 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20do=20not=20scope?= =?UTF-8?q?-prefix=20paths=20by=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/api/addon/adapters/application.js | 46 ------------------- addons/api/addon/adapters/auth-method.js | 13 ------ addons/api/addon/adapters/group.js | 13 ------ addons/api/addon/adapters/host-catalog.js | 13 ------ addons/api/addon/adapters/host-set.js | 18 -------- addons/api/addon/adapters/host.js | 18 -------- addons/api/addon/adapters/role.js | 13 ------ addons/api/addon/adapters/scope.js | 13 ------ addons/api/addon/adapters/target.js | 13 ------ addons/api/addon/adapters/user.js | 13 ------ addons/api/app/adapters/auth-method.js | 1 - addons/api/app/adapters/group.js | 1 - addons/api/app/adapters/host-catalog.js | 1 - addons/api/app/adapters/host-set.js | 1 - addons/api/app/adapters/host.js | 1 - addons/api/app/adapters/role.js | 1 - addons/api/app/adapters/scope.js | 1 - addons/api/app/adapters/target.js | 1 - addons/api/app/adapters/user.js | 1 - .../tests/unit/adapters/application-test.js | 35 +++----------- .../tests/unit/adapters/auth-method-test.js | 12 ----- addons/api/tests/unit/adapters/group-test.js | 12 ----- .../tests/unit/adapters/host-catalog-test.js | 12 ----- .../api/tests/unit/adapters/host-set-test.js | 22 --------- addons/api/tests/unit/adapters/host-test.js | 12 ----- addons/api/tests/unit/adapters/role-test.js | 12 ----- addons/api/tests/unit/adapters/scope-test.js | 19 -------- addons/api/tests/unit/adapters/target-test.js | 12 ----- addons/api/tests/unit/adapters/user-test.js | 12 ----- ui/core/mirage/config.js | 14 +----- ui/core/mirage/route-handlers/auth.js | 10 ++-- .../unit/authenticators/password-test.js | 2 + 32 files changed, 15 insertions(+), 353 deletions(-) delete mode 100644 addons/api/addon/adapters/auth-method.js delete mode 100644 addons/api/addon/adapters/group.js delete mode 100644 addons/api/addon/adapters/host-catalog.js delete mode 100644 addons/api/addon/adapters/host-set.js delete mode 100644 addons/api/addon/adapters/host.js delete mode 100644 addons/api/addon/adapters/role.js delete mode 100644 addons/api/addon/adapters/scope.js delete mode 100644 addons/api/addon/adapters/target.js delete mode 100644 addons/api/addon/adapters/user.js delete mode 100644 addons/api/app/adapters/auth-method.js delete mode 100644 addons/api/app/adapters/group.js delete mode 100644 addons/api/app/adapters/host-catalog.js delete mode 100644 addons/api/app/adapters/host-set.js delete mode 100644 addons/api/app/adapters/host.js delete mode 100644 addons/api/app/adapters/role.js delete mode 100644 addons/api/app/adapters/scope.js delete mode 100644 addons/api/app/adapters/target.js delete mode 100644 addons/api/app/adapters/user.js delete mode 100644 addons/api/tests/unit/adapters/auth-method-test.js delete mode 100644 addons/api/tests/unit/adapters/group-test.js delete mode 100644 addons/api/tests/unit/adapters/host-catalog-test.js delete mode 100644 addons/api/tests/unit/adapters/host-set-test.js delete mode 100644 addons/api/tests/unit/adapters/host-test.js delete mode 100644 addons/api/tests/unit/adapters/role-test.js delete mode 100644 addons/api/tests/unit/adapters/scope-test.js delete mode 100644 addons/api/tests/unit/adapters/target-test.js delete mode 100644 addons/api/tests/unit/adapters/user-test.js diff --git a/addons/api/addon/adapters/application.js b/addons/api/addon/adapters/application.js index f0feb12d7..a2f4f3097 100644 --- a/addons/api/addon/adapters/application.js +++ b/addons/api/addon/adapters/application.js @@ -58,54 +58,8 @@ export default class ApplicationAdapter extends RESTAdapter.extend( */ namespace = get(config, 'api.namespace'); - /** - * Whether or not to prefix the URL with the resource scope. - * @type {boolean} - */ - hasScopePrefix = true; - // =methods - /** - * Prepends a scope to the URL prefix. Precedence is given to the ID passed - * via `adapterOptions.scopeID`. If this value isn't found in - * `adapterOptions`, we look to the `scope.scope_id` field on the snapshot, - * which most resources have. - * - * Note: scopes themselves never receive a scope URL prefix. - * - * @override - * @param {string} path - * @param {string} parentURL - * @param {string} modelName - * @param {string} id - * @param {object} snapshot - * @return {string} - */ - urlPrefix(path, parentURL, modelName, id, snapshot) { - const prefix = super.urlPrefix(...arguments); - let scopePath = ''; - let scopeID = ''; - if (snapshot && this.hasScopePrefix) { - // Not all snapshots have `attr` (such as array snapshots), - // so we do this sort of ugly check. - if (snapshot.attr) { - const parentScope = snapshot.attr('scope'); - if (parentScope) scopeID = parentScope.attr('scope_id'); - } - // Attempt to get scopeID from adapterOptions and fallback on its current - // value if it wasn't passed through options. - scopeID = getWithDefault(snapshot, 'adapterOptions.scopeID', scopeID); - } - // Only non-scope resources need a scope path, since scope resources - // aren't technically "scoped" the same way. - // Ensure a slash is added between prefix + scope path if needed. - if (scopeID && prefix.charAt(prefix.length - 1) !== '/') { - scopePath = `/scopes/${scopeID}`; - } - return `${prefix}${scopePath}`; - } - /** * Appends a custom method after a colon, if a method is passed via the * snapshot's `adapterOptions.method` field. diff --git a/addons/api/addon/adapters/auth-method.js b/addons/api/addon/adapters/auth-method.js deleted file mode 100644 index 8aa06ee68..000000000 --- a/addons/api/addon/adapters/auth-method.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class AuthMethodAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Auth methods use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/group.js b/addons/api/addon/adapters/group.js deleted file mode 100644 index 2a621c443..000000000 --- a/addons/api/addon/adapters/group.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class GroupAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Groups use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/host-catalog.js b/addons/api/addon/adapters/host-catalog.js deleted file mode 100644 index 78c1d9a03..000000000 --- a/addons/api/addon/adapters/host-catalog.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class HostCatalogAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Host catalogs use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/host-set.js b/addons/api/addon/adapters/host-set.js deleted file mode 100644 index d237c63d9..000000000 --- a/addons/api/addon/adapters/host-set.js +++ /dev/null @@ -1,18 +0,0 @@ -import ApplicationAdapter from './application'; -import { inject as service } from '@ember/service'; - -export default class HostSetAdapter extends ApplicationAdapter { - - // =services - - @service store; - - // =attributes - - /** - * Host sets use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/host.js b/addons/api/addon/adapters/host.js deleted file mode 100644 index d6b6ea5eb..000000000 --- a/addons/api/addon/adapters/host.js +++ /dev/null @@ -1,18 +0,0 @@ -import ApplicationAdapter from './application'; -import { inject as service } from '@ember/service'; - -export default class HostAdapter extends ApplicationAdapter { - - // =services - - @service store; - - // =attributes - - /** - * Hosts use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/role.js b/addons/api/addon/adapters/role.js deleted file mode 100644 index 036466645..000000000 --- a/addons/api/addon/adapters/role.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class RoleAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Roles use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/scope.js b/addons/api/addon/adapters/scope.js deleted file mode 100644 index 27aa02e57..000000000 --- a/addons/api/addon/adapters/scope.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class ScopeAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Scopes do not include a scope prefix. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/target.js b/addons/api/addon/adapters/target.js deleted file mode 100644 index 9d853cc7d..000000000 --- a/addons/api/addon/adapters/target.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class TargetAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Targets use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/addon/adapters/user.js b/addons/api/addon/adapters/user.js deleted file mode 100644 index 0d8242019..000000000 --- a/addons/api/addon/adapters/user.js +++ /dev/null @@ -1,13 +0,0 @@ -import ApplicationAdapter from './application'; - -export default class UserAdapter extends ApplicationAdapter { - - // =attributes - - /** - * Users use the new, unprefixed pathing style. - * @override - */ - hasScopePrefix = false; - -} diff --git a/addons/api/app/adapters/auth-method.js b/addons/api/app/adapters/auth-method.js deleted file mode 100644 index 02c325d6e..000000000 --- a/addons/api/app/adapters/auth-method.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/auth-method'; diff --git a/addons/api/app/adapters/group.js b/addons/api/app/adapters/group.js deleted file mode 100644 index bb77ff26c..000000000 --- a/addons/api/app/adapters/group.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/group'; diff --git a/addons/api/app/adapters/host-catalog.js b/addons/api/app/adapters/host-catalog.js deleted file mode 100644 index 00197a624..000000000 --- a/addons/api/app/adapters/host-catalog.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/host-catalog'; diff --git a/addons/api/app/adapters/host-set.js b/addons/api/app/adapters/host-set.js deleted file mode 100644 index 958a53f64..000000000 --- a/addons/api/app/adapters/host-set.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/host-set'; diff --git a/addons/api/app/adapters/host.js b/addons/api/app/adapters/host.js deleted file mode 100644 index 46bc96d3c..000000000 --- a/addons/api/app/adapters/host.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/host'; diff --git a/addons/api/app/adapters/role.js b/addons/api/app/adapters/role.js deleted file mode 100644 index f12325923..000000000 --- a/addons/api/app/adapters/role.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/role'; diff --git a/addons/api/app/adapters/scope.js b/addons/api/app/adapters/scope.js deleted file mode 100644 index 10878851f..000000000 --- a/addons/api/app/adapters/scope.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/scope'; diff --git a/addons/api/app/adapters/target.js b/addons/api/app/adapters/target.js deleted file mode 100644 index 4cb45ecc3..000000000 --- a/addons/api/app/adapters/target.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/target'; diff --git a/addons/api/app/adapters/user.js b/addons/api/app/adapters/user.js deleted file mode 100644 index 78f340b99..000000000 --- a/addons/api/app/adapters/user.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'api/adapters/user'; diff --git a/addons/api/tests/unit/adapters/application-test.js b/addons/api/tests/unit/adapters/application-test.js index a230c5848..9ec67f6f3 100644 --- a/addons/api/tests/unit/adapters/application-test.js +++ b/addons/api/tests/unit/adapters/application-test.js @@ -24,29 +24,6 @@ module('Unit | Adapter | application', function (hooks) { assert.equal(adapter.urlPrefix(), config.api.namespace); }); - test('it generates URL prefixes with optional `scopeID` from adapterOptions', function (assert) { - assert.expect(2); - const scopeID = 'global'; - const adapter = this.owner.lookup('adapter:application'); - const prefix = adapter.urlPrefix(null, null, null, null, { - adapterOptions: { scopeID } - }); - assert.ok(config.api.namespace); - assert.equal(prefix, `v1/scopes/${scopeID}`); - }); - - test('it does not prefix URLs with `scopeID` when hasScopePrefix is `false`', function (assert) { - assert.expect(2); - const scopeID = 'global'; - const adapter = this.owner.lookup('adapter:application'); - adapter.hasScopePrefix = false; - const prefix = adapter.urlPrefix(null, null, null, null, { - adapterOptions: { scopeID } - }); - assert.ok(config.api.namespace); - assert.equal(prefix, 'v1'); - }); - test('it generates correct default URL suffixes', function (assert) { assert.expect(1); const adapter = this.owner.lookup('adapter:application'); @@ -77,17 +54,17 @@ module('Unit | Adapter | application', function (hooks) { const adapter = this.owner.lookup('adapter:application'); // test URL generation for each request type... const findRecordURL = adapter.buildURL('user', '1', mockSnapshot, 'findRecord'); - assert.equal(findRecordURL, '/v1/scopes/o_1/users/1:my-custom-method'); + assert.equal(findRecordURL, '/v1/users/1:my-custom-method'); const findAllURL = adapter.buildURL('user', null, mockSnapshot, 'findAll'); - assert.equal(findAllURL, '/v1/scopes/o_1/users:my-custom-method'); + assert.equal(findAllURL, '/v1/users:my-custom-method'); const findBelongsToURL = adapter.buildURL('user', '2', mockSnapshot, 'findBelongsTo'); - assert.equal(findBelongsToURL, '/v1/scopes/o_1/users/2:my-custom-method'); + assert.equal(findBelongsToURL, '/v1/users/2:my-custom-method'); const createRecordURL = adapter.buildURL('user', null, mockSnapshot, 'createRecord'); - assert.equal(createRecordURL, '/v1/scopes/o_1/users:my-custom-method'); + assert.equal(createRecordURL, '/v1/users:my-custom-method'); const updateRecordURL = adapter.buildURL('user', '3', mockSnapshot, 'updateRecord'); - assert.equal(updateRecordURL, '/v1/scopes/o_1/users/3:my-custom-method'); + assert.equal(updateRecordURL, '/v1/users/3:my-custom-method'); const deleteRecordURL = adapter.buildURL('user', '4', mockSnapshot, 'deleteRecord'); - assert.equal(deleteRecordURL, '/v1/scopes/o_1/users/4:my-custom-method'); + assert.equal(deleteRecordURL, '/v1/users/4:my-custom-method'); }); test('it can request records through the store from a specified scope', async function (assert) { diff --git a/addons/api/tests/unit/adapters/auth-method-test.js b/addons/api/tests/unit/adapters/auth-method-test.js deleted file mode 100644 index 06921d04c..000000000 --- a/addons/api/tests/unit/adapters/auth-method-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | auth method', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:auth-method'); - assert.ok(adapter); - }); -}); diff --git a/addons/api/tests/unit/adapters/group-test.js b/addons/api/tests/unit/adapters/group-test.js deleted file mode 100644 index d39297843..000000000 --- a/addons/api/tests/unit/adapters/group-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | group', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:group'); - assert.ok(adapter); - }); -}); diff --git a/addons/api/tests/unit/adapters/host-catalog-test.js b/addons/api/tests/unit/adapters/host-catalog-test.js deleted file mode 100644 index 02fba945c..000000000 --- a/addons/api/tests/unit/adapters/host-catalog-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | host catalog', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:host-catalog'); - assert.ok(adapter); - }); -}); diff --git a/addons/api/tests/unit/adapters/host-set-test.js b/addons/api/tests/unit/adapters/host-set-test.js deleted file mode 100644 index 1ab6f7a63..000000000 --- a/addons/api/tests/unit/adapters/host-set-test.js +++ /dev/null @@ -1,22 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | host set', function(hooks) { - setupTest(hooks); - - test('it generates correct complete URLs', function (assert) { - assert.expect(2); - const hostCatalogID = 'hc_098'; - const method = 'my-custom-method'; - const mockSnapshot = { adapterOptions: { method } }; - const adapter = this.owner.lookup('adapter:host-set'); - // Without hostCatalogID... - let url = adapter.buildURL('host-set', null, mockSnapshot, 'findAll'); - assert.equal(url, '/v1/host-sets:my-custom-method'); - // With hostCatalogID... - mockSnapshot.adapterOptions.hostCatalogID = hostCatalogID; - url = adapter.buildURL('host-set', null, mockSnapshot, 'findAll'); - assert.equal(url, '/v1/host-sets:my-custom-method'); - }); - -}); diff --git a/addons/api/tests/unit/adapters/host-test.js b/addons/api/tests/unit/adapters/host-test.js deleted file mode 100644 index 1e45bbee7..000000000 --- a/addons/api/tests/unit/adapters/host-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | host', function(hooks) { - setupTest(hooks); - - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:host'); - assert.ok(adapter); - }); - -}); diff --git a/addons/api/tests/unit/adapters/role-test.js b/addons/api/tests/unit/adapters/role-test.js deleted file mode 100644 index 3d847ae20..000000000 --- a/addons/api/tests/unit/adapters/role-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | role', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:role'); - assert.ok(adapter); - }); -}); diff --git a/addons/api/tests/unit/adapters/scope-test.js b/addons/api/tests/unit/adapters/scope-test.js deleted file mode 100644 index f62f074a8..000000000 --- a/addons/api/tests/unit/adapters/scope-test.js +++ /dev/null @@ -1,19 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; - -module('Unit | Adapter | scope', function(hooks) { - setupTest(hooks); - setupMirage(hooks); - - test('it does not prefix URLs with `scopeID` for scope resources', function (assert) { - assert.expect(1); - const scopeID = 'global'; - const adapter = this.owner.lookup('adapter:scope'); - const prefix = adapter.urlPrefix(null, null, 'scope', null, { - adapterOptions: { scopeID } - }); - assert.equal(prefix, `v1`); - }); - -}); diff --git a/addons/api/tests/unit/adapters/target-test.js b/addons/api/tests/unit/adapters/target-test.js deleted file mode 100644 index bed673821..000000000 --- a/addons/api/tests/unit/adapters/target-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | target', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:target'); - assert.ok(adapter); - }); -}); diff --git a/addons/api/tests/unit/adapters/user-test.js b/addons/api/tests/unit/adapters/user-test.js deleted file mode 100644 index 0332ed354..000000000 --- a/addons/api/tests/unit/adapters/user-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Adapter | user', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let adapter = this.owner.lookup('adapter:user'); - assert.ok(adapter); - }); -}); diff --git a/ui/core/mirage/config.js b/ui/core/mirage/config.js index 754e5a880..aee4a5b3b 100644 --- a/ui/core/mirage/config.js +++ b/ui/core/mirage/config.js @@ -50,7 +50,7 @@ export default function() { this.del('/auth-methods/:id'); // Authenticate/deauthenticate routes - this.post('/scopes/:scope_id/auth-methods/:id_method', authHandler); + this.post('/auth-methods/:id_method', authHandler); this.post('/scopes/:id_method', deauthHandler); // IAM : Users @@ -250,16 +250,4 @@ export default function() { } return target.update(updatedAttrs); }); - - // Uncomment the following line and the Response import above - // Then change the response code to simulate error responses. - // this.get('/scopes/:scope_id/projects', () => new Response(505)); - - // Update error payload to simulate specific error responses. - // this.get('/scopes/:scope_id/projects', () => new Response(505, {}, { - // errors: [{ - // status: 505, - // message: 'HTTP version not supported.', - // }] - // })); } diff --git a/ui/core/mirage/route-handlers/auth.js b/ui/core/mirage/route-handlers/auth.js index ed2942c2f..a0e409646 100644 --- a/ui/core/mirage/route-handlers/auth.js +++ b/ui/core/mirage/route-handlers/auth.js @@ -23,16 +23,18 @@ import { Response } from 'miragejs'; // } // } -export function authHandler({ scopes }, request) { +export function authHandler({ scopes, authMethods }, request) { const payload = JSON.parse(request.requestBody); if (payload.credentials.login_name === 'error') { return new Response(400); } else { + const id = request.params.id_method.split(':')[0]; + const authMethod = authMethods.find(id); + const scope = scopes.find(authMethod.scopeId); const scopeAttrs = - this.serialize(scopes.find(request.params.scope_id)); - const scope = scopeAttrs; + this.serialize(scopes.find(scope.id)); return new Response(200, {}, { - scope, + scope: scopeAttrs, id: 'token123', token: 'thetokenstring', user_id: 'user123', diff --git a/ui/core/tests/unit/authenticators/password-test.js b/ui/core/tests/unit/authenticators/password-test.js index 8bf59c9ee..0ea67ee58 100644 --- a/ui/core/tests/unit/authenticators/password-test.js +++ b/ui/core/tests/unit/authenticators/password-test.js @@ -34,6 +34,8 @@ module('Unit | Authenticator | password', function (hooks) { const creds = { identification: 'foo', password: 'bar' }; const scope = { id: 'global' }; const authMethod = { id: 'paum_1234' }; + this.server.create('scope', { id: 'global', type: 'global' }); + this.server.create('auth-method', { id: authMethod.id, scopeId: 'global' }); await authenticator.authenticate( creds, null, From 50465449c35097dd9de386d5e5204c490e104f6a Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Thu, 10 Sep 2020 19:11:57 -0400 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20consolidate=20mo?= =?UTF-8?q?ck=20scope=20serialization=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/core/mirage/serializers/application.js | 22 ++++++++++++++++++++++ ui/core/mirage/serializers/auth-method.js | 19 +------------------ ui/core/mirage/serializers/group.js | 10 ---------- ui/core/mirage/serializers/host-catalog.js | 17 ----------------- ui/core/mirage/serializers/host-set.js | 10 ---------- ui/core/mirage/serializers/host.js | 19 +------------------ ui/core/mirage/serializers/role.js | 14 -------------- ui/core/mirage/serializers/target.js | 10 ---------- ui/core/mirage/serializers/user.js | 19 +------------------ 9 files changed, 25 insertions(+), 115 deletions(-) diff --git a/ui/core/mirage/serializers/application.js b/ui/core/mirage/serializers/application.js index 1c3821b4b..7bfbc7cd7 100644 --- a/ui/core/mirage/serializers/application.js +++ b/ui/core/mirage/serializers/application.js @@ -32,6 +32,12 @@ export default RestSerializer.extend({ return underscore(attr); }, + keyForRelationshipId(relationshipName) { + return `${this._container.inflector.singularize( + underscore(relationshipName) + )}_id`; + }, + /** * Serialize items into a root key `items`. * @return {object} @@ -43,6 +49,22 @@ export default RestSerializer.extend({ return json; }, + /** + * Serialize scope into the payload, if set. + * @param {object} model + * @return {object} + */ + _hashForModel(model) { + const json = RestSerializer.prototype._hashForModel.apply(this, arguments); + if (model.scope) { + json.scope = { + id: model.scope.id, + type: model.scope.type + }; + } + return json; + }, + /** * Adds a root to the payload, since `root: false` doesn't appear to affect * the normalize method. diff --git a/ui/core/mirage/serializers/auth-method.js b/ui/core/mirage/serializers/auth-method.js index 3d0c37374..cabe9ee7b 100644 --- a/ui/core/mirage/serializers/auth-method.js +++ b/ui/core/mirage/serializers/auth-method.js @@ -1,22 +1,5 @@ import ApplicationSerializer from './application'; -import { underscore } from '@ember/string'; export default ApplicationSerializer.extend({ - modelName: 'auth-method', - - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - - _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - json.scope = { - id: model.scope.id, - type: model.scope.type - }; - return json; - } - + modelName: 'auth-method' }); diff --git a/ui/core/mirage/serializers/group.js b/ui/core/mirage/serializers/group.js index ca0f9b138..2854224f8 100644 --- a/ui/core/mirage/serializers/group.js +++ b/ui/core/mirage/serializers/group.js @@ -10,19 +10,9 @@ export default ApplicationSerializer.extend({ )}_ids`; }, - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - _hashForModel(model) { const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); json.member_ids = model.memberIds; - json.scope = { - id: model.scope.id, - type: model.scope.type - }; return json; } diff --git a/ui/core/mirage/serializers/host-catalog.js b/ui/core/mirage/serializers/host-catalog.js index 34277f96e..bab3f7aa0 100644 --- a/ui/core/mirage/serializers/host-catalog.js +++ b/ui/core/mirage/serializers/host-catalog.js @@ -1,22 +1,5 @@ import ApplicationSerializer from './application'; -import { underscore } from '@ember/string'; export default ApplicationSerializer.extend({ modelName: 'host-catalog', - - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - - _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - json.scope = { - id: model.scope.id, - type: model.scope.type - }; - return json; - } - }); diff --git a/ui/core/mirage/serializers/host-set.js b/ui/core/mirage/serializers/host-set.js index 16d665375..bd680326e 100644 --- a/ui/core/mirage/serializers/host-set.js +++ b/ui/core/mirage/serializers/host-set.js @@ -10,20 +10,10 @@ export default ApplicationSerializer.extend({ )}_ids`; }, - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - _hashForModel(model) { const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); json.host_ids = model.hostIds; json.host_catalog_id = model.hostCatalogId; - json.scope = { - id: model.scope.id, - type: model.scope.type - }; return json; } diff --git a/ui/core/mirage/serializers/host.js b/ui/core/mirage/serializers/host.js index 4fb0353b4..ccd3994ca 100644 --- a/ui/core/mirage/serializers/host.js +++ b/ui/core/mirage/serializers/host.js @@ -1,22 +1,5 @@ import ApplicationSerializer from './application'; -import { underscore } from '@ember/string'; export default ApplicationSerializer.extend({ - modelName: 'host', - - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - - _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - json.scope = { - id: model.scope.id, - type: model.scope.type - }; - return json; - } - + modelName: 'host' }); diff --git a/ui/core/mirage/serializers/role.js b/ui/core/mirage/serializers/role.js index 47623471d..159bdc56c 100644 --- a/ui/core/mirage/serializers/role.js +++ b/ui/core/mirage/serializers/role.js @@ -1,18 +1,10 @@ import ApplicationSerializer from './application'; -import { underscore } from '@ember/string'; export default ApplicationSerializer.extend({ modelName: 'role', - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - _hashForModel(model) { const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - const serializedUsers = model.users.models.map(user => ({ scope_id: model.scope.id, id: user.id, @@ -24,12 +16,6 @@ export default ApplicationSerializer.extend({ type: 'group' })); json.principals = [ ...serializedUsers, ...serializedGroups ]; - - json.scope = { - id: model.scope.id, - type: model.scope.type - }; - return json; } }); diff --git a/ui/core/mirage/serializers/target.js b/ui/core/mirage/serializers/target.js index 8ced88cfc..c9c6935a0 100644 --- a/ui/core/mirage/serializers/target.js +++ b/ui/core/mirage/serializers/target.js @@ -10,12 +10,6 @@ export default ApplicationSerializer.extend({ )}_ids`; }, - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - _hashForModel(model) { const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); const { hostSets } = this.schema; @@ -24,10 +18,6 @@ export default ApplicationSerializer.extend({ const host_catalog_id = hostSet?.hostCatalog?.id; return { host_set_id, host_catalog_id }; }); - json.scope = { - id: model.scope.id, - type: model.scope.type - }; return json; } diff --git a/ui/core/mirage/serializers/user.js b/ui/core/mirage/serializers/user.js index 499b249eb..142cbf508 100644 --- a/ui/core/mirage/serializers/user.js +++ b/ui/core/mirage/serializers/user.js @@ -1,22 +1,5 @@ import ApplicationSerializer from './application'; -import { underscore } from '@ember/string'; export default ApplicationSerializer.extend({ - modelName: 'user', - - keyForRelationshipId(relationshipName) { - return `${this._container.inflector.singularize( - underscore(relationshipName) - )}_id`; - }, - - _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - json.scope = { - id: model.scope.id, - type: model.scope.type - }; - return json; - } - + modelName: 'user' });