- Make the discovery information be preloaded via a bootstrap.js file before angular runs

- Have ApiService generate all the api methods specified by the API discovery information
- Change all call sites (except for a select few when it does not make sense) to use ApiService
This commit is contained in:
Joseph Schorr 2013-12-26 17:45:16 -05:00
parent 1904e6d0c8
commit 56bb46ffb2
6 changed files with 423 additions and 212 deletions

View file

@ -67,14 +67,15 @@ function RepoListCtrl($scope, Restangular, UserService, ApiService) {
}
var options = {'public': false, 'sort': true, 'namespace': namespace};
$scope.user_repositories = ApiService.at('repository').withOptions(options).get(function(resp) {
$scope.user_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
return resp.repositories;
});
};
var loadPublicRepos = function() {
var options = {'public': true, 'private': false, 'sort': true, 'limit': 10};
$scope.public_repositories = ApiService.at('repository').withOptions(options).get(function(resp) {
$scope.public_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
return resp.repositories;
});
};
@ -118,7 +119,7 @@ function LandingCtrl($scope, UserService, ApiService) {
}
var options = {'limit': 4, 'public': false, 'sort': true, 'namespace': namespace };
$scope.my_repositories = ApiService.at('repository').withOptions(options).get(function(resp) {
$scope.my_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
return resp.repositories;
});
};
@ -169,7 +170,8 @@ function RepoCtrl($scope, Restangular, ApiService, $routeParams, $rootScope, $lo
};
$scope.loadImageChanges = function(image) {
$scope.currentImageChangeResource = ApiService.at('repository', namespace, name, 'image', image.id, 'changes').get(function(ci) {
var params = {'repository': namespace + '/' + name, 'image_id': image.id};
$scope.currentImageChangeResource = ApiService.getImageChangesAsResource(params).get(function(ci) {
$scope.currentImageChanges = ci;
});
};
@ -240,8 +242,9 @@ function RepoCtrl($scope, Restangular, ApiService, $routeParams, $rootScope, $lo
};
var fetchRepository = function() {
var params = {'repository': namespace + '/' + name};
$rootScope.title = 'Loading Repository...';
$scope.repository = ApiService.at('repository', namespace, name).get(function(repo) {
$scope.repository = ApiService.getRepoAsResource(params).get(function(repo) {
// Set the repository object.
$scope.repo = repo;
@ -283,6 +286,7 @@ function RepoCtrl($scope, Restangular, ApiService, $routeParams, $rootScope, $lo
};
var getBuildInfo = function(repo) {
// Note: We use restangular manually here because we need to turn off the loading bar.
var buildInfo = Restangular.one('repository/' + repo.namespace + '/' + repo.name + '/build/');
buildInfo.withHttpConfig({
'ignoreLoadingBar': true
@ -312,7 +316,8 @@ function RepoCtrl($scope, Restangular, ApiService, $routeParams, $rootScope, $lo
};
var listImages = function() {
$scope.imageHistory = ApiService.at('repository', namespace, name, 'image').get(function(resp) {
var params = {'repository': namespace + '/' + name};
$scope.imageHistory = ApiService.listRepositoryImagesAsResource(params).get(function(resp) {
// Dispose of any existing tree.
if ($scope.tree) {
$scope.tree.dispose();
@ -443,8 +448,8 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
'friendlyName': $scope.newToken.friendlyName
};
var permissionPost = Restangular.one('repository/' + namespace + '/' + name + '/tokens/');
permissionPost.customPOST(friendlyName).then(function(newToken) {
var params = {'repository': namespace + '/' + name};
ApiService.createToken(friendlyName, params).then(function(newToken) {
$scope.newToken.friendlyName = '';
$scope.createTokenForm.$setPristine();
$scope.tokens[newToken.code] = newToken;
@ -452,8 +457,12 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
};
$scope.deleteToken = function(tokenCode) {
var deleteAction = Restangular.one('repository/' + namespace + '/' + name + '/tokens/' + tokenCode);
deleteAction.customDELETE().then(function() {
var params = {
'repository': namespace + '/' + name,
'code': tokenCode
};
ApiService.deleteToken(null, params).then(function() {
delete $scope.tokens[tokenCode];
});
};
@ -463,8 +472,12 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
'role': newAccess
};
var deleteAction = Restangular.one('repository/' + namespace + '/' + name + '/tokens/' + tokenCode);
deleteAction.customPUT(role).then(function(updated) {
var params = {
'repository': namespace + '/' + name,
'code': tokenCode
};
ApiService.changeToken(role, params).then(function(updated) {
$scope.tokens[updated.code] = updated;
});
};
@ -486,8 +499,12 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
var visibility = {
'visibility': newAccess
};
var visibilityPost = Restangular.one('repository/' + namespace + '/' + name + '/changevisibility');
visibilityPost.customPOST(visibility).then(function() {
var params = {
'repository': namespace + '/' + name
};
ApiService.changeRepoVisibility(visibility, params).then(function() {
$scope.repo.is_public = newAccess == 'public';
}, function() {
$('#cannotchangeModal').modal({});
@ -501,8 +518,11 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
$scope.deleteRepo = function() {
$('#confirmdeleteModal').modal('hide');
var deleteAction = Restangular.one('repository/' + namespace + '/' + name);
deleteAction.customDELETE().then(function() {
var params = {
'repository': namespace + '/' + name
};
ApiService.deleteRepository(null, params).then(function() {
$scope.repo = null;
setTimeout(function() {
@ -514,8 +534,12 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
};
$scope.loadWebhooks = function() {
var params = {
'repository': namespace + '/' + name
};
$scope.newWebhook = {};
$scope.webhooksResource = ApiService.at('repository', namespace, name, 'webhook').get(function(resp) {
$scope.webhooksResource = ApiService.listWebhooksAsResource(params).get(function(resp) {
$scope.webhooks = resp.webhooks;
return $scope.webhooks;
});
@ -526,8 +550,11 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
return;
}
var newWebhook = Restangular.one('repository/' + namespace + '/' + name + '/webhook/');
newWebhook.customPOST($scope.newWebhook).then(function(resp) {
var params = {
'repository': namespace + '/' + name
};
ApiService.createWebhook($scope.newWebhook, params).then(function(resp) {
$scope.webhooks.push(resp);
$scope.newWebhook.url = '';
$scope.createWebhookForm.$setPristine();
@ -535,15 +562,22 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
};
$scope.deleteWebhook = function(webhook) {
var deleteWebhookReq = Restangular.one('repository/' + namespace + '/' + name + '/webhook/' + webhook.public_id);
deleteWebhookReq.customDELETE().then(function(resp) {
var params = {
'repository': namespace + '/' + name,
'public_id': webhook.public_id
};
ApiService.deleteWebhook(null, params).then(function(resp) {
$scope.webhooks.splice($scope.webhooks.indexOf(webhook), 1);
});
};
var fetchTokens = function() {
var tokensFetch = Restangular.one('repository/' + namespace + '/' + name + '/tokens/');
tokensFetch.get().then(function(resp) {
var params = {
'repository': namespace + '/' + name
};
ApiService.listRepoTokens(null, params).then(function(resp) {
$scope.tokens = resp.tokens;
}, function() {
$scope.tokens = null;
@ -560,7 +594,11 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
};
var fetchRepository = function() {
$scope.repository = ApiService.at('repository', namespace, name).get(function(repo) {
var params = {
'repository': namespace + '/' + name
};
$scope.repository = ApiService.getRepoAsResource(params).get(function(repo) {
$scope.repo = repo;
$rootScope.title = 'Settings - ' + namespace + '/' + name;
@ -580,7 +618,7 @@ function RepoAdminCtrl($scope, Restangular, ApiService, $routeParams, $rootScope
fetchRepository();
}
function UserAdminCtrl($scope, $timeout, $location, Restangular, PlanService, UserService, KeyService, $routeParams) {
function UserAdminCtrl($scope, $timeout, $location, ApiService, PlanService, UserService, KeyService, $routeParams) {
if ($routeParams['migrate']) {
$('#migrateTab').tab('show')
}
@ -645,8 +683,7 @@ function UserAdminCtrl($scope, $timeout, $location, Restangular, PlanService, Us
'plan': $scope.org.plan.stripeId
};
var convertAccount = Restangular.one('user/convert');
convertAccount.customPOST(data).then(function(resp) {
ApiService.convertUserToOrganization(data).then(function(resp) {
UserService.load();
$location.path('/');
}, function(resp) {
@ -663,8 +700,8 @@ function UserAdminCtrl($scope, $timeout, $location, Restangular, PlanService, Us
$('.form-change-pw').popover('hide');
$scope.updatingUser = true;
$scope.changePasswordSuccess = false;
var changePasswordPost = Restangular.one('user/');
changePasswordPost.customPUT($scope.user).then(function() {
ApiService.changeUserDetails($scope.user).then(function() {
$scope.updatingUser = false;
$scope.changePasswordSuccess = true;
@ -686,7 +723,7 @@ function UserAdminCtrl($scope, $timeout, $location, Restangular, PlanService, Us
};
}
function ImageViewCtrl($scope, $routeParams, $rootScope, $timeout, ApiService, Restangular) {
function ImageViewCtrl($scope, $routeParams, $rootScope, $timeout, ApiService) {
var namespace = $routeParams.namespace;
var name = $routeParams.name;
var imageid = $routeParams.image;
@ -742,7 +779,12 @@ function ImageViewCtrl($scope, $routeParams, $rootScope, $timeout, ApiService, R
};
var fetchImage = function() {
$scope.image = ApiService.at('repository', namespace, name, 'image', imageid).get(function(image) {
var params = {
'repository': namespace + '/' + name,
'image_id': imageid
};
$scope.image = ApiService.getImageAsResource(params).get(function(image) {
$scope.repo = {
'name': name,
'namespace': namespace
@ -762,8 +804,12 @@ function ImageViewCtrl($scope, $routeParams, $rootScope, $timeout, ApiService, R
};
var fetchChanges = function() {
var changesFetch = Restangular.one('repository/' + namespace + '/' + name + '/image/' + imageid + '/changes');
changesFetch.get().then(function(changes) {
var params = {
'repository': namespace + '/' + name,
'image_id': imageid
};
ApiService.getImageChanges(null, params).then(function(changes) {
var combinedChanges = [];
var addCombinedChanges = function(c, kind) {
for (var i = 0; i < c.length; ++i) {
@ -791,7 +837,7 @@ function V1Ctrl($scope, $location, UserService) {
UserService.updateUserIn($scope);
}
function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangular, PlanService) {
function NewRepoCtrl($scope, $location, $http, $timeout, UserService, ApiService, PlanService) {
UserService.updateUserIn($scope);
$scope.repo = {
@ -822,8 +868,7 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
if (isUserNamespace) {
// Load the user's subscription information in case they want to create a private
// repository.
var checkPrivateAllowed = Restangular.one('user/private');
checkPrivateAllowed.get().then(function(resp) {
ApiService.getUserPrivateCount().then(function(resp) {
if (resp.privateCount + 1 > resp.reposAllowed) {
PlanService.getMinimumPlan(resp.privateCount + 1, false, function(minimum) {
$scope.planRequired = minimum;
@ -836,8 +881,7 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
$scope.checkingPlan = false;
});
} else {
var checkPrivateAllowed = Restangular.one('organization/' + namespace + '/private');
checkPrivateAllowed.get().then(function(resp) {
ApiService.getOrganizationPrivateAllowed(null, {'orgname': namespace}).then(function(resp) {
$scope.planRequired = resp.privateAllowed ? null : {};
$scope.checkingPlan = false;
}, function() {
@ -868,8 +912,7 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
'description': repo.description
};
var createPost = Restangular.one('repository');
createPost.customPOST(data).then(function(created) {
ApiService.createRepo(data).then(function(created) {
$scope.creating = false;
$scope.created = created;
@ -912,9 +955,12 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
'file_id': fileId
};
var startBuildCall = Restangular.one('repository/' + repo.namespace + '/' + repo.name + '/build/');
startBuildCall.customPOST(data).then(function(resp) {
$location.path('/repository/' + repo.namespace + '/' + repo.name);
var params = {
'repository': repo.namespace + '/' + repo.name
};
ApiService.requestRepoBuild(data, params).then(function(resp) {
$location.path('/repository/' + params.repository);
}, function() {
$('#couldnotbuildModal').modal();
});
@ -963,8 +1009,7 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
'mimeType': mimeType
};
var getUploadUrl = Restangular.one('filedrop/');
getUploadUrl.customPOST(data).then(function(resp) {
var getUploadUrl = ApiService.getFiledropUrl(data).then(function(resp) {
conductUpload(repo, file, resp.url, resp.file_id, mimeType);
}, function() {
$('#couldnotbuildModal').modal();
@ -992,7 +1037,7 @@ function NewRepoCtrl($scope, $location, $http, $timeout, UserService, Restangula
};
}
function OrgViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams) {
function OrgViewCtrl($rootScope, $scope, ApiService, $routeParams) {
var orgname = $routeParams.orgname;
$scope.TEAM_PATTERN = TEAM_PATTERN;
@ -1008,10 +1053,14 @@ function OrgViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
var previousRole = $scope.organization.teams[teamname].role;
$scope.organization.teams[teamname].role = role;
var updateTeam = Restangular.one(getRestUrl('organization', orgname, 'team', teamname));
var params = {
'orgname': orgname,
'teamname': teamname
};
var data = $scope.organization.teams[teamname];
updateTeam.customPUT(data).then(function(resp) {
ApiService.updateOrganizationTeam(data, params).then(function(resp) {
}, function(resp) {
$scope.organization.teams[teamname].role = previousRole;
$scope.roleError = resp.data || '';
@ -1032,7 +1081,7 @@ function OrgViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
return;
}
createOrganizationTeam(Restangular, orgname, teamname, function(created) {
createOrganizationTeam(ApiService, orgname, teamname, function(created) {
$scope.organization.teams[teamname] = created;
});
};
@ -1047,8 +1096,12 @@ function OrgViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
if (!$scope.currentDeleteTeam) { return; }
var teamname = $scope.currentDeleteTeam;
var deleteAction = Restangular.one(getRestUrl('organization', orgname, 'team', teamname));
deleteAction.customDELETE().then(function() {
var params = {
'orgname': orgname,
'teamname': teamname
};
ApiService.deleteOrganizationTeam(null, params).then(function() {
delete $scope.organization.teams[teamname];
$scope.currentDeleteTeam = null;
}, function() {
@ -1058,7 +1111,7 @@ function OrgViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
};
var loadOrganization = function() {
$scope.orgResource = ApiService.at('organization', orgname).get(function(org) {
$scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
$scope.organization = org;
$rootScope.title = orgname;
$rootScope.description = 'Viewing organization ' + orgname;
@ -1109,9 +1162,12 @@ function OrgAdminCtrl($rootScope, $scope, Restangular, $routeParams, UserService
$scope.loadMembers = function() {
if ($scope.membersFound) { return; }
$scope.membersLoading = true;
var getMembers = Restangular.one(getRestUrl('organization', orgname, 'members'));
getMembers.get().then(function(resp) {
var params = {
'orgname': orgname
};
ApiService.getOrganizationMembers(null, params).then(function(resp) {
var membersArray = [];
for (var key in resp.members) {
if (resp.members.hasOwnProperty(key)) {
@ -1125,7 +1181,7 @@ function OrgAdminCtrl($rootScope, $scope, Restangular, $routeParams, UserService
};
var loadOrganization = function() {
$scope.orgResource = ApiService.at('organization', orgname).get(function(org) {
$scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
if (org && org.is_admin) {
$scope.organization = org;
$rootScope.title = orgname + ' (Admin)';
@ -1155,8 +1211,13 @@ function TeamViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
$scope.addNewMember = function(member) {
if ($scope.members[member.name]) { return; }
var addMember = Restangular.one(getRestUrl('organization', $scope.orgname, 'team', teamname, 'members', member.name));
addMember.customPOST().then(function(resp) {
var params = {
'orgname': orgname,
'teamname': teamname,
'membername': member.name
};
ApiService.updateOrganizationTeamMember(null, params).then(function(resp) {
$scope.members[member.name] = resp;
}, function() {
$('#cannotChangeMembersModal').modal({});
@ -1164,8 +1225,13 @@ function TeamViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
};
$scope.removeMember = function(username) {
var removeMember = Restangular.one(getRestUrl('organization', $scope.orgname, 'team', teamname, 'members', username));
removeMember.customDELETE().then(function(resp) {
var params = {
'orgname': orgname,
'teamname': teamname,
'membername': username
};
ApiService.deleteOrganizationTeamMember(null, params).then(function(resp) {
delete $scope.members[username];
}, function() {
$('#cannotChangeMembersModal').modal({});
@ -1175,16 +1241,20 @@ function TeamViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
$scope.updateForDescription = function(content) {
$scope.organization.teams[teamname].description = content;
var updateTeam = Restangular.one(getRestUrl('organization', $scope.orgname, 'team', teamname));
var data = $scope.organization.teams[teamname];
updateTeam.customPUT(data).then(function(resp) {
var params = {
'orgname': orgname,
'teamname': teamname
};
var teaminfo = $scope.organization.teams[teamname];
ApiService.updateOrganizationTeam(teaminfo, params).then(function(resp) {
}, function() {
$('#cannotChangeTeamModal').modal({});
});
};
var loadOrganization = function() {
$scope.orgResource = ApiService.at('organization', orgname).get(function(org) {
$scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
$scope.organization = org;
$scope.team = $scope.organization.teams[teamname];
$rootScope.title = teamname + ' (' + $scope.orgname + ')';
@ -1195,7 +1265,12 @@ function TeamViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
};
var loadMembers = function() {
$scope.membersResource = ApiService.at('organization', $scope.orgname, 'team', teamname, 'members').get(function(resp) {
var params = {
'orgname': orgname,
'teamname': teamname
};
$scope.membersResource = ApiService.getOrganizationTeamMembersAsResource(params).get(function(resp) {
$scope.members = resp.members;
$scope.canEditMembers = resp.can_edit;
return resp.members;
@ -1208,11 +1283,10 @@ function TeamViewCtrl($rootScope, $scope, Restangular, ApiService, $routeParams)
function OrgsCtrl($scope, UserService) {
UserService.updateUserIn($scope);
browserchrome.update();
}
function NewOrgCtrl($scope, $routeParams, $timeout, $location, UserService, PlanService, Restangular) {
function NewOrgCtrl($scope, $routeParams, $timeout, $location, UserService, PlanService, ApiService) {
UserService.updateUserIn($scope);
var requested = $routeParams['plan'];
@ -1252,8 +1326,7 @@ function NewOrgCtrl($scope, $routeParams, $timeout, $location, UserService, Plan
'email': org.email
};
var createPost = Restangular.one('organization/');
createPost.customPOST(data).then(function(created) {
ApiService.createOrganization(data).then(function(created) {
$scope.created = created;
// Reset the organizations list.
@ -1300,14 +1373,19 @@ function OrgMemberLogsCtrl($scope, $routeParams, $rootScope, $timeout, Restangul
$scope.ready = false;
var loadOrganization = function() {
$scope.orgResource = ApiService.at('organization', orgname).get(function(org) {
$scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
$scope.organization = org;
return org;
});
};
var loadMemberInfo = function() {
$scope.memberResource = ApiService.at('organization', $scope.orgname, 'members', membername).get(function(resp) {
var params = {
'orgname': orgname,
'membername': membername
};
$scope.memberResource = ApiService.getOrganizationMemberAsResource(params).get(function(resp) {
$scope.memberInfo = resp.member;
$rootScope.title = 'Logs for ' + $scope.memberInfo.username + ' (' + $scope.orgname + ')';