Skip to content

Commit

Permalink
Use mem-fs when determining the appname
Browse files Browse the repository at this point in the history
Side note: this change uncovered a bug in the base test. The resolved
property must be the path of the generator in use - not a relative path
or the destination path.
  • Loading branch information
SBoudrias committed Jan 6, 2015
1 parent 30ed576 commit 8e9e5ae
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
16 changes: 6 additions & 10 deletions lib/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ var Base = module.exports = function Base(args, options) {
this._hooks = [];
this._composedWith = [];
this._transformStreams = [];
this.appname = this.determineAppname();

this.option('help', {
alias: 'h',
Expand Down Expand Up @@ -149,6 +148,7 @@ var Base = module.exports = function Base(args, options) {
this.dest.registerValidationFilter('collision', this.getCollisionFilter());
this.src.registerValidationFilter('collision', this.getCollisionFilter());

this.appname = this.determineAppname();
this.config = this._getStorage();
this._globalConfig = this._getGlobalStorage();

Expand Down Expand Up @@ -724,18 +724,14 @@ Base.prototype.getCollisionFilter = function () {
* @return {String} The name of the application
*/
Base.prototype.determineAppname = function () {
var appname;

try {
appname = require(path.join(process.cwd(), 'bower.json')).name;
} catch (e) {
try {
appname = require(path.join(process.cwd(), 'package.json')).name;
} catch (e) {}
var appname = this.fs.readJSON(this.destinationPath('bower.json'), {}).name;

if (!appname) {
appname = this.fs.readJSON(this.destinationPath('package.json'), {}).name;
}

if (!appname) {
appname = path.basename(process.cwd());
appname = path.basename(this.destinationRoot());
}

return appname.replace(/[^\w\s]+?/g, ' ');
Expand Down
25 changes: 17 additions & 8 deletions test/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ var os = require('os');
var path = require('path');
var util = require('util');
var sinon = require('sinon');
var mkdirp = require('mkdirp');
var mockery = require('mockery');
var rimraf = require('rimraf');
var through = require('through2');
Expand All @@ -19,13 +20,15 @@ var generators = require('..');
var helpers = generators.test;
var assert = generators.assert;
var tmpdir = path.join(os.tmpdir(), 'yeoman-base');
var resolveddir = path.join(os.tmpdir(), 'yeoman-base-generator');

describe('generators.Base', function () {
before(helpers.setUpTestDirectory(tmpdir));

beforeEach(function () {
this.env = yeoman.createEnv([], { 'skip-install': true }, new TestAdapter());

mkdirp.sync(resolveddir);
var Dummy = this.Dummy = helpers.createDummyGenerator();

this.env.registerStub(Dummy, 'ember:all');
Expand All @@ -40,7 +43,7 @@ describe('generators.Base', function () {
foo: false,
something: 'else',
// mandatory options, created by the env#create() helper
resolved: 'ember:all',
resolved: resolveddir,
namespace: 'dummy',
env: this.env,
'skip-install': true
Expand Down Expand Up @@ -119,7 +122,7 @@ describe('generators.Base', function () {
});

describe('prototype', function () {
it('methods does\'nt conflict with Env#runQueue', function () {
it('methods doesn\'t conflict with Env#runQueue', function () {
assert.notImplement(generators.Base.prototype, this.env.runLoop.queueNames);
});
});
Expand All @@ -143,12 +146,18 @@ describe('generators.Base', function () {
});

it('returns appname from bower.json', function () {
fs.writeFileSync('bower.json', '{ "name": "app-name" }');
this.dummy.fs.write(
this.dummy.destinationPath('bower.json'),
'{ "name": "app-name" }'
);
assert.equal(this.dummy.determineAppname(), 'app name');
});

it('returns appname from package.json', function () {
fs.writeFileSync('package.json', '{ "name": "package_app-name" }');
this.dummy.fs.write(
this.dummy.destinationPath('package.json'),
'{ "name": "package_app-name" }'
);
assert.equal(this.dummy.determineAppname(), 'package_app name');
});

Expand Down Expand Up @@ -925,30 +934,30 @@ describe('generators.Base', function () {

describe('#rootGeneratorName', function () {
afterEach(function () {
rimraf.sync('package.json');
rimraf.sync(path.join(resolveddir, 'package.json'));
});

it('returns the default name', function () {
assert.equal(this.dummy.rootGeneratorName(), '*');
});

it('returns generator name', function () {
fs.writeFileSync('package.json', '{ "name": "generator-name" }');
fs.writeFileSync(path.join(resolveddir, 'package.json'), '{ "name": "generator-name" }');
assert.equal(this.dummy.rootGeneratorName(), 'generator-name');
});
});

describe('#rootGeneratorVersion', function () {
afterEach(function () {
rimraf.sync('package.json');
rimraf.sync(path.join(resolveddir, 'package.json'));
});

it('returns the default version', function () {
assert.equal(this.dummy.rootGeneratorVersion(), '0.0.0');
});

it('returns generator version', function () {
fs.writeFileSync('package.json', '{ "version": "1.0.0" }');
fs.writeFileSync(path.join(resolveddir, 'package.json'), '{ "version": "1.0.0" }');
assert.equal(this.dummy.rootGeneratorVersion(), '1.0.0');
});
});
Expand Down

0 comments on commit 8e9e5ae

Please sign in to comment.