Skip to content

Commit

Permalink
ember-rest v0.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
dgeb committed Apr 3, 2012
1 parent 3795044 commit b5f24ec
Showing 1 changed file with 38 additions and 9 deletions.
47 changes: 38 additions & 9 deletions app/assets/javascripts/vendor/ember-rest.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
Ember-REST.js
Ember-REST.js 0.1.1
A simple library for RESTful resources in Ember.js
Expand Down Expand Up @@ -65,7 +65,7 @@ if (Ember.ResourceAdapter === undefined) {
* `deserializeProperty(prop, value)`
* `validate()`
*/
Ember.Resource = Ember.Object.extend({
Ember.Resource = Ember.Object.extend(Ember.ResourceAdapter, Ember.Copyable, {
resourceIdField: 'id',
resourceUrl: Ember.required(),

Expand All @@ -87,6 +87,20 @@ Ember.Resource = Ember.Object.extend({
}
},

/**
Create a copy of this resource
Needed to implement Ember.Copyable
REQUIRED: `resourceProperties`
*/
copy: function(deep) {
var c = this.constructor.create();
c.duplicateProperties(this);
c.set(this.resourceIdField, this.get(this.resourceIdField));
return c;
},

/**
Generate this resource's JSON representation
Expand Down Expand Up @@ -224,7 +238,7 @@ Ember.Resource = Ember.Object.extend({
_resourceId: function() {
return this.get(this.resourceIdField);
}
}, Ember.ResourceAdapter);
});

/**
A controller for RESTful resources
Expand All @@ -236,7 +250,7 @@ Ember.Resource = Ember.Object.extend({
* `resourceUrl` -- (optional) the base url of the resource (e.g. '/contacts/active');
will default to the `resourceUrl` for `resourceType`
*/
Ember.ResourceController = Ember.ArrayController.extend({
Ember.ResourceController = Ember.ArrayController.extend(Ember.ResourceAdapter, {
resourceType: Ember.required(),

/**
Expand Down Expand Up @@ -292,9 +306,24 @@ Ember.ResourceController = Ember.ArrayController.extend({
the `resourceUrl` specified for `resourceType`.
*/
_resourceUrl: function() {
if (this.resourceUrl === undefined)
return this.get('resourceType').prototype.resourceUrl;
else
return this.resourceUrl;
if (this.resourceUrl === undefined) {
// If `resourceUrl` is not defined for this controller, there are a couple
// ways to retrieve it from the resource. If a resource has been instantiated,
// then it can be retrieved from the resource's prototype. Otherwise, we need
// to loop through the mixins for the prototype to get the resourceUrl.
var rt = this.get('resourceType');
if (rt.prototype.resourceUrl === undefined) {
for (var i = rt.PrototypeMixin.mixins.length - 1; i >= 0; i--) {
var m = rt.PrototypeMixin.mixins[i];
if (m.properties !== undefined && m.properties.resourceUrl !== undefined) {
return m.properties.resourceUrl;
}
}
}
else {
return rt.prototype.resourceUrl;
}
}
return this.resourceUrl;
}
}, Ember.ResourceAdapter);
});

0 comments on commit b5f24ec

Please sign in to comment.