Skip to content

Commit 169e9ba

Browse files
committed
mirage/crate: Replace categories property with relationship
1 parent d766a4f commit 169e9ba

File tree

6 files changed

+27
-7
lines changed

6 files changed

+27
-7
lines changed

mirage/factories/crate.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export default Factory.extend({
2323
updated_at: '2017-02-24T12:34:56Z',
2424

2525
badges: () => [],
26-
categories: () => [],
2726
keywords: () => [],
2827
versions: () => [],
2928
_extra_downloads: () => [],

mirage/fixtures/crates.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default [
3232
},
3333
},
3434
],
35-
categories: [],
35+
categoryIds: [],
3636
created_at: '2014-12-08T02:08:06Z',
3737
description: 'A high-level, Rust idiomatic wrapper around nanomsg.',
3838
documentation: 'https://github.com/thehydroimpulse/nanomsg.rs',

mirage/models/crate.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
import { Model } from 'ember-cli-mirage';
1+
import { Model, hasMany } from 'ember-cli-mirage';
22

3-
export default Model.extend({});
3+
export default Model.extend({
4+
categories: hasMany(),
5+
});

mirage/route-handlers/crates.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,14 @@ export function register(server) {
3838
let crate = schema.crates.find(crateId);
3939
if (!crate) return notFound();
4040

41-
let categories = schema.categories.all().filter(category => (crate.categories || []).indexOf(category.id) !== -1);
4241
let keywords = schema.keywords.all().filter(keyword => (crate.keywords || []).indexOf(keyword.id) !== -1);
4342
let versions = schema.versions
4443
.all()
4544
.filter(version => (crate.versions || []).indexOf(parseInt(version.id, 10)) !== -1);
4645

4746
return {
4847
...this.serialize(crate),
49-
...this.serialize(categories),
48+
...this.serialize(crate.categories),
5049
...this.serialize(keywords),
5150
...this.serialize(versions),
5251
};

mirage/serializers/crate.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,23 @@ export default BaseSerializer.extend({
3030
versions: `/api/v1/crates/${crate.id}/versions`,
3131
};
3232
},
33+
34+
getHashForResource() {
35+
let [hash, addToIncludes] = BaseSerializer.prototype.getHashForResource.apply(this, arguments);
36+
37+
if (Array.isArray(hash)) {
38+
for (let resource of hash) {
39+
this._adjust(resource);
40+
}
41+
} else {
42+
this._adjust(hash);
43+
}
44+
45+
return [hash, addToIncludes];
46+
},
47+
48+
_adjust(hash) {
49+
hash.categories = hash.category_ids;
50+
delete hash.category_ids;
51+
},
3352
});

tests/mirage/crates-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,13 @@ module('Mirage | Keywords', function(hooks) {
282282
test('includes related categories', async function(assert) {
283283
this.server.create('category', { category: 'no-std' });
284284
this.server.create('category', { category: 'cli' });
285-
this.server.create('crate', { name: 'rand', categories: ['no-std'] });
285+
this.server.create('crate', { name: 'rand', categoryIds: ['no-std'] });
286286

287287
let response = await fetch('/api/v1/crates/rand');
288288
assert.equal(response.status, 200);
289289

290290
let responsePayload = await response.json();
291+
assert.deepEqual(responsePayload.crate.categories, ['no-std']);
291292
assert.deepEqual(responsePayload.categories, [
292293
{
293294
id: 'no-std',

0 commit comments

Comments
 (0)