Skip to content
This repository was archived by the owner on Feb 4, 2018. It is now read-only.

Commit ab86b66

Browse files
authored
Merge pull request #65 from bem-sdk/issue-64
feat(isBemEntityName): add `isBemEntityName` method
2 parents 0d84693 + 776bfc0 commit ab86b66

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ API
105105
* [isEqual(entityName)](#isequalentityname)
106106
* [toString()](#tostring)
107107
* [valueOf()](#valueof)
108+
* [isBemEntityName()](#isbementityname)
108109

109110
### constructor(obj)
110111

@@ -193,7 +194,6 @@ Parameter | Type | Description
193194
-------------|-----------------|-----------------------
194195
`entityName` | `BemEntityName` | The entity to compare.
195196

196-
197197
Determines whether specified entity is the deepEqual entity.
198198

199199
```js
@@ -233,6 +233,23 @@ name.valueOf();
233233
// ➜ { block: 'button', mod: { name: 'focused', value: true } }
234234
```
235235

236+
### isBemEntityName()
237+
238+
Determines whether specified entity is instance of BemEntityName.
239+
240+
Parameter | Type | Description
241+
-------------|-----------------|-----------------------
242+
`entityName` | `BemEntityName` | The entity to check.
243+
244+
```js
245+
const BemEntityName = require('@bem/entity-name');
246+
247+
const entityName = new BemEntityName({ block: 'input' });
248+
249+
BemEntityName.isBemEntityName(entityName); // true
250+
BemEntityName.isBemEntityName({}); // false
251+
```
252+
236253
Debuggability
237254
-------------
238255

index.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ module.exports = class BemEntityName {
4747
} else if (modObj || hasModVal) {
4848
throw new Error('This is not valid BEM entity: the field `mod.name` is undefined.');
4949
}
50+
51+
this.__isBemEntityName__ = true;
5052
}
5153

5254
/**
@@ -256,4 +258,22 @@ module.exports = class BemEntityName {
256258
isEqual(entityName) {
257259
return entityName && (this.id === entityName.id);
258260
}
261+
262+
/**
263+
* Determines whether specified entity is instance of BemEntityName.
264+
*
265+
* @param {BemEntityName} entityName - the entity to check.
266+
*
267+
* @returns {boolean} A Boolean indicating whether or not specified entity is instance of BemEntityName.
268+
* @example
269+
* const BemEntityName = require('@bem/entity-name');
270+
*
271+
* const entityName = new BemEntityName({ block: 'input' });
272+
*
273+
* BemEntityName.isBemEntityName(entityName); // true
274+
* BemEntityName.isBemEntityName({}); // false
275+
*/
276+
static isBemEntityName(entityName) {
277+
return entityName && entityName.__isBemEntityName__;
278+
}
259279
};

test/is-bem-entity-name.test.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const test = require('ava');
2+
3+
const BemEntityName = require('../index');
4+
5+
test('should check valid entities', t => {
6+
const entityName = new BemEntityName({ block: 'block' });
7+
8+
t.true(BemEntityName.isBemEntityName(entityName));
9+
});
10+
11+
test('should not pass invalid blocks', t => {
12+
t.falsy(BemEntityName.isBemEntityName(new Array()));
13+
});
14+
15+
test('should not pass null', t => {
16+
t.falsy(BemEntityName.isBemEntityName(null));
17+
});

0 commit comments

Comments
 (0)