Skip to content

Commit b1ee6a5

Browse files
authored
Merge pull request #49 from andyhot/feature/config-imports
Feature/config imports
2 parents 5d5c55a + 1803d2f commit b1ee6a5

6 files changed

Lines changed: 88 additions & 17 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
var ClassicFileInfo = require('./classic-file-info');
2+
3+
var ConfigFileInfo = ClassicFileInfo.extend({
4+
fileInfoType: 'ConfigFileInfo',
5+
6+
7+
init: function(options) {
8+
options.type = 'config';
9+
options.base = '.';
10+
options.sourceRoot = '.';
11+
12+
this._super(options);
13+
},
14+
15+
populateCollection: function() {
16+
this.collection = '..';
17+
this.collectionGroup = '';
18+
}
19+
});
20+
21+
module.exports = ConfigFileInfo;

lib/engines/classic/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var TemplateFileInfo = require('./template-file-info');
88
var ComponentTemplateFileInfo = require('./component-template-file-info');
99
var MainFileInfo = require('./main-file-info');
1010
var MixinFileInfo = require('./mixin-file-info');
11+
var ConfigFileInfo = require('./config-file-info');
1112

1213
module.exports = {
1314
buildFor: function(sourceRelativePath, options) {
@@ -70,6 +71,8 @@ module.exports = {
7071

7172
return new TestFileInfo(options);
7273
}
74+
} else if (sourceRoot === 'config') {
75+
return new ConfigFileInfo(options);
7376
}
7477
}
7578
};

lib/index.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ var Engine = CoreObject.extend({
3434
},
3535

3636
_queueMoveFile: function(source, dest) {
37+
if (source === dest) {
38+
return;
39+
}
40+
3741
var logger = this._logger;
3842

3943
this._promise = this._promise
@@ -45,24 +49,23 @@ var Engine = CoreObject.extend({
4549
});
4650
},
4751

52+
_safeWalkSync: function(dir) {
53+
var projectDir = this.projectRoot + '/' + dir;
54+
return fse.existsSync(projectDir) ? walkSync(projectDir) : [];
55+
},
56+
4857
_filesInDir: function(dir) {
49-
return walkSync(this.projectRoot + '/' + dir)
50-
.map(function(relativePath) {
51-
// add the dir back as a prefix
52-
return dir + '/' + relativePath;
53-
})
54-
.filter(function(relativePath) {
55-
// remove entries for directories
56-
return relativePath.slice(-1) !== '/';
57-
});
58+
return this._safeWalkSync(dir)
59+
// add the dir back as a prefix
60+
.map( relativePath => dir + '/' + relativePath )
61+
// remove entries for directories
62+
.filter( relativePath => relativePath.slice(-1) !== '/');
5863
},
5964

6065
_queueRemoveEmptyDirs: function(dir) {
61-
var projectRoot = this.projectRoot;
62-
6366
this._promise = this._promise
64-
.then(function() {
65-
var contents = walkSync(projectRoot + '/' + dir);
67+
.then(() => {
68+
var contents = this._safeWalkSync(dir);
6669
var files = contents
6770
.filter(function(entry) {
6871
return entry.slice(-1) !== '/' && entry.slice(-8) !== '.gitkeep';
@@ -74,7 +77,7 @@ var Engine = CoreObject.extend({
7477

7578
// there are no files left
7679
if (files.length === 0) {
77-
fse.removeSync(projectRoot + '/' + dir);
80+
fse.removeSync(this.projectRoot + '/' + dir);
7881
}
7982

8083
// there are files, so we need to only delete empty dirs
@@ -86,7 +89,7 @@ var Engine = CoreObject.extend({
8689
});
8790

8891
if (!hasFiles) {
89-
fse.removeSync(projectRoot + '/' + dir + '/' + directory);
92+
fse.removeSync(this.projectRoot + '/' + dir + '/' + directory);
9093
}
9194
}
9295
});
@@ -96,7 +99,8 @@ var Engine = CoreObject.extend({
9699
this._promise = RSVP.resolve();
97100
var inputFiles = [].concat(
98101
this._filesInDir('app'),
99-
this._filesInDir('tests')
102+
this._filesInDir('tests'),
103+
this._filesInDir('config')
100104
);
101105

102106
var verbose = this.verbose;

lib/utils/path.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ function makeRelative(from, to) {
1313
}
1414

1515
function makeAbsolute(base, path) {
16-
return p.resolve(p.dirname('/' + base), path).substring(1);
16+
var isConfigPath = path.indexOf('/config/') > 0;
17+
var baseDir = p.dirname('/' + base);
18+
if (isConfigPath) {
19+
baseDir += '/..';
20+
}
21+
return p.resolve(baseDir, path).substring(1);
1722
}
1823

1924
module.exports = {

test/fixtures/config/input.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = {
2+
app: {
3+
'app.js': 'import config from "./config/environment";',
4+
utils: {
5+
'first.js': 'import config from "my-app/config/environment";',
6+
'second.js': 'import config from "../config/environment";'
7+
}
8+
},
9+
config: {
10+
'environment.js': '"ENV"'
11+
},
12+
tests: {
13+
unit: {
14+
utils: {
15+
'first-test.js': 'import config from "../../../config/environment";',
16+
'second-test.js': 'import config from "my-app/config/environment";'
17+
}
18+
}
19+
}
20+
};

test/fixtures/config/output.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
src: {
3+
'main.js': 'import config from "../config/environment";',
4+
utils: {
5+
first: {
6+
'util.js': 'import config from "my-app/config/environment";',
7+
'util-unit-test.js': 'import config from "../../../config/environment";'
8+
},
9+
second: {
10+
'util.js': 'import config from "../../../config/environment";',
11+
'util-unit-test.js': 'import config from "my-app/config/environment";'
12+
}
13+
}
14+
},
15+
config: {
16+
'environment.js': '"ENV"'
17+
}
18+
};

0 commit comments

Comments
 (0)