ember-resource 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,7 +4,7 @@ A version of the ember-resource javascript library packaged for the asset pipeli
4
4
 
5
5
  Original project is https://github.com/staugaard/ember-resource
6
6
 
7
- Version taken at commit 3a67468faf03a2866303b640e75daceb4a60ac11
7
+ Version taken at commit c34fa3bfadfe82481f5a97329734ed4394bb1dc0
8
8
 
9
9
 
10
10
  ## Installation
@@ -1,5 +1,5 @@
1
1
  module Ember
2
2
  module Resource
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -1,7 +1,5 @@
1
1
  (function(undefined) {
2
2
 
3
- window.Ember = window.Ember || window.SC;
4
-
5
3
  var expandSchema, expandSchemaItem, createSchemaProperties,
6
4
  mergeSchemas;
7
5
 
@@ -13,13 +11,6 @@
13
11
  return obj === Object(obj);
14
12
  }
15
13
 
16
- function K() {};
17
-
18
- Ember.Resource = Ember.Object.extend({
19
- resourcePropertyWillChange: K,
20
- resourcePropertyDidChange: K
21
- });
22
-
23
14
  Ember.Resource.deepSet = function(obj, path, value) {
24
15
  if (Ember.typeOf(path) === 'string') {
25
16
  Ember.Resource.deepSet(obj, path.split('.'), value);
@@ -561,25 +552,23 @@
561
552
  // resource; // another way to reference the resource object
562
553
  // }
563
554
  //
564
- var errorHandlerWithModel = function(errorHandler, resource) {
555
+ var errorHandlerWithContext = function(errorHandler, context) {
565
556
  return function() {
566
557
  var args = Array.prototype.slice.call(arguments, 0);
567
- args.push(resource);
568
- errorHandler.apply(resource, args);
558
+ args.push(context);
559
+ errorHandler.apply(context, args);
569
560
  };
570
561
  };
571
562
 
572
563
  Ember.Resource.ajax = function(options) {
564
+ if(window.stopHere) { debugger }
573
565
  options.dataType = options.dataType || 'json';
574
566
  options.type = options.type || 'GET';
575
567
 
576
- if (!options.error && Ember.Resource.errorHandler) {
577
- if (options.resource) {
578
- options.error = errorHandlerWithModel(Ember.Resource.errorHandler, options.resource);
579
- delete options.resource;
580
- } else {
581
- options.error = Ember.Resource.errorHandler;
582
- }
568
+ if(options.error) {
569
+ options.error = errorHandlerWithContext(options.error, options);
570
+ } else if(Em.Resource.errorHandler) {
571
+ options.error = errorHandlerWithContext(Ember.Resource.errorHandler, options);
583
572
  }
584
573
 
585
574
  return $.ajax(options);
@@ -754,6 +743,13 @@
754
743
  willSave: function() {},
755
744
  didSave: function() {},
756
745
 
746
+ fetched: function() {
747
+ if(!this._fetchDfd) {
748
+ this._fetchDfd = $.Deferred();
749
+ }
750
+ return this._fetchDfd;
751
+ },
752
+
757
753
  fetch: function() {
758
754
  if (!Ember.get(this, 'isFetchable')) return $.when();
759
755
 
@@ -770,6 +766,8 @@
770
766
 
771
767
  this.deferedFetch = Ember.Resource.ajax({
772
768
  url: url,
769
+ resource: this,
770
+ operation: 'read',
773
771
  success: function(json) {
774
772
  self.updateWithApiData(json);
775
773
  }
@@ -778,6 +776,7 @@
778
776
  this.deferedFetch.always(function() {
779
777
  self.didFetch.call(self);
780
778
  Ember.sendEvent(self, 'didFetch');
779
+ self.fetched().resolve();
781
780
  });
782
781
 
783
782
  return this.deferedFetch;
@@ -825,9 +824,11 @@
825
824
  if (Ember.get(this, 'isNew')) {
826
825
  ajaxOptions.type = 'POST';
827
826
  ajaxOptions.url = this.constructor.resourceURL();
827
+ ajaxOptions.operation = 'create';
828
828
  } else {
829
829
  ajaxOptions.type = 'PUT';
830
830
  ajaxOptions.url = this.resourceURL();
831
+ ajaxOptions.operation = 'update';
831
832
  }
832
833
 
833
834
  var self = this;
@@ -864,6 +865,8 @@
864
865
  Ember.set(this, 'resourceState', Ember.Resource.Lifecycle.DESTROYING);
865
866
  return Ember.Resource.ajax({
866
867
  type: 'DELETE',
868
+ resource: this,
869
+ operation: 'destroy',
867
870
  url: this.resourceURL(),
868
871
  resource: this
869
872
  }).done(function() {
@@ -939,15 +942,16 @@
939
942
 
940
943
  if (klass === this) {
941
944
  var instance;
942
- this.identityMap = this.identityMap || {};
945
+ this.identityMap = this.identityMap || new Ember.Resource.IdentityMap(this.identityMapLimit);
943
946
 
944
947
  var id = data.id || options.id;
945
948
  if (id && !options.skipIdentityMap) {
946
949
  id = id.toString();
947
- instance = this.identityMap[id];
950
+ instance = this.identityMap.get(id);
948
951
 
949
952
  if (!instance) {
950
- this.identityMap[id] = instance = this._super.call(this, { data: data });
953
+ instance = this._super.call(this, { data: data });
954
+ this.identityMap.put(id, instance);
951
955
  } else {
952
956
  instance.updateWithApiData(data);
953
957
  }
@@ -1023,6 +1027,10 @@
1023
1027
  classOptions.parse = options.parse;
1024
1028
  }
1025
1029
 
1030
+ if (options.identityMapLimit) {
1031
+ classOptions.identityMapLimit = options.identityMapLimit;
1032
+ }
1033
+
1026
1034
  klass.reopenClass(classOptions);
1027
1035
 
1028
1036
  return klass;
@@ -1063,24 +1071,31 @@
1063
1071
  Ember.ResourceCollection = Ember.ArrayProxy.extend({
1064
1072
  isEmberResourceCollection: true,
1065
1073
  type: Ember.required(),
1074
+
1075
+ fetched: function() {
1076
+ if(!this._fetchDfd) {
1077
+ this._fetchDfd = $.Deferred();
1078
+ }
1079
+ return this._fetchDfd;
1080
+ },
1081
+
1066
1082
  fetch: function() {
1067
- if (!Ember.get(this, 'isFetchable')) return $.when();
1083
+ if (!Ember.get(this, 'isFetchable') || Ember.get(this, 'prePopulated')) return $.when();
1068
1084
 
1069
- if (!this.prePopulated) {
1070
- var self = this;
1085
+ var self = this;
1071
1086
 
1072
- if (this.deferedFetch && !Ember.get(this, 'isExpired')) return this.deferedFetch;
1087
+ if (this.deferedFetch && !Ember.get(this, 'isExpired')) return this.deferedFetch;
1073
1088
 
1074
- Ember.sendEvent(self, 'willFetch');
1089
+ Ember.sendEvent(self, 'willFetch');
1075
1090
 
1076
- this.deferedFetch = this._fetch(function(json) {
1077
- Ember.set(self, 'content', self.parse(json));
1078
- });
1091
+ this.deferedFetch = this._fetch(function(json) {
1092
+ Ember.set(self, 'content', self.parse(json));
1093
+ });
1079
1094
 
1080
- this.deferedFetch.always(function() {
1081
- Ember.sendEvent(self, 'didFetch');
1082
- });
1083
- }
1095
+ this.deferedFetch.always(function() {
1096
+ Ember.sendEvent(self, 'didFetch');
1097
+ self.fetched().resolve();
1098
+ });
1084
1099
  return this.deferedFetch;
1085
1100
  },
1086
1101
  _resolveType: function() {
@@ -1093,6 +1108,8 @@
1093
1108
  this._resolveType();
1094
1109
  return Ember.Resource.ajax({
1095
1110
  url: this.resolveUrl(),
1111
+ resource: this,
1112
+ operation: 'read',
1096
1113
  success: callback
1097
1114
  });
1098
1115
  },
@@ -1131,7 +1148,7 @@
1131
1148
  }.property().cacheable(),
1132
1149
 
1133
1150
  autoFetchOnExpiry: function() {
1134
- if (Ember.get(this, 'isExpired') && Ember.get(this, 'hasArrayObservers')) {
1151
+ if (Ember.get(this, 'isAutoFetchable') && Ember.get(this, 'isExpired') && Ember.get(this, 'hasArrayObservers')) {
1135
1152
  this.fetch();
1136
1153
  }
1137
1154
  }.observes('isExpired', 'hasArrayObservers'),
@@ -1145,6 +1162,7 @@
1145
1162
 
1146
1163
  Ember.ResourceCollection.reopenClass({
1147
1164
  isEmberResourceCollection: true,
1165
+ identityMapLimit: Ember.Resource.IdentityMap.DEFAULT_IDENTITY_MAP_LIMIT * 5,
1148
1166
  create: function(options) {
1149
1167
  options = options || {};
1150
1168
  var content = options.content;
@@ -1155,10 +1173,10 @@
1155
1173
  var instance;
1156
1174
 
1157
1175
  if (!options.prePopulated && options.url) {
1158
- this.identityMap = this.identityMap || {};
1176
+ this.identityMap = this.identityMap || new Ember.Resource.IdentityMap(this.identityMapLimit);
1159
1177
  var identity = [options.type, options.url];
1160
- instance = this.identityMap[identity] || this._super.call(this, options);
1161
- this.identityMap[identity] = instance;
1178
+ instance = this.identityMap.get(identity) || this._super.call(this, options);
1179
+ this.identityMap.put(identity, instance);
1162
1180
  }
1163
1181
 
1164
1182
  if (!instance) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ember-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-26 00:00:00.000000000 Z
13
+ date: 2012-04-19 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Ember resource asset pipeline
16
16
  email:
@@ -48,7 +48,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
48
  version: '0'
49
49
  requirements: []
50
50
  rubyforge_project:
51
- rubygems_version: 1.8.16
51
+ rubygems_version: 1.8.21
52
52
  signing_key:
53
53
  specification_version: 3
54
54
  summary: Ember resource asset pipeline