From e3b986232d0046493b17ae43bf069e5082144f63 Mon Sep 17 00:00:00 2001 From: martinmalinda Date: Sun, 2 Jul 2017 14:21:29 +0200 Subject: [PATCH] add temporary solution for linking to classes from different project --- app/adapters/application.js | 3 +- app/models/class.js | 35 ++++++++++++++++++- .../project-version/classes/class.hbs | 4 +-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/adapters/application.js b/app/adapters/application.js index dff180978..89b36cc5a 100644 --- a/app/adapters/application.js +++ b/app/adapters/application.js @@ -19,6 +19,7 @@ export default JSONAPIAdapter.extend({ currentProjectVersion: '', metaStore: service(), + projectService: service('project'), async findRecord(store, {modelName}, id) { let url; @@ -30,7 +31,7 @@ export default JSONAPIAdapter.extend({ let revId = this.get('metaStore').getRevId(projectName, version, modelName, id); url = `json-docs/${projectName}/${version}/${inflector.pluralize(modelName)}/${revId}`; } else if (modelName === 'missing') { - let version = Ember.getOwner(this).lookup('controller:project-version').get('model.version'); + let version = this.get('projectService.version'); let revId = this.get('metaStore').getRevId(projectName, version, modelName, id); url = `json-docs/${projectName}/${version}/${inflector.pluralize(modelName)}/${revId}`; } else if (modelName === 'project') { diff --git a/app/models/class.js b/app/models/class.js index 2d6dc8d39..01c386401 100644 --- a/app/models/class.js +++ b/app/models/class.js @@ -4,6 +4,34 @@ import Ember from 'ember'; const {computed} = Ember; const {attr, belongsTo} = DS; +const projectNameFromClassName = key => { + return computed(key, function() { + const value = this.get(key) || ""; + if (value.indexOf('Ember.') > -1) { + return 'ember'; + } + + if (value.indexOf('DS.') > 1) { + return 'ember-data'; + } + + return this.get('project.id'); + }); +}; + +// ideally this computed property would not be needed and we'd have extendsVersion, extendsProject attrs from json-api-docs +const guessVersionFor = key => { + return computed(key, 'project.id', function() { + + if (this.get('extendedClassProjectName') === this.get('project.id')) { + return this.get('projectVersion.version'); + } + + // try linking to latest version at least + return 'release'; + }); +}; + export default DS.Model.extend({ name: attr(), methods: attr(), @@ -21,6 +49,11 @@ export default DS.Model.extend({ projectVersion: belongsTo('project-version', {inverse: 'classes'}), project: computed('projectVersion.id', function() { return this.get('projectVersion').get('project'); - }) + }), + + extendedClassProjectName: projectNameFromClassName('extends'), + extendedClassVersion: guessVersionFor('extends'), + usedClassProjectName: projectNameFromClassName('uses'), + usedClassVersion: guessVersionFor('uses') }); diff --git a/app/templates/project-version/classes/class.hbs b/app/templates/project-version/classes/class.hbs index d3cad66fe..961830aee 100644 --- a/app/templates/project-version/classes/class.hbs +++ b/app/templates/project-version/classes/class.hbs @@ -8,7 +8,7 @@ {{#if model.extends}}
Extends: - {{#link-to 'project-version.classes.class' model.projectVersion.version model.extends}}{{model.extends}}{{/link-to}} + {{#link-to 'project-version.classes.class' model.extendedClassProjectName model.extendedClassVersion model.extends}}{{model.extends}}{{/link-to}}
{{/if}} {{#if model.uses}} @@ -17,7 +17,7 @@ {{#each model.uses as |parentClass idx|}} {{#unless (eq idx 0)}},{{/unless}} - {{#link-to 'project-version.classes.class' model.projectVersion.version parentClass}}{{parentClass}}{{/link-to}} + {{#link-to 'project-version.classes.class' model.usedClassProjectName model.usedClassVersion parentClass}}{{parentClass}}{{/link-to}} {{/each}}