Skip to content

Commit

Permalink
Initial JSON-API Adapter/Serializer
Browse files Browse the repository at this point in the history
  • Loading branch information
wecc committed Jun 14, 2015
1 parent 8628ef2 commit 7b130b6
Show file tree
Hide file tree
Showing 10 changed files with 1,310 additions and 8 deletions.
6 changes: 4 additions & 2 deletions packages/ember-data/lib/adapters.js
Expand Up @@ -3,9 +3,11 @@
*/

import FixtureAdapter from "ember-data/adapters/fixture-adapter";
import JSONAPIAdapter from "ember-data/adapters/json-api-adapter";
import RESTAdapter from "ember-data/adapters/rest-adapter";

export {
RESTAdapter,
FixtureAdapter
FixtureAdapter,
JSONAPIAdapter,
RESTAdapter
};
84 changes: 84 additions & 0 deletions packages/ember-data/lib/adapters/json-api-adapter.js
@@ -0,0 +1,84 @@
/**
@module ember-data
*/

import RESTAdapter from "ember-data/adapters/rest-adapter";

/**
@class JSONAPIAdapter
@constructor
@namespace DS
@extends DS.RESTAdapter
*/
export default RESTAdapter.extend({
defaultSerializer: '-json-api',

/**
@method ajaxOptions
@private
@param {String} url
@param {String} type The request type GET, POST, PUT, DELETE etc.
@param {Object} options
@return {Object}
*/
ajaxOptions: function(url, type, options) {
let hash = this._super(...arguments);

if (hash.contentType) {
hash.contentType = 'application/vnd.api+json';
}

let beforeSend = hash.beforeSend;
hash.beforeSend = function(xhr) {
xhr.setRequestHeader('Accept', 'application/vnd.api+json');
if (beforeSend) {
beforeSend(xhr);
}
};

return hash;
},

/**
@method findMany
@param {DS.Store} store
@param {DS.Model} type
@param {Array} ids
@param {Array} snapshots
@return {Promise} promise
*/
findMany: function(store, type, ids, snapshots) {
var url = this.buildURL(type.modelName, ids, snapshots, 'findMany');
return this.ajax(url, 'GET', { data: { filter: { id: ids.join(',') } } });
},

/**
@method pathForType
@param {String} modelName
@return {String} path
**/
pathForType: function(modelName) {
var dasherized = Ember.String.dasherize(modelName);
return Ember.String.pluralize(dasherized);
},

// TODO: Remove this once we have a better way to override HTTP verbs.
/**
@method updateRecord
@param {DS.Store} store
@param {DS.Model} type
@param {DS.Snapshot} snapshot
@return {Promise} promise
*/
updateRecord: function(store, type, snapshot) {
var data = {};
var serializer = store.serializerFor(type.modelName);

serializer.serializeIntoHash(data, type, snapshot, { includeId: true });

var id = snapshot.id;
var url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');

return this.ajax(url, 'PATCH', { data: data });
}
});
9 changes: 7 additions & 2 deletions packages/ember-data/lib/initializers/store.js
@@ -1,5 +1,5 @@
import {JSONSerializer, RESTSerializer} from "ember-data/serializers";
import {RESTAdapter} from "ember-data/adapters";
import { JSONAPISerializer, JSONSerializer, RESTSerializer } from "ember-data/serializers";
import { JSONAPIAdapter, RESTAdapter } from "ember-data/adapters";
import ContainerProxy from "ember-data/system/container-proxy";

/**
Expand Down Expand Up @@ -37,4 +37,9 @@ export default function initializeStore(registry, application) {
registry.register('serializer:-default', JSONSerializer);
registry.register('serializer:-rest', RESTSerializer);
registry.register('adapter:-rest', RESTAdapter);

if (Ember.FEATURES.isEnabled('ds-new-serializer-api')) {
registry.register('adapter:-json-api', JSONAPIAdapter);
registry.register('serializer:-json-api', JSONAPISerializer);
}
}
17 changes: 13 additions & 4 deletions packages/ember-data/lib/main.js
Expand Up @@ -51,12 +51,16 @@ import {
import ManyArray from "ember-data/system/many-array";
import RecordArrayManager from "ember-data/system/record-array-manager";
import {
RESTAdapter,
FixtureAdapter
FixtureAdapter,
JSONAPIAdapter,
RESTAdapter
} from "ember-data/adapters";
import BuildURLMixin from "ember-data/adapters/build-url-mixin";
import JSONSerializer from "ember-data/serializers/json-serializer";
import RESTSerializer from "ember-data/serializers/rest-serializer";
import {
JSONAPISerializer,
JSONSerializer,
RESTSerializer
} from "ember-data/serializers";
import "ember-inflector";
import EmbeddedRecordsMixin from "ember-data/serializers/embedded-records-mixin";
import {
Expand Down Expand Up @@ -114,6 +118,11 @@ DS.BuildURLMixin = BuildURLMixin;
DS.RESTSerializer = RESTSerializer;
DS.JSONSerializer = JSONSerializer;

if (Ember.FEATURES.isEnabled('ds-new-serializer-api')) {
DS.JSONAPIAdapter = JSONAPIAdapter;
DS.JSONAPISerializer = JSONAPISerializer;
}

DS.Transform = Transform;
DS.DateTransform = DateTransform;
DS.StringTransform = StringTransform;
Expand Down
6 changes: 6 additions & 0 deletions packages/ember-data/lib/serializers.js
@@ -1,7 +1,13 @@
/**
@module ember-data
*/

import JSONAPISerializer from "ember-data/serializers/json-api-serializer";
import JSONSerializer from "ember-data/serializers/json-serializer";
import RESTSerializer from "ember-data/serializers/rest-serializer";

export {
JSONAPISerializer,
JSONSerializer,
RESTSerializer
};

0 comments on commit 7b130b6

Please sign in to comment.