Skip to content

Instantly share code, notes, and snippets.

@runspired
Forked from sukima/adapters.bar.js
Last active November 15, 2018 19:26
Show Gist options
  • Save runspired/72a6684d466fadcf3993b30dc8840aca to your computer and use it in GitHub Desktop.
Save runspired/72a6684d466fadcf3993b30dc8840aca to your computer and use it in GitHub Desktop.
Ember data fu
import { run, later } from '@ember/runloop';
import { reject } from 'rsvp';
import DS from 'ember-data';
const { Adapter } = DS;
const OUTCOMES = {
RESOLVE: 1, // Confirm that ember-data is working as expected
REJECT: 2, // ember-data should fail but does not (isRejected === false)
ERROR: 3 // ember-data does fail as expected (isRejected === true)
};
// Change this variable to see the different situations.
let FAIL_MODE = 0;
async function notImplemented(methodName) {
return function() {
console.log(methodName, ...arguments);
throw new Error(`${methodName} not implemented`);
};
}
export default Adapter.extend({
findRecord(_, __, id) {
return new Promise(resolve => later(() => run(resolve), 2000)).then(() => {
FAIL_MODE++;
switch (FAIL_MODE) {
case OUTCOMES.RESOLVE:
return { data: { type: 'bar', id } };
case OUTCOMES.REJECT:
return reject('Not Found');
case OUTCOMES.ERROR:
throw new Error('Bork');
}
});
},
createRecord: notImplemented('createRecord'),
updateRecord: notImplemented('updaterecord'),
deleteRecord: notImplemented('deleteRecord'),
findAll: notImplemented('findAll'),
query: notImplemented('query'),
queryRecord: notImplemented('queryrecord')
});
import DS from 'ember-data';
const { Adapter } = DS;
async function notImplemented(methodName) {
return function() {
console.log(methodName, ...arguments);
throw new Error(`${methodName} not implemented`);
};
}
export default Adapter.extend({
async findAll() {
return {
data: [
{
type: 'foo-1',
id: '1',
attributes: {},
relationships: {
bar: { data: { type: 'bar-1', id: '1' } }
}
},
{
type: 'foo-1',
id: '2',
attributes: {},
relationships: {
bar: { data: { type: 'bar-1', id: '2' } }
}
},
{
type: 'foo-1',
id: '3',
attributes: {},
relationships: {
bar: { data: { type: 'bar-1', id: '3' } }
}
}
]
};
},
createRecord: notImplemented('createRecord'),
updateRecord: notImplemented('updaterecord'),
deleteRecord: notImplemented('deleteRecord'),
findRecord: notImplemented('findRecord'),
query: notImplemented('query'),
queryRecord: notImplemented('queryrecord')
});
import DS from 'ember-data';
const { Adapter } = DS;
async function notImplemented(methodName) {
return function() {
console.log(methodName, ...arguments);
throw new Error(`${methodName} not implemented`);
};
}
export default Adapter.extend({
async findAll() {
return {
data: [
{
type: 'foo',
id: '1',
relationships: {
bar: { data: { type: 'bar', id: '1' } }
}
},
{
type: 'foo',
id: '2',
relationships: {
bar: { data: { type: 'bar', id: '2' } }
}
},
{
type: 'foo',
id: '3',
relationships: {
bar: { data: { type: 'bar', id: '3' } }
}
}
]
};
},
createRecord: notImplemented('createRecord'),
updateRecord: notImplemented('updaterecord'),
deleteRecord: notImplemented('deleteRecord'),
findRecord: notImplemented('findRecord'),
query: notImplemented('query'),
queryRecord: notImplemented('queryrecord')
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
bar: belongsTo('bar-1')
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
bar: belongsTo('bar')
});
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.store.findAll('foo-1');
}
});
import JSONAPISerializer from 'ember-data/serializers/json-api';
export default JSONAPISerializer.extend({
normalizeResponse(_, __, payload) {
return payload;
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment