Skip to content
This repository has been archived by the owner on Jun 30, 2020. It is now read-only.

Commit

Permalink
added processor to set the identifier of anonymous items to the paren…
Browse files Browse the repository at this point in the history
…t identifier
  • Loading branch information
grahamdyson committed Dec 16, 2018
1 parent e5bfc82 commit 5bd35f0
Show file tree
Hide file tree
Showing 7 changed files with 249 additions and 1 deletion.
23 changes: 23 additions & 0 deletions .vscode/launch.json
Expand Up @@ -210,6 +210,29 @@
"type": "node",
"useWSL": true
},
{
"args":
[
"--items=[item1,item2]",
],
"name": "processor setIdentifierOfAnonymousToParent",
"program": "${workspaceFolder}/setIdentifierOfAnonymousToParent/bin.js",
"request": "launch",
"type": "node",
"useWSL": true
},
{
"args":
[
"--runInBand",
"setIdentifierOfAnonymousToParent/test.js",
],
"name": "processor setIdentifierOfAnonymousToParent jest",
"program": "${workspaceFolder}/node_modules/jest/bin/jest.js",
"request": "launch",
"type": "node",
"useWSL": true
}
{
"args":
[
Expand Down
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -26,6 +26,7 @@ Currently there are processors written in JavaScript to:
- [remove redundant prefix of parent identifier and separator](removeRedundantParentIdentifierPrefix)
- [remove self dependent items of a type](removeSelfDependentItemsOfType)
- [replace identifiers using a regular expression](replaceIdentifiers)
- [sets the identifier of anonymous items to the parent identifier](setIdentifierOfAnonymousToParent)
- [sets the type of root items](setTypeOfRootItems)
- [unstack independent items](unstackIndependent)

Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -12,6 +12,7 @@
"eunice-processors-removeRedundantParentIdentifierPrefix": "dist/removeRedundantParentIdentifierPrefix/bin.js",
"eunice-processors-removeSelfDependentItemsOfType": "dist/removeSelfDependentItemsOfType/bin.js",
"eunice-processors-replaceIdentifiers": "dist/replaceIdentifiers/bin.js",
"eunice-processors-setIdentifierOfAnonymousToParent": "dist/setIdentifierOfAnonymousToParent/bin.js",
"eunice-processors-setTypeOfRootItems": "dist/setTypeOfRootItems/bin.js",
"eunice-processors-unstackIndependent": "dist/unstackIndependent/bin.js"
},
Expand Down Expand Up @@ -83,5 +84,5 @@
"lint": "npx eslint .",
"test": "npx jest --runInBand"
},
"version": "1.8.2"
"version": "1.9.0"
}
8 changes: 8 additions & 0 deletions setIdentifierOfAnonymousToParent/bin.js
@@ -0,0 +1,8 @@
#!/usr/bin/env node
const
callWithProcessStandardStreamsOfYaml = require("../callWithProcessStandardStreamsOfYaml"),
setIdentifierOfAnonymousToParent = require("./");

callWithProcessStandardStreamsOfYaml(
parameters => setIdentifierOfAnonymousToParent(parameters.items),
);
107 changes: 107 additions & 0 deletions setIdentifierOfAnonymousToParent/index.js
@@ -0,0 +1,107 @@
module.exports =
items =>
items
&&
withParentIdentifier(
null,
)
.getIdentifierOrSetInItemOrLevelOrStack(
items,
);

function withParentIdentifier(
parentIdentifier,
) {
return { getIdentifierOrSetInItemOrLevelOrStack };

function getIdentifierOrSetInItemOrLevelOrStack(
identifierOrItemOrLevelOrStack,
) {
return (
getWhenIdentifier()
||
setInWhenLevelOrStack()
||
setInItem(identifierOrItemOrLevelOrStack)
);

function getWhenIdentifier() {
return (
typeof identifierOrItemOrLevelOrStack === "string"
&&
identifierOrItemOrLevelOrStack
);
}

function setInWhenLevelOrStack() {
return (
Array.isArray(identifierOrItemOrLevelOrStack)
&&
identifierOrItemOrLevelOrStack.map(setInItemOrLevel)
);
}
}

function setInItemOrLevel(
itemOrLevel,
) {
return (
setInWhenLevel(itemOrLevel)
||
getIdentifierOrSetInItem(itemOrLevel)
);
}

function setInWhenLevel(
itemOrLevel,
) {
return (
Array.isArray(itemOrLevel)
&&
itemOrLevel.map(getIdentifierOrSetInItem)
);
}

function getIdentifierOrSetInItem(
identifierOrItem,
) {
return (
getWhenIdentifier()
||
setInItem(identifierOrItem)
);

function getWhenIdentifier() {
return (
typeof identifierOrItem === "string"
&&
identifierOrItem
);
}
}

function setInItem({
id: identifier = parentIdentifier,
items,
...restOrItem
}) {
return (
{
...identifier && { id: identifier },
...restOrItem,
...items && { items: getItems() },
}
);

function getItems() {
return (
withParentIdentifier(
identifier,
)
.getIdentifierOrSetInItemOrLevelOrStack(
items,
)
);
}
}
}
100 changes: 100 additions & 0 deletions setIdentifierOfAnonymousToParent/test.js
@@ -0,0 +1,100 @@
const setIdentifierOfAnonymousToParent = require(".");

test.each(
[
[ null, null ],
[ "item", "item" ],
[ {}, {} ],
[
{ aProperty: "aValue" },
{ aProperty: "aValue" },
],
[
{ id: "item" },
{ id: "item" },
],
[
[ "item1", "item2" ],
[ "item1", "item2" ],
],
[
[ { id: "item1" }, { id: "item2" } ],
[ { id: "item1" }, { id: "item2" } ],
],
[
[
[ "upper1", "upper2" ],
[ "lower1", "lower2" ],
],
[
[ "upper1", "upper2" ],
[ "lower1", "lower2" ],
],
],
[
{
id: "parent",
items: "child",
},
{
id: "parent",
items: "child",
},
],
[
{
id: "parent",
items: {},
},
{
id: "parent",
items: { id: "parent" },
},
],
[
{
aParentProperty: "aParentValue",
id: "parent",
items: { aChildProperty: "aChildValue" },
},
{
aParentProperty:
"aParentValue",
id:
"parent",
items:
{
aChildProperty: "aChildValue",
id: "parent",
},
},
],
[
{
id: "grandparent",
items: { items: { } },
},
{
id:
"grandparent",
items:
{
id: "grandparent",
items: { id: "grandparent" },
},
},
],
],
)(
"%j returns %j",
(
items,
expected,
) =>
expect(
setIdentifierOfAnonymousToParent(
items,
),
)
.toEqual(expected),
);
8 changes: 8 additions & 0 deletions setIdentifierOfAnonymousToParent/testHarnessPlugin.js
@@ -0,0 +1,8 @@
const
processorPlugins = require("@devsnicket/eunice-test-harnesses-processor-plugins"),
setIdentifierOfAnonymousToParent = require("./");

processorPlugins.plugIn({
action: setIdentifierOfAnonymousToParent,
text: "set identifier of anonymous to parent",
});

0 comments on commit 5bd35f0

Please sign in to comment.