From b8f4053c23b7dda8895e2e0135145fc0c9823c8f Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 22 Oct 2021 09:20:21 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20revert=20to=20quick=20ser?= =?UTF-8?q?ialization=20in=20bexpr-filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/api/mirage/helpers/bexpr-filter.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/addons/api/mirage/helpers/bexpr-filter.js b/addons/api/mirage/helpers/bexpr-filter.js index 8b12fe178..8674cfd58 100644 --- a/addons/api/mirage/helpers/bexpr-filter.js +++ b/addons/api/mirage/helpers/bexpr-filter.js @@ -1,7 +1,19 @@ import { makeEvaluator } from 'js-bexpr'; -import SessionSerializer from '../serializers/session'; +import { underscore } from '@ember/string'; -const serializer = new SessionSerializer(); +/** + * Because Mirage, a record cannot be serialized outside of a route handler + * context. Here is a quick and dirty attempt to serialize attribute names + * to underscore format. This is not entirely realistic, but may suffice. + */ +const quickSerialize = (item) => { + const json = item.toJSON(); + Object.keys(json).forEach((key) => { + const newKey = underscore(key); + json[newKey] = json[key]; + }); + return json; +}; /** * Creates a filter function that operates on a single object, which itself @@ -11,9 +23,9 @@ export default (expression) => { if (expression) { const evaluator = makeEvaluator(expression); // Since API query selectors begin with `/item`, the instance is wrapped. - return (item) => { - const json = serializer.serialize(item); - return evaluator({ item: json }); + return (record) => { + const item = quickSerialize(record); + return evaluator({ item }); }; } else { // If no expression was passed, always return true,