@ -1,4 +1,5 @@
import { get } from '@ember/object' ;
import { get } from '@ember/object' ;
import { isEmpty } from '@ember/utils' ;
export default function ( foreignKey , nspaceKey , partitionKey , hash = JSON . stringify ) {
export default function ( foreignKey , nspaceKey , partitionKey , hash = JSON . stringify ) {
return function ( primaryKey , slugKey , foreignKeyValue , nspaceValue , partitionValue ) {
return function ( primaryKey , slugKey , foreignKeyValue , nspaceValue , partitionValue ) {
@ -10,15 +11,24 @@ export default function (foreignKey, nspaceKey, partitionKey, hash = JSON.string
) ;
) ;
}
}
const slugKeys = slugKey . split ( ',' ) ;
const slugKeys = slugKey . split ( ',' ) ;
const slugValues = slugKeys . map ( function ( slugKey ) {
const slugValues = slugKeys
. map ( function ( slugKey ) {
const slug = get ( item , slugKey ) ;
const slug = get ( item , slugKey ) ;
if ( slug == null || slug . length < 1 ) {
const isSlugEmpty = isEmpty ( slug ) ;
if ( isSlugEmpty ) {
// PeerName should be optional as part of id
if ( slugKey === 'PeerName' ) {
return ;
}
throw new Error (
throw new Error (
` Unable to create fingerprint, missing slug. Looking for value in \` ${ slugKey } \` got \` ${ slug } \` `
` Unable to create fingerprint, missing slug. Looking for value in \` ${ slugKey } \` got \` ${ slug } \` `
) ;
) ;
}
}
return slug ;
return slug ;
} ) ;
} )
. compact ( ) ;
// This ensures that all data objects have a Namespace and a Partition
// This ensures that all data objects have a Namespace and a Partition
// value set, even in OSS.
// value set, even in OSS.
if ( typeof item [ nspaceKey ] === 'undefined' ) {
if ( typeof item [ nspaceKey ] === 'undefined' ) {