Skip to content

Commit

Permalink
Merge pull request #170 from bem-sdk/issue-167
Browse files Browse the repository at this point in the history
refactor(api): add delims field
  • Loading branch information
blond committed Mar 10, 2017
2 parents b0edd63 + f65e4dd commit 2faeb10
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 46 deletions.
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,32 @@ const myNaming4 = bemNaming({ delims: { mod: { name: '--', val: bemNaming.modVal
[#160]: https://github.com/bem-sdk/bem-naming/pull/160
[#169]: https://github.com/bem-sdk/bem-naming/pull/169

#### Delims field ([#167]).

Added `delims` field instead of `elemDelim`, `modDelim` and `modValDelim` for consistency with [bemNaming](README.md#bemnaming-delims-elem-mod-wordpattern-) function.

**API v1.x.x**

```js
const bemNaming = require('bem-naming');

bemNaming.elemDelim
bemNaming.modDelim
bemNaming.modValDelim
```

**API v2.x.x**

```js
const bemNaming = require('@bem/naming');

bemNaming.delims.elem
bemNaming.delims.mod.name
bemNaming.delims.mod.val
```

[#167]: https://github.com/bem-sdk/bem-naming/pull/167

### NPM

Now BEM SDK modules are published in `@bem` scope, so the `bem-naming` module was renamed to [@bem/naming](https://www.npmjs.org/package/@bem/naming) (@blond [#158]).
Expand Down
32 changes: 23 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ Table of Contents
* [bemNaming({ delims: {elem, mod}, wordPattern })](#bemnaming-delims-elem-mod-wordpattern-)
* [parse(str)](#parsestr)
* [stringify(obj)](#stringifyobj)
* [elemDelim](#elemdelim)
* [modDelim](#moddelim)
* [modValDelim](#modvaldelim)
* [delims](#delims)

BEM Entity representation
-------------------------
Expand Down Expand Up @@ -255,9 +253,7 @@ API
* [bemNaming({ delims: {elem, mod}, wordPattern })](#bemnaming-delims-elem-mod-wordpattern-)
* [parse(str)](#parsestr)
* [stringify(obj)](#stringifyobj)
* [elemDelim](#elemdelim)
* [modDelim](#moddelim)
* [modValDelim](#modvaldelim)
* [delims](#delims)
### bemNaming({ delims: {elem, mod}, wordPattern })
Expand Down Expand Up @@ -315,18 +311,36 @@ bemNaming.stringify(new BemEntityName({
// ➜ block__elem_mod_val
```
### elemDelim
### delims
Strings to separate names of bem entities.
Type: `Object`
#### delims.elem
String to separate an element from a block.
### modDelim
Type: `String`
Default: `__`
#### delims.mod.name
String to separate a modifier name from a block or element.
### modValDelim
Type: `String`
Default: `_`
#### delims.mod.val
String to separate a modifier value from the name of the modifier.
Type: `String`
Default: `_`
License
-------
Expand Down
8 changes: 2 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@

const createNaming = require('./lib/create-naming');

const api = [
'parse', 'stringify',
'elemDelim', 'modDelim', 'modValDelim'
];
const originalNaming = createNaming();

api.forEach(function (name) {
createNaming[name] = originalNaming[name];
Object.keys(originalNaming).forEach(key => {
createNaming[key] = originalNaming[key];
});

module.exports = createNaming;
14 changes: 1 addition & 13 deletions lib/create-naming.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,7 @@ function createNaming(options) {
*
* @type {String}
*/
elemDelim: delims.elem,
/**
* String to separate modifiers from blocks and elements.
*
* @type {String}
*/
modDelim: delims.mod.name,
/**
* String to separate value of modifier from name of modifier.
*
* @type {String}
*/
modValDelim: delims.mod.val
delims
};

cache[id] = namespace;
Expand Down
22 changes: 11 additions & 11 deletions test/fields.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,32 @@
const test = require('ava');
const naming = require('../index');

test('should have elemDelim field', t => {
t.truthy(naming.elemDelim);
test('should have elem delim field', t => {
t.truthy(naming.delims.elem);
});

test('should have modDelim field', t => {
t.truthy(naming.modDelim);
test('should have mod name delim field', t => {
t.truthy(naming.delims.mod.name);
});

test('should have modValDelim field', t => {
t.truthy(naming.modValDelim);
test('should have mod val delim field', t => {
t.truthy(naming.delims.mod.val);
});

test('should create namespace with elemDelim field', t => {
const myNaming = naming();

t.truthy(myNaming.elemDelim);
t.truthy(myNaming.delims.elem);
});

test('should create namespace with modDelim field', t => {
test('should create namespace with mod name delim field', t => {
const myNaming = naming();

t.truthy(myNaming.modDelim);
t.truthy(myNaming.delims.mod.name);
});

test('should create namespace with modValDelim field', t => {
test('should create namespace with mod val delim field', t => {
const myNaming = naming();

t.truthy(myNaming.modValDelim);
t.truthy(myNaming.delims.mod.val);
});
14 changes: 7 additions & 7 deletions test/options.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,26 @@ test('should throw error if specified preset is unknow', t => {
test('should provide elem option', t => {
const myNaming = naming({ delims: { elem: '==' } });

t.is(myNaming.elemDelim, '==');
t.is(myNaming.delims.elem, '==');
});

test('should support mod option as string', t => {
const myNaming = naming({ delims: { mod: '--' } });

t.is(myNaming.modDelim, '--');
t.is(myNaming.modValDelim, '--');
t.is(myNaming.delims.mod.name, '--');
t.is(myNaming.delims.mod.val, '--');
});

test('should support mod option as object', t => {
const myNaming = naming({ delims: { mod: { name: '--', val: '_' } } });

t.is(myNaming.modDelim, '--');
t.is(myNaming.modValDelim, '_');
t.is(myNaming.delims.mod.name, '--');
t.is(myNaming.delims.mod.val, '_');
});

test('should use default value if mod.val is not specified', t => {
const myNaming = naming({ delims: { mod: { name: '--' } } });

t.is(myNaming.modDelim, '--');
t.is(myNaming.modValDelim, naming.modValDelim);
t.is(myNaming.delims.mod.name, '--');
t.is(myNaming.delims.mod.val, naming.delims.mod.val);
});

0 comments on commit 2faeb10

Please sign in to comment.