Created
July 4, 2017 16:37
-
-
Save lifeart/b60136a7ead7f687ac670f8b8792650c to your computer and use it in GitHub Desktop.
Ember.adapters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import DS from 'ember-data'; | |
import Ember from 'ember'; | |
const {get, A, isArray} = Ember; | |
export default DS.JSONAPIAdapter.extend({ | |
host: 'http://mysite.com/data', | |
pathMap: { | |
'query:partner-video': 'wm2/get_videos', | |
'query:partner-payment': 'wm2/get_payments', | |
'findAll:partner-video': 'wm2/get_videos', | |
'updateRecord:partner-video': 'wm2/set_file_info', | |
'updateRecord:partner-channel': A(['wm2/channel_change','wm2/get_channels']), | |
'updateRecord:partner': A(['wm2/set_user_data','wm2/get_user_data','wm2/get_purses']), | |
'query:partner-channel': 'wm2/get_channels', | |
'query:video-category': 'wm2/cat_list', | |
'query:partner-ftp-server': 'wm2servers/ftp_listing', | |
'deleteRecord:partner-channel': 'wm2/channel_delete', | |
'queryRecord:partner': A(['wm2/get_user_data','wm2/get_purses']), | |
'findRecord:partner': A(['wm2/get_user_data','wm2/get_purses']), | |
'queryRecord:partner-ftp-auth': 'wm2servers/ftp_auth_data', | |
}, | |
_patchConfig(apiPath,query) { | |
let apis = isArray(apiPath)?apiPath:A([apiPath]); | |
let legacyQuery = apis.map(path=>{ | |
return [path,isArray(query)?query:[query]]; | |
}); | |
return { | |
dataType: 'json', | |
data: { | |
r: JSON.stringify(legacyQuery) | |
}, | |
xhrFields: { | |
withCredentials: true | |
}, | |
crossDomain: true | |
}; | |
}, | |
findAll(store, type, sinceToken, snapshotRecordArray) { | |
let apiPath = this.pathMap[`findAll:${type.modelName}`]; | |
const query = this.buildQuery(snapshotRecordArray); | |
if (sinceToken) { | |
query.since = sinceToken; | |
} | |
const url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll'); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,query)); | |
}, | |
updateRecord(store, type, snapshot) { | |
let apiPath = this.pathMap[`updateRecord:${type.modelName}`]; | |
var data = {}; | |
var serializer = store.serializerFor(type.modelName); | |
serializer.serializeIntoHash(data, type, snapshot); | |
var id = snapshot.id; | |
var url = this.buildURL(type.modelName, id, snapshot, 'updateRecord'); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,data)); | |
}, | |
deleteRecord(store, type, snapshot) { | |
let apiPath = this.pathMap[`deleteRecord:${type.modelName}`]; | |
var id = snapshot.id; | |
var url = this.buildURL(type.modelName, null, null, 'deleteRecord'); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,id)); | |
}, | |
findRecord(store, type, id, snapshot) { | |
let apiPath = this.pathMap[`findRecord:${type.modelName}`]; | |
var id = snapshot.id; | |
var url = this.buildURL(type.modelName, null, null, 'findRecord'); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,id)); | |
}, | |
queryRecord(store, type, query) { | |
let apiPath = this.pathMap[`queryRecord:${type.modelName}`]; | |
var url = this.buildURL(type.modelName, null, null, 'queryRecord', query); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,query)); | |
}, | |
query(store, type, query) { | |
let apiPath = this.pathMap[`query:${type.modelName}`]; | |
let url = this.buildURL(type.modelName, null, null, 'query', query); | |
return this.ajax(url, 'POST', this._patchConfig(apiPath,query)); | |
}, | |
_buildURL() { | |
return this.get('host'); | |
}, | |
ajaxOptions (url, type, options) { | |
// console.log('ajaxOptions'); | |
var hash = options || {}; | |
hash.url = url; | |
hash.type = type; | |
hash.dataType = 'json'; | |
hash.context = this; | |
var headers = get(this, 'headers'); | |
if (headers !== undefined) { | |
hash.beforeSend = function (xhr) { | |
Object.keys(headers).forEach(function (key) { | |
return xhr.setRequestHeader(key, headers[key]); | |
}); | |
}; | |
} | |
return hash; | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment