ajax.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import Ember from 'ember';
  2. export default Ember.Service.extend({
  3. get: function(recordOrProperty, recordProperty) {
  4. if (typeof recordOrProperty === 'string' || typeof recordProperty !== 'string') {
  5. recordProperty = null;
  6. }
  7. return this._ajax('GET', recordOrProperty, recordProperty);
  8. },
  9. post: function(recordOrProcedure, dataOrProcedure, data) {
  10. return this._ajax('POST', recordOrProcedure, dataOrProcedure, data);
  11. },
  12. _ajax: function(method, recordOrProcedure, dataOrProcedure, data) {
  13. // unpack arguments
  14. var record = null;
  15. var procedure = null;
  16. if (typeof recordOrProcedure === 'string') {
  17. procedure = recordOrProcedure;
  18. data = dataOrProcedure;
  19. } else {
  20. record = recordOrProcedure;
  21. procedure = dataOrProcedure;
  22. }
  23. var model = null;
  24. if (record) {
  25. model = this.store.modelFor(record.constructor);
  26. }
  27. // get adapter to be used for ajax
  28. // note: in case of Model being null this cheats adapterFor to return
  29. // 'adapter:application'. we are doing this, because for some reason
  30. // store.defaultAdapter fails to return django adapter
  31. var adapter = this.store.adapterFor(model || {typeKey: 'application'});
  32. // build api call URL
  33. var url = null;
  34. if (record) {
  35. url = this.buildRecordProcedureURL(adapter, model, record, procedure);
  36. } else {
  37. url = this.buildProcedureURL(adapter, procedure);
  38. }
  39. // return promise
  40. return adapter.misagoAjax(method, url, data || null);
  41. },
  42. buildRecordProcedureURL: function(adapter, model, record, procedure) {
  43. var url = adapter.buildURL(model.typeKey, record.id, record);
  44. var procedureSegment = Ember.String.decamelize(procedure).replace('_', '-');
  45. return url + procedureSegment + '/';
  46. },
  47. buildProcedureURL: function(adapter, procedure) {
  48. var url = adapter.buildURL(procedure);
  49. return this.unpluralizeUrlProcedure(url, procedure);
  50. },
  51. unpluralizeUrlProcedure: function(url, procedure) {
  52. // decamelize name and reverse path pluralization for type for procedure
  53. var decamelized = Ember.String.decamelize(procedure).replace('_', '-');
  54. var pluralized = Ember.String.pluralize(decamelized);
  55. return url.replace(pluralized, decamelized);
  56. }
  57. });