diff --git a/app/serializers/branch.js b/app/serializers/branch.js index fa44d17c..14bbc2c0 100644 --- a/app/serializers/branch.js +++ b/app/serializers/branch.js @@ -1,7 +1,7 @@ import Ember from 'ember'; -import V3Serializer from 'travis/serializers/v3'; +import V2FallbackSerializer from 'travis/serializers/v2_fallback'; -export default V3Serializer.extend({ +export default V2FallbackSerializer.extend({ extractAttributes(klass, payload) { payload.id = payload['@href']; return this._super(...arguments); diff --git a/app/serializers/build.js b/app/serializers/build.js index e4d57f9e..32d42cdf 100644 --- a/app/serializers/build.js +++ b/app/serializers/build.js @@ -63,17 +63,33 @@ var Serializer = V2FallbackSerializer.extend({ var data, href, id, repoId, result; // TODO: remove this after switching to V3 entirely - if(!resourceHash['@type']) { + if(!resourceHash['@type'] && resourceHash.commit && resourceHash.commit.branch_is_default) { let build = resourceHash.build, commit = resourceHash.commit; let branch = { name: commit.branch, - default_branch: build.is_on_default_branch, + default_branch: commit.branch_is_default, "@href": `/repo/${build.repository_id}/branch/${commit.branch}` }; resourceHash.build.branch = branch; } + // fix pusher payload, it doesn't include a branch record: + if(!resourceHash['@type'] && resourceHash.build && + resourceHash.repository && resourceHash.repository.default_branch) { + let branchName = resourceHash.build.branch, + repository = resourceHash.repository, + defaultBranchName = repository.default_branch.name; + + resourceHash.build.branch = { + name: branchName, + default_branch: branchName === defaultBranchName, + '@href': `/repo/${repository.id}/branch/${branchName}` + }; + + repository.default_branch['@href'] = `/repo/${repository.id}/branch/${defaultBranchName}`; + } + result = this._super(modelClass, resourceHash); data = result.data; diff --git a/app/serializers/v2_fallback.js b/app/serializers/v2_fallback.js index b7d13fe2..570678be 100644 --- a/app/serializers/v2_fallback.js +++ b/app/serializers/v2_fallback.js @@ -14,10 +14,11 @@ export default V3Serializer.extend({ // V2 API payload let relationship = null; let relationshipKey = this.keyForV2Relationship(key, relationshipMeta.kind, 'deserialize'); + let alternativeRelationshipKey = key.underscore(); - if (resourceHash.hasOwnProperty(key) || resourceHash.hasOwnProperty(relationshipKey)) { + if (resourceHash.hasOwnProperty(alternativeRelationshipKey) || resourceHash.hasOwnProperty(relationshipKey)) { let data = null; - let relationshipHash = resourceHash[key] || resourceHash[relationshipKey]; + let relationshipHash = resourceHash[alternativeRelationshipKey] || resourceHash[relationshipKey]; if (relationshipMeta.kind === 'belongsTo') { data = this.extractRelationship(relationshipMeta.type, relationshipHash); } else if (relationshipMeta.kind === 'hasMany') { @@ -62,7 +63,7 @@ export default V3Serializer.extend({ let process = function(data) { if(Object.keys(data).sort()+'' !== 'id,type' || (data['@href'] && data.type == 'branch')) { // no need to add records if they have only id and type - let type = key.singularize(); + let type = key === 'defaultBranch' ? 'branch' : key.singularize(); let serializer = store.serializerFor(type); let modelClass = store.modelFor(type); let normalized = serializer.normalize(modelClass, data); diff --git a/app/services/store.coffee b/app/services/store.coffee index 4aa3fff3..02c1f94e 100644 --- a/app/services/store.coffee +++ b/app/services/store.coffee @@ -70,6 +70,10 @@ Store = DS.Store.extend # things I want to update here: if type == 'build' && (json.repository || json.repo) data = json.repository || json.repo + + if data.default_branch + data.default_branch.default_branch = true + @push(this.normalize('repo', data)) `export default Store`