Skip to content

Commit

Permalink
Release v0.7.4
Browse files Browse the repository at this point in the history
  • Loading branch information
brettshollenberger committed Mar 5, 2014
2 parents 7e2e235 + a05b058 commit 7f5d303
Show file tree
Hide file tree
Showing 7 changed files with 207 additions and 133 deletions.
26 changes: 26 additions & 0 deletions README.md
Expand Up @@ -6,6 +6,32 @@ pattern persistence methods.

## Installation:

### Download

#### With Bower

If you have bower install just run

```javascript
bower install ngActiveResource --save-dev
```

#### Manually

To manually download head over to the [latest release](https://github.com/FacultyCreative/ngActiveResource/releases/latest) and hit the big 'source code' button.

### Install

Once downloaded you'll find everything you need in the `/dist` directory, include either file and add it as a dependency in your module.

```javascript
angular.module('app', ['ngActiveResource']);
```

> Note: Don't forget to include lodash.js before active-resource.js.
## Installation:

In your bower.json:

"ngActiveResource": "0.7.0"
Expand Down
4 changes: 2 additions & 2 deletions bower.json
@@ -1,6 +1,6 @@
{
"name": "ActiveResource",
"version": "0.7.1",
"version": "0.7.4",
"authors": [
"Brett Shollenberger <brett.shollenberger@gmail.com>"
],
Expand All @@ -14,7 +14,7 @@
"tests"
],
"dependencies": {
"active-support": "0.0.7",
"active-support": "latest",
"angular": "latest",
"lodash": "latest",
"async": "~0.2.5",
Expand Down
62 changes: 37 additions & 25 deletions dist/ng-active-resource.js
Expand Up @@ -517,7 +517,6 @@ angular.module('ActiveResource').provider('ARAPI', function () {
this.deleteURL = '';
this.updateURL = '';
this.set = function (url) {
console.log('The API#set method has recently changed its defaults. Please see https://github.com/FacultyCreative/ngActiveResource/pull/19 for details');
if (url.slice(-1) != '/')
url = url + '/';
this.createURL = url + plural;
Expand Down Expand Up @@ -1228,12 +1227,6 @@ angular.module('ActiveResource').provider('ARGET', function () {
return truth;
}
;
function appendSlashForQueryString(url) {
if (url.slice(-1) == '/')
return url;
return url + '/';
}
;
return function generateGET(instance, url, terms, options) {
var instanceAndTerms = transformSearchTermsToForeignKeys(instance, terms);
var associatedInstance, terms, propertyName;
Expand All @@ -1246,10 +1239,9 @@ angular.module('ActiveResource').provider('ARGET', function () {
if (queryableByParams(url, terms)) {
url = URLify(url, terms);
} else if (Object.keys(terms).length) {
url = url.replace(/\:\w+/, '');
url = url.replace(/\/\:\w+/, '').replace(/\:\w+/g, '');
config.params = terms;
}
url = appendSlashForQueryString(url);
return $http.get(url, config).then(function (response) {
var data = response.data;
if (propertyName && associatedInstance) {
Expand Down Expand Up @@ -1287,7 +1279,8 @@ angular.module('ActiveResource').provider('ARBase', function () {
'ARGET',
'ARMixin',
'URLify',
function (API, Collection, Association, Associations, Cache, Serializer, Eventable, Validations, $http, $q, $injector, deferred, GET, mixin, URLify) {
'ARHelpers',
function (API, Collection, Association, Associations, Cache, Serializer, Eventable, Validations, $http, $q, $injector, deferred, GET, mixin, URLify, Helpers) {
function Base() {
var _this = this;
_this.watchedCollections = [];
Expand Down Expand Up @@ -1777,7 +1770,6 @@ angular.module('ActiveResource').provider('ARBase', function () {
} else {
config = { params: queryterms };
}
url += '/';
return $http.delete(url, config).then(function (response) {
if (response.status == 200) {
removeFromWatchedCollections(instance);
Expand Down Expand Up @@ -1867,22 +1859,34 @@ angular.module('ActiveResource').provider('ARBase', function () {
this[name] = collection;
}
;
function removeOldHasManyInstances(hasManyCollection, newHasManyObjects) {
_.each(hasManyCollection, function (hasManyInstance) {
var found = _.where(newHasManyObjects, function (newHasManyObject) {
return hasManyInstance && hasManyInstance[primaryKey] == newHasManyObject[primaryKey];
});
if (!found.length)
_.remove(hasManyCollection, hasManyInstance);
function removeOldHasManyInstances(hasManyCollection, newHasManyObjects, primaryKeyName, primaryKeys) {
_.remove(hasManyCollection, function (hasManyInstance) {
var keep = _.include(primaryKeys, hasManyInstance[primaryKeyName]);
if (keep == false) {
delete hasManyInstance.constructor.cached[hasManyInstance[primaryKeyName]];
return true;
}
});
}
function createOrUpdateHasManyInstances(hasManyCollection, newHasManyObjects) {
function createOrUpdateHasManyInstances(hasManyCollection, newHasManyObjects, primaryKeyName, primaryKeys) {
var _first, _cons, _cached;
_first = _.first(hasManyCollection);
if (_first !== undefined)
_cons = _first.constructor;
if (_cons !== undefined)
_cached = _cons.cached;
_.each(newHasManyObjects, function (hasManyInstanceAttrs) {
var instance = _.where(hasManyCollection, hasManyInstanceAttrs);
if (!instance.length)
hasManyCollection.new(hasManyInstanceAttrs);
else
var instance;
if (_cached !== undefined) {
var search = {};
search[primaryKeyName] = hasManyInstanceAttrs[primaryKeyName];
instance = _cached.where(search);
}
if (instance && instance.length) {
instance[0].update(hasManyInstanceAttrs);
} else {
hasManyCollection.new(hasManyInstanceAttrs);
}
}, this);
}
// Receives an array of new plain-old Javascript objects, and the name of a collection
Expand All @@ -1900,8 +1904,16 @@ angular.module('ActiveResource').provider('ARBase', function () {
// collection#new.
function updateHasManyRelationship(newCollectionPOJOs, collectionName) {
var hasManyCollection = this[collectionName.camelize()];
removeOldHasManyInstances(hasManyCollection, newCollectionPOJOs);
createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs);
var _first = _.first(hasManyCollection);
if (!_first) {
return createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs);
}
var primaryKeyName = Helpers.getPrimaryKeyFor(_first);
var primaryKeys = _.chain(newCollectionPOJOs).map(function (o) {
return o[primaryKeyName];
}).compact().unique().value();
removeOldHasManyInstances(hasManyCollection, newCollectionPOJOs, primaryKeyName, primaryKeys);
createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs, primaryKeyName, primaryKeys);
}
;
function updateHasOneRelationship(association, name) {
Expand Down
2 changes: 1 addition & 1 deletion dist/ng-active-resource.min.js

Large diffs are not rendered by default.

65 changes: 43 additions & 22 deletions lib/angular-resource/base/base.js
Expand Up @@ -418,11 +418,6 @@ angular
return truth;
};

function appendSlashForQueryString(url) {
if (url.slice(-1) == '/') return url;
return url + '/';
};

return function generateGET(instance, url, terms, options) {
var instanceAndTerms = transformSearchTermsToForeignKeys(instance, terms);
var associatedInstance, terms, propertyName;
Expand All @@ -435,10 +430,9 @@ angular
if (queryableByParams(url, terms)) {
url = URLify(url, terms);
} else if(Object.keys(terms).length) {
url = url.replace(/\:\w+/, '');
url = url.replace(/\/\:\w+/, '').replace(/\:\w+/g, '');
config.params = terms;
}
url = appendSlashForQueryString(url);
return $http.get(url, config).then(function(response) {
var data = response.data;
if (propertyName && associatedInstance) {
Expand All @@ -460,10 +454,10 @@ angular
.provider('ARBase', function() {
this.$get = ['ARAPI', 'ARCollection', 'ARAssociation', 'ARAssociations',
'ARCache', 'ARSerializer', 'AREventable', 'ARValidations', '$http', '$q',
'$injector', 'ARDeferred', 'ARGET', 'ARMixin', 'URLify',
'$injector', 'ARDeferred', 'ARGET', 'ARMixin', 'URLify', 'ARHelpers',
function(API, Collection, Association, Associations,
Cache, Serializer, Eventable, Validations, $http, $q,
$injector, deferred, GET, mixin, URLify) {
$injector, deferred, GET, mixin, URLify, Helpers) {

function Base() {
var _this = this;
Expand Down Expand Up @@ -960,7 +954,6 @@ angular
} else {
config = {params: queryterms};
}
url += '/';
return $http.delete(url, config).then(function(response) {
if (response.status == 200) {
removeFromWatchedCollections(instance);
Expand Down Expand Up @@ -1045,20 +1038,37 @@ angular
if (collection) this[name] = collection;
};

function removeOldHasManyInstances(hasManyCollection, newHasManyObjects) {
_.each(hasManyCollection, function(hasManyInstance) {
var found = _.where(newHasManyObjects, function(newHasManyObject) {
return hasManyInstance && hasManyInstance[primaryKey] == newHasManyObject[primaryKey];
});
if (!found.length) _.remove(hasManyCollection, hasManyInstance);
function removeOldHasManyInstances(hasManyCollection, newHasManyObjects,
primaryKeyName, primaryKeys) {
_.remove(hasManyCollection, function(hasManyInstance) {
var keep = _.include(primaryKeys, hasManyInstance[primaryKeyName]);
if (keep == false) {
delete hasManyInstance.constructor.cached[hasManyInstance[primaryKeyName]];
return true;
}
});
}

function createOrUpdateHasManyInstances(hasManyCollection, newHasManyObjects) {
function createOrUpdateHasManyInstances(hasManyCollection, newHasManyObjects,
primaryKeyName, primaryKeys) {
var _first, _cons, _cached;

_first = _.first(hasManyCollection);
if (_first !== undefined) _cons = _first.constructor;
if (_cons !== undefined) _cached = _cons.cached;

_.each(newHasManyObjects, function(hasManyInstanceAttrs) {
var instance = _.where(hasManyCollection, hasManyInstanceAttrs);
if (!instance.length) hasManyCollection.new(hasManyInstanceAttrs);
else instance[0].update(hasManyInstanceAttrs);
var instance;
if (_cached !== undefined) {
var search = {};
search[primaryKeyName] = hasManyInstanceAttrs[primaryKeyName];
instance = _cached.where(search);
}
if (instance && instance.length) {
instance[0].update(hasManyInstanceAttrs);
} else {
hasManyCollection.new(hasManyInstanceAttrs);
}
}, this);
}

Expand All @@ -1077,9 +1087,20 @@ angular
// collection#new.
function updateHasManyRelationship(newCollectionPOJOs, collectionName) {
var hasManyCollection = this[collectionName.camelize()];
var _first = _.first(hasManyCollection);
if (!_first) {
return createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs);
}

var primaryKeyName = Helpers.getPrimaryKeyFor(_first);
var primaryKeys = _.chain(newCollectionPOJOs)
.map(function(o) { return o[primaryKeyName]; })
.compact()
.unique()
.value();

removeOldHasManyInstances(hasManyCollection, newCollectionPOJOs);
createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs);
removeOldHasManyInstances(hasManyCollection, newCollectionPOJOs, primaryKeyName, primaryKeys);
createOrUpdateHasManyInstances(hasManyCollection, newCollectionPOJOs, primaryKeyName, primaryKeys);
};

function updateHasOneRelationship(association, name) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "ActiveResource",
"version": "0.7.1",
"version": "0.7.4",
"description": "RESTful resource modeling",
"main": "index.js",
"author": "Brett Shollenberger <brett@facultycreative.com>",
Expand Down

0 comments on commit 7f5d303

Please sign in to comment.