Skip to content

Commit

Permalink
Closes #6 -- Immutable records as datastructure for messages and pack…
Browse files Browse the repository at this point in the history
…ages
  • Loading branch information
stylesuxx committed Jul 7, 2016
1 parent 44decc0 commit c2f85e0
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 89 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@

2016-07-08
- <@stylesuxx> added immutable Message and Package records

2016-07-07
- <@sthzg> refactored test runner to Mocha
- <@sthzg> updated code styling in generator code to become refactoring-friendly
Expand Down
12 changes: 6 additions & 6 deletions generators/activate/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ class Generator extends generators.Base {
validateSubgenExists() {
tasks.validateSubgenExists(this);
},
getSubgenPkg() {
tasks.getSubgenPkg(this)
setSubgenPkg() {
tasks.setSubgenPkg(this)
},
getSubgenSrcPath() {
tasks.getSubgenSrcPath(this)
setSubgenSrcPath() {
tasks.setSubgenSrcPath(this)
},
getSubgenDestPath() {
tasks.getSubgenDestPath(this)
setSubgenDestPath() {
tasks.setSubgenDestPath(this)
}
};
}
Expand Down
12 changes: 6 additions & 6 deletions generators/deactivate/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ class Generator extends generators.Base {
validateSubgenExists() {
tasks.validateSubgenExists(this);
},
getSubgenPkg() {
tasks.getSubgenPkg(this)
setSubgenPkg() {
tasks.setSubgenPkg(this)
},
getSubgenSrcPath() {
tasks.getSubgenSrcPath(this)
setSubgenSrcPath() {
tasks.setSubgenSrcPath(this)
},
getSubgenDestPath() {
tasks.getSubgenDestPath(this)
setSubgenDestPath() {
tasks.setSubgenDestPath(this)
}
};
}
Expand Down
2 changes: 1 addition & 1 deletion generators/scan/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class Generator extends generators.Base {
get end() {
return {
output() {
this.log.ok(`Found ${this.availableExtgens.length} ${(this.availableExtgens.length === 1) ? 'sub generator' : 'sub generators'}`);
this.log.ok(`Found ${this.availableExtgens.count()} ${(this.availableExtgens.count() === 1) ? 'sub generator' : 'sub generators'}`);
this.log(this.log.table(this.availableExtgens.map((gen, idx) => [
'',
idx + 1,
Expand Down
6 changes: 3 additions & 3 deletions test/generators/scan/indexTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ describe('subgenext:scan', () => {
});

it('finds bbq subgen as available extgen', function () {
chai(this.generator.availableExtgens.some(x => x.basename === 'bbq'), 'No extgen w/ name bbq found');
chai(this.generator.availableExtgens.some(x => x.get('basename') === 'bbq'), 'No extgen w/ name bbq found');
});

it('reports bbq subgen to be not activated', function () {
chai(this.generator.availableExtgens.every(x => x.isActivated === false));
chai(this.generator.availableExtgens.every(x => x.get('isActivated') === false));
});
});

Expand All @@ -60,7 +60,7 @@ describe('subgenext:scan', () => {
});

it('reports bbq subgen to be activated', function () {
chai(this.generator.availableExtgens.every(x => x.isActivated === true));
chai(this.generator.availableExtgens.every(x => x.get('isActivated') === true));
});
});

Expand Down
52 changes: 51 additions & 1 deletion utils/records.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,54 @@
/**
* @module records
*
* Contains records used throughout the application.
*/

'use strict';

var immutable = require('immutable');
const immutable = require('immutable');


class Message extends immutable.Record({ hasError: false, data: {} }) {
constructor(data) {
data.data = immutable.fromJS(data.data, function (key, value) {
var isIndexed = immutable.Iterable.isIndexed(value);
return isIndexed ? value.toList() : value.toOrderedMap();
});

super(data);
}
}

const SuccessMsg = (data) => new Message({
data: data
});

const ErrorMsg = (err) => new Message({
hasError: true,
data: {
err: err
}
});

const pkgDefaults = {
isHost: true,
basename: null,
name: null,
version: null, // only for host for semver check
path: null,
pjson: {},
isActivated: false, // Only for sub
data: {} //only for sub host dep
};

const Package = immutable.Record(pkgDefaults);
const HostGenPkg = (pkg={}) => Package(Object.assign({}, pkgDefaults, pkg, { isHost: true }));
const SubGenPkg = (pkg={}) => Package(Object.assign({}, pkgDefaults, pkg, { isHost: false }));

module.exports = {
SuccessMsg,
ErrorMsg,
HostGenPkg,
SubGenPkg
};
46 changes: 25 additions & 21 deletions utils/tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,13 @@ function loadSubgenConfig(generator) {
* Validates input for --host option.
*/
function validateHostName(generator) {
const defaultHost = generator.subgenConfig.get('defaultHost', false);

if (typeof generator.options.host === 'undefined' && !generator.subgenConfig.get('defaultHost', false)) {
generator.env.error(`Please provide the name of the host generator by appending --host=<generator-name>`);
if (typeof generator.options.host === 'undefined' && !defaultHost) {
generator.env.error('Please provide the name of the host generator by appending --host=<generator-name>');
}

generator.hostBaseName = generator.options.host || generator.subgenConfig.get('defaultHost');
generator.hostBaseName = generator.options.host || defaultHost;
generator.hostFullName = 'generator-' + generator.hostBaseName;
}

Expand Down Expand Up @@ -162,7 +163,7 @@ function populateHostgenPkg(generator) {
generator.env.error(`Couldn't get package info for ${generator.hostFullName} .`);
}

generator.hostPkg = pkgQ.pkg;
generator.hostPkg = pkgQ.data.get('pkg');
}


Expand All @@ -186,22 +187,25 @@ function validateSubgenExists(generator) {
* Scans package for installed subgens.
*/
function scanForInstalledSubgens(generator) {
const extgens = utils.findExternalSubgens(
constants.SUBGEN_PREFIX_PATTERNS,
generator.hostBaseName,
generator.pkgList
);
const prefix = constants.SUBGEN_PREFIX_PATTERNS;
const hostName = generator.hostBaseName;
const pkgList = generator.pkgList;
const extgens = utils.findExternalSubgens(prefix, hostName, pkgList);

generator.availableExtgens = extgens.results;
generator.availableExtgens = extgens.data.get('results');
}


/**
* Adds activation state information to the list of availableExtgens external subgens.
*/
function checkActivationState(generator) {
generator.availableExtgens.forEach(subgen => {
subgen.isActivated = utils.checkActivationState(generator.hostPkg, subgen.basename).result;
const hostPkg = generator.hostPkg
generator.availableExtgens = generator.availableExtgens.map((subgen) => {
const subgenBaseName = subgen.get('basename');
const activationState = utils.checkActivationState(hostPkg, subgenBaseName).data.get('result');

return subgen.set('isActivated', activationState);
});
}

Expand All @@ -210,32 +214,32 @@ function checkActivationState(generator) {
* Populates class member with subgen package information.
* @param generator
*/
function getSubgenPkg(generator) {
function setSubgenPkg(generator) {
const subgen = utils.getPkgInfo(generator.subgenName, generator.availableExtgens, false);

if (subgen.hasError) {
generator.env.error(`Unable to find package entry fro ${generator.subgenName}. Error: ${subgen.error}`);
}

generator.subgenPkg = subgen.pkg;
generator.subgenPkg = subgen.data.get('pkg');
}


/**
* Populates class member with subgen source path.
*/
function getSubgenSrcPath(generator) {
function setSubgenSrcPath(generator) {
const pkg = generator.subgenPkg;
generator.subgenSrc = path.join(pkg.path, 'generators', generator.subgenName);
generator.subgenSrc = path.join(pkg.get('path'), 'generators', generator.subgenName);
}


/**
* Populates class member with subgen destination path.
*/
function getSubgenDestPath(generator) {
function setSubgenDestPath(generator) {
const pkg = generator.hostPkg;
generator.subgenDest = path.join(pkg.path, 'generators', generator.subgenName);
generator.subgenDest = path.join(pkg.get('path'), 'generators', generator.subgenName);
}


Expand All @@ -250,9 +254,9 @@ function validateCompatibility() {
module.exports = {
cacheInstalledPackages,
checkActivationState,
getSubgenDestPath,
getSubgenPkg,
getSubgenSrcPath,
setSubgenDestPath,
setSubgenPkg,
setSubgenSrcPath,
injectDefaultConstructor,
loadSubgenConfig,
makeSubgenAware,
Expand Down
Loading

0 comments on commit c2f85e0

Please sign in to comment.