Skip to content

Commit b80eb99

Browse files
committed
Move default export for helpers to named.
When an item uses the "dot name form" (`collection-group/collection/name.ext`) and is not the default type for that collection, change the default export to a named export for the type.
1 parent 6dc818c commit b80eb99

6 files changed

Lines changed: 99 additions & 8 deletions

File tree

lib/engines/classic/template-file-info.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,6 @@ var TemplateFileInfo = ClassicFileInfo.extend({
7070
detectRenderableInvocations: function() {
7171
this.renderablesInvoked = [];
7272

73-
var fullPath = path.join(this.projectRoot, this.sourceRelativePath);
74-
if (!existsSync(fullPath)) {
75-
return;
76-
}
77-
78-
this._fileContents = fse.readFileSync(fullPath, { encoding: 'utf8' });
79-
8073
try {
8174
compile(this._fileContents, {
8275
plugins: {
@@ -117,8 +110,8 @@ var TemplateFileInfo = ClassicFileInfo.extend({
117110

118111
var fullPath = path.join(this.projectRoot, this.sourceRelativePath);
119112

120-
this._fileContents = fse.readFileSync(fullPath, { encoding: 'utf8' });
121113
fse.writeFileSync(fullPath, newContents, { encoding: 'utf-8' });
114+
this._fileContents = fse.readFileSync(fullPath, { encoding: 'utf8' });
122115
}
123116
});
124117

lib/models/file-info.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
var path = require('path');
22
var inflection = require('inflection');
33
var CoreObject = require('core-object');
4+
var fse = require('fs-extra');
5+
var existsSync = require('exists-sync');
46
var isTypeInSingleTypeCollection = require('../utils/is-type-in-single-type-collection');
7+
var defaultTypeForCollection = require('../utils/default-type-for-collection');
58
var calculateCollectionInfo = require('../utils/calculate-collection-info');
69

710
var FileInfo = CoreObject.extend({
@@ -35,6 +38,7 @@ var FileInfo = CoreObject.extend({
3538
this.populateName();
3639
this.populateCollection();
3740
this.populateBucket();
41+
this.populateFileContents();
3842

3943
this._fileInfoCollection.add(this);
4044
},
@@ -81,6 +85,15 @@ var FileInfo = CoreObject.extend({
8185
this.collectionGroup = values.collectionGroup;
8286
},
8387

88+
populateFileContents: function() {
89+
var fullPath = path.join(this.projectRoot, this.sourceRelativePath);
90+
if (!existsSync(fullPath)) {
91+
return;
92+
}
93+
94+
this._fileContents = fse.readFileSync(fullPath, { encoding: 'utf8' });
95+
},
96+
8497
repopulate: function() {
8598
var inComponentsCollection = this.collection === 'components';
8699
var renderableName = path.join(this.namespace, this.name);
@@ -101,6 +114,27 @@ var FileInfo = CoreObject.extend({
101114
}
102115
}
103116
}
117+
118+
var isDefaultTypeForCollection = defaultTypeForCollection(this.collection) === this.type;
119+
var shouldUseDotFormNaming = this.shouldUseDotFormNaming();
120+
121+
if (!isDefaultTypeForCollection && shouldUseDotFormNaming) {
122+
this.updateDefaultExportToNamed();
123+
}
124+
},
125+
126+
updateDefaultExportToNamed: function() {
127+
if (this.ext !== '.js') { return; }
128+
if (!this._fileContents) { return; }
129+
130+
var newContents = this._fileContents
131+
.replace('export default ', 'export const ' + this.type + ' = ');
132+
133+
134+
var fullPath = path.join(this.projectRoot, this.sourceRelativePath);
135+
136+
fse.writeFileSync(fullPath, newContents, { encoding: 'utf-8' });
137+
this._fileContents = fse.readFileSync(fullPath, { encoding: 'utf8' });
104138
},
105139

106140
shouldUseDotFormNaming: function() {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module.exports = function(collection) {
2+
switch(collection) {
3+
case 'models':
4+
return 'model';
5+
6+
case 'components':
7+
return 'component';
8+
9+
case 'initializers':
10+
return 'initializer';
11+
12+
case 'instance-initializers':
13+
return 'instance-initializer';
14+
15+
//case 'partials':
16+
// return 'partial';
17+
18+
case 'routes':
19+
return 'route';
20+
21+
case 'services':
22+
return 'service';
23+
24+
case 'transforms':
25+
return 'transform';
26+
27+
case 'utils':
28+
return 'util';
29+
30+
default:
31+
return null;
32+
}
33+
};

test/engines/classic-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ describe('classic engine', function() {
3838
}
3939

4040
confirm('app/components/foo-bar.js', {type: 'component', name: 'foo-bar', namespace: '', collection: 'components', collectionGroup: 'ui'});
41+
confirm('app/helpers/foo.js', {type: 'helper', name: 'foo', namespace: '', collection: 'components', collectionGroup: 'ui'});
42+
confirm('app/helpers/foo/bar.js', {type: 'helper', name: 'bar', namespace: 'foo', collection: 'components', collectionGroup: 'ui'});
4143
confirm('app/components/foo-bar/component.js', {type: 'component', name: 'foo-bar', namespace: '', collection: 'components', collectionGroup: 'ui' });
4244
confirm('app/templates/components/foo-bar.hbs', {type: 'template', name: 'foo-bar', namespace: '', collection: 'components', collectionGroup: 'ui'});
4345
confirm('app/components/foo-bar/template.hbs', {type: 'template', name: 'foo-bar', namespace: '', collection: 'components', collectionGroup: 'ui'});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module.exports = {
2+
app: {
3+
helpers: {
4+
'titleize.js': 'export default helper(function() { });',
5+
'capitalize.js': 'export default helper(function() { });'
6+
}
7+
},
8+
9+
tests: {
10+
integration: {
11+
helpers: {
12+
'capitalize-test.js': 'capitalize helper test'
13+
}
14+
}
15+
}
16+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module.exports = {
2+
src: {
3+
ui: {
4+
components: {
5+
'titleize.js': 'export const helper = helper(function() { });',
6+
'capitalize': {
7+
'helper.js': 'export default helper(function() { });',
8+
'helper-integration-test.js': 'capitalize helper test'
9+
}
10+
}
11+
}
12+
}
13+
};

0 commit comments

Comments
 (0)