Skip to content

Commit

Permalink
Support for params, which passed as a hash
Browse files Browse the repository at this point in the history
Closes gh-9
  • Loading branch information
remnev committed Jun 14, 2015
1 parent 767835c commit 5e5c381
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 6 deletions.
18 changes: 16 additions & 2 deletions lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ var PATH = require('path'),
FS = require('fs'),
VM = require('vm'),
CRYPTO = require('crypto'),
isPlainObject = require('lodash.isplainobject'),

VOW = require('vow'),
_assign = require('lodash.assign'),
Expand Down Expand Up @@ -107,13 +108,26 @@ exec.cache = Object.create(null);

/**
* Appends filename with extension to path
* @param {String} name path or file
* @param {String|Object} name file name or hash with all function params
* @param {String} ext extension if not exists
* @param {String} [mask]
* @returns {String}
*/
function fulfillName (name, ext, mask, lang) {
var shortname = basename(name);
var shortname;
var params;

// support hash with params as first function param
if (isPlainObject(name)) {
params = name;

name = params.name;
ext = params.ext;
mask = params.mask;
lang = params.lang;
}

shortname = basename(name);
if (mask) {
name = join(name, unmaskName(shortname, mask, lang));
}
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@
},
"homepage": "https://github.com/express-bem/express-bem",
"dependencies": {
"express": ">=3",
"lodash.assign": "^3.0.0",
"vow": "^0.4.8",
"express": ">=3"
"lodash.isplainobject": "^3.1.0",
"vow": "^0.4.8"
},
"devDependencies": {
"express": "4.11.x",
Expand Down
37 changes: 35 additions & 2 deletions test/01.util.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,46 @@ describe('util', function () {
ASSERT.equal(U.fulfillName('bundles/index', '.js'), 'bundles/index/index.js');
});

it('should fulfill name with source mask, which masks name', function () {
it('should fulfill name with source mask, when masked name', function () {
ASSERT.equal(U.fulfillName('index', 'js', '?.min.js'), 'index/index.min.js');
});

it('should fulfill name with source mask, which masks both name and lang', function () {
it('should fulfill name with source mask, when masked both name and lang', function () {
ASSERT.equal(U.fulfillName('index', 'js', '?.{lang}.min.js', 'en'), 'index/index.en.min.js');
});

describe('support options passed as a hash', function () {
it('should fulfill name with ext', function () {
ASSERT.equal(U.fulfillName({
name : 'bundles/index',
ext : 'js',
}), 'bundles/index/index.js');
});

it('should fulfill name with dotted ext', function () {
ASSERT.equal(U.fulfillName({
name : 'bundles/index',
ext : '.js'
}), 'bundles/index/index.js');
});

it('should fulfill name with source mask, when masked name', function () {
ASSERT.equal(U.fulfillName({
name : 'index',
ext : 'js',
mask : '?.min.js'
}), 'index/index.min.js');
});

it('should fulfill name with source mask, when masked both name and lang', function () {
ASSERT.equal(U.fulfillName({
name : 'index',
ext : 'js',
mask : '?.{lang}.min.js',
lang : 'en'
}), 'index/index.en.min.js');
});
});
});

describe('.unmaskName', function () {
Expand Down

0 comments on commit 5e5c381

Please sign in to comment.