Skip to content

Commit

Permalink
ui: Fix token duplication bug (#7552)
Browse files Browse the repository at this point in the history
We need to detect whether an object is an ember-data snapshot or just a
plain object, and we where restricted from using `instanceof` due to
ember-data's `Snapshot` class being private.

We'd chosen to go with `constructor.name` instead, which seemed to work,
but when the javascript gets minifed the name of the contructor is also
minified and therefore is not what you are expecting.

This commit reverts to our original idea of checking for the existence
and type of the `.attributes` function, which is the function we require
within the conditional, and therefore is more reliable (if the function
doesn't exist it will error out during development aswell as production)
  • Loading branch information
johncowen authored and hashicorp-ci committed Apr 1, 2020
1 parent 2b04fe4 commit 5223a09
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion ui-v2/app/adapters/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,13 @@ export default Adapter.extend({
let unserialized, serialized;
const serializer = store.serializerFor(modelName);
// workable way to decide whether this is a snapshot
// essentially 'is attributable'.
// Snapshot is private so we can't do instanceof here
if (obj.constructor.name === 'Snapshot') {
// and using obj.constructor.name gets changed/minified
// during compilation so you can't rely on it
// checking for `attributes` being a function is more
// reliable as that is the thing we need to call
if (typeof obj.attributes === 'function') {
unserialized = obj.attributes();
serialized = serializer.serialize(obj, {});
} else {
Expand Down

0 comments on commit 5223a09

Please sign in to comment.