-
-
Notifications
You must be signed in to change notification settings - Fork 115
/
Copy pathclass.js
124 lines (97 loc) · 2.47 KB
/
class.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* eslint-disable ember/classic-decorator-no-classic-methods, ember/no-computed-properties-in-native-classes, ember/no-get, prettier/prettier */
import { computed } from '@ember/object';
import Model, { belongsTo, attr } from '@ember-data/model';
const projectNameFromClassName = (key) => {
return computed(key, 'project.id', 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,
'extendedClassProjectName',
'project.id',
'projectVersion.version',
function () {
if (this.extendedClassProjectName === this.get('project.id')) {
return this.get('projectVersion.version');
}
// try linking to latest version at least
return 'release';
}
);
};
export default class Class extends Model {
@attr()
name;
@attr()
methods;
@attr()
properties;
@attr()
access;
@attr()
events;
@attr()
description;
@attr()
ogDescription;
@attr()
extends;
@attr()
uses;
@attr()
since;
@attr()
file;
@attr()
line;
@attr()
module;
@belongsTo('class', { async: true, inverse: null })
parentClass;
@belongsTo('project-version', { inverse: 'classes' })
projectVersion;
@computed('projectVersion.id')
get project() {
return this.projectVersion.get('project');
}
@projectNameFromClassName('extends')
extendedClassProjectName;
@guessVersionFor('extends')
extendedClassVersion;
@projectNameFromClassName('uses')
usedClassProjectName;
@guessVersionFor('uses')
usedClassVersion;
@computed('extends')
get extendedClassShortName() {
let extendedClassName = this['extends'];
if (extendedClassName.substr(0, 6) === 'Ember.') {
return extendedClassName.substr(6);
}
return extendedClassName;
}
@computed('project.id', 'uses')
get usesObjects() {
return this.uses.map((className) => ({
name: className,
shortName:
className.substr(0, 6) === 'Ember.' ? className.substr(6) : className,
projectId:
className.substr(0, 6) === 'Ember.'
? 'ember'
: className.substr(0, 3) === 'DS'
? 'ember-data'
: this.get('project.id'),
}));
}
}