Skip to content

Commit

Permalink
[enb#425] create tech write-file
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelpower committed Feb 22, 2016
1 parent 3598c91 commit 4812715
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
58 changes: 58 additions & 0 deletions techs/write-file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/**
* write-file
* =============
*
* Записывает целевой файл в файловую систему.
*
* **Опции**
*
* * *String* **target** — имя генерируемого файла. Обязательная опция.
* * *String | Buffer* **content** - контент генерируемого файла, если он есть файл будет сгенерирован
* * *Object | String* **fileOptions** - [аттрибуты генерируемого файла]{@link https://goo.gl/ZZzrdr} (default: 'utf8')
*
* **Пример**
*
* Генерируем текстовый-файл
*
* ```javascript
* nodeConfig.addTech([ require('enb/techs/write-file'), {
* content: 'bla bla bla',
* fileOptions: {
* encoding: 'utf8', // default
* mode: '0o666', // default
* flag: 'w' //default
* },
* target: '?.bla.txt'
* } ]);
* ```
*
* Генерируем bemdecl-файл
*
* ```javascript
* nodeConfig.addTech([ require('enb/techs/write-file'), {
* content: 'exports.blocks = {name: "bla"}',
* fileOptions: {
* encoding: 'utf8', // default
* mode: '0o666', // default
* flag: 'w' //default
* },
* target: '?.bemdecl.js'
* } ]);
* ```
*/
var enb = require('../lib/api'),
vfs = enb.asyncFs;

module.exports = enb.buildFlow.create()
.name('write-file')
.target('target', '?.target')
.defineRequiredOption('target')
.defineRequiredOption('content')
.defineOption('fileOptions', { encoding: 'utf8' })
.builder(function () {
return this._content;
})
.saver(function (filename, content) {
return vfs.write(filename, content, this._fileOptions);
})
.createTech();
33 changes: 33 additions & 0 deletions test/techs/write-file.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
var FS = require('fs'),
mockFS = require('mock-fs'),
MockNode = require('mock-enb/lib/mock-node'),
WriteFileTech = require('../../techs/write-file');

describe('techs/write-file', function () {
var bundle;

beforeEach(function () {
mockFS({
bundle: mockFS.directory({
mode: 0755
})
});

bundle = new MockNode('bundle');
});

afterEach(function () {
mockFS.restore();
});

it('should write target file to file system', function () {
return bundle.runTech(WriteFileTech, {
target: '?.txt',
content: 'I\'m here'
})
.should.be.fulfilled
.then(function () {
FS.readFileSync('bundle/bundle.txt').toString().should.be.eql('I\'m here');
});
});
});

0 comments on commit 4812715

Please sign in to comment.