Skip to content

Commit

Permalink
feat(rakefile): copyed a new rakefile from the template file
Browse files Browse the repository at this point in the history
  • Loading branch information
travi committed Aug 19, 2019
1 parent d933eda commit 77bcc7e
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 8 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"module": "lib/index.es.js",
"sideEffects": false,
"files": [
"lib/"
"lib/",
"templates/"
],
"publishConfig": {
"access": "public"
Expand Down
31 changes: 31 additions & 0 deletions src/rake-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {resolve} from 'path';
import {assert} from 'chai';
import sinon from 'sinon';
import any from '@travi/any';
import * as fsAsync from '../thirdparty-wrappers/fs';
import scaffoldRake from './rake';

suite('Rake', () => {
let sandbox;

setup(() => {
sandbox = sinon.createSandbox();

sandbox.stub(fsAsync, 'copyFile');
});

teardown(() => sandbox.restore());

test('that the Rakefile is generated', async () => {
const projectRoot = any.string();

const results = await scaffoldRake(projectRoot);

assert.deepEqual(results.gems, ['rake']);
assert.calledWith(
fsAsync.copyFile,
resolve(__dirname, '..', 'templates', 'Rakefile.rb'),
`${projectRoot}/Rakefile`
);
});
});
8 changes: 8 additions & 0 deletions src/rake.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import {resolve} from 'path';
import {copyFile} from '../thirdparty-wrappers/fs';

export default async function (projectRoot) {
await copyFile(resolve(__dirname, '..', 'templates', 'Rakefile.rb'), `${projectRoot}/Rakefile`);

return {gems: ['rake']};
}
6 changes: 3 additions & 3 deletions src/ruby-version-test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {promises} from 'fs';
import {promises as fsPromises} from 'fs';
import {assert} from 'chai';
import sinon from 'sinon';
import any from '@travi/any';
Expand All @@ -10,7 +10,7 @@ suite('ruby-version', () => {
setup(() => {
sandbox = sinon.createSandbox();

sandbox.stub(promises, 'writeFile');
sandbox.stub(fsPromises, 'writeFile');
});

teardown(() => sandbox.restore());
Expand All @@ -20,6 +20,6 @@ suite('ruby-version', () => {

await scaffoldRubyVersion(projectRoot);

assert.calledWith(promises.writeFile, `${projectRoot}/.ruby-version`, '2.6.3');
assert.calledWith(fsPromises.writeFile, `${projectRoot}/.ruby-version`, '2.6.3');
});
});
3 changes: 3 additions & 0 deletions src/scaffolder-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {assert} from 'chai';
import sinon from 'sinon';
import any from '@travi/any';
import * as rubyVersionScaffolder from './ruby-version';
import * as rakeScaffolder from './rake';
import {scaffold} from './scaffolder';

suite('scaffolder', () => {
Expand All @@ -11,6 +12,7 @@ suite('scaffolder', () => {
sandbox = sinon.createSandbox();

sandbox.stub(rubyVersionScaffolder, 'default');
sandbox.stub(rakeScaffolder, 'default');
});

teardown(() => sandbox.restore());
Expand All @@ -21,6 +23,7 @@ suite('scaffolder', () => {
const result = await scaffold({projectRoot});

assert.calledWith(rubyVersionScaffolder.default, projectRoot);
assert.calledWith(rakeScaffolder.default, projectRoot);
assert.equal(result.verificationCommand, 'rake');
});
});
6 changes: 5 additions & 1 deletion src/scaffolder.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import scaffoldRubyVersion from './ruby-version';
import scaffoldRake from './rake';

export async function scaffold({projectRoot}) {
await scaffoldRubyVersion(projectRoot);
await Promise.all([
scaffoldRubyVersion(projectRoot),
scaffoldRake(projectRoot)
]);

return {
verificationCommand: 'rake'
Expand Down
11 changes: 11 additions & 0 deletions templates/Rakefile.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
task :default => [:verify]

desc 'verify'
task :verify do
Rake::Task['lint'].invoke
end

desc 'lint'
task :lint do
sh 'mdl --style ./markdownlint-style.rb *.md'
end
20 changes: 17 additions & 3 deletions test/integration/features/step_definitions/common-steps.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import {promises} from 'fs';
import {exists, promises as fsPromises} from 'fs';
import {promisify} from 'util';
import {resolve} from 'path';
import stubbedFs from 'mock-fs';
// import bddStdIn from 'bdd-stdin';
import {assert} from 'chai';
Expand All @@ -8,12 +10,19 @@ import {scaffold} from '../../../../src';

let scaffoldResult;

const {readFile} = fsPromises;
const existsAsync = promisify(exists);

Before(async function () {
// work around for overly aggressive mock-fs, see:
// https://github.com/tschaub/mock-fs/issues/213#issuecomment-347002795
require('mock-stdin'); // eslint-disable-line import/no-extraneous-dependencies

stubbedFs({});
stubbedFs({
templates: {
'Rakefile.rb': await readFile(resolve(__dirname, '../../../../', 'templates/Rakefile.rb'))
}
});
});

After(function () {
Expand Down Expand Up @@ -54,9 +63,14 @@ When(/^the project is scaffolded$/, async function () {
});

Then('the expected files are generated', async function () {
const rubyVersion = await promises.readFile(`${process.cwd()}/.ruby-version`);
const projectRoot = process.cwd();
const [rubyVersion, rakefileExists] = await Promise.all([
readFile(`${projectRoot}/.ruby-version`),
existsAsync(`${projectRoot}/Rakefile`)
]);

assert.equal(rubyVersion.toString(), '2.6.3');
assert.isTrue(rakefileExists);
});

Then('the expected results are returned to the project scaffolder', async function () {
Expand Down
4 changes: 4 additions & 0 deletions thirdparty-wrappers/fs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import {promisify} from 'util';
import {copyFile as copyFileCallback} from 'fs';

export const copyFile = promisify(copyFileCallback);

0 comments on commit 77bcc7e

Please sign in to comment.