Skip to content

Commit 9f7ec62

Browse files
pasha-codefresholegz-codefreshdenis-codefresh
committed
SAAS-4818 #time 0h 50m refatoring of cmd command (#381)
* SAAS-4818 #time 0h 50m refatoring of cmd command * SAAS-4818 #time 0h 1m игьз * SAAS-4818 #time 0h 20m Made some properties as static * rebuild Co-authored-by: olegz-codefresh <58692269+olegz-codefresh@users.noreply.github.com> Co-authored-by: Denis Melnik <58072595+denis-codefresh@users.noreply.github.com>
1 parent 6f04765 commit 9f7ec62

File tree

6 files changed

+50
-33
lines changed

6 files changed

+50
-33
lines changed

lib/interface/cli/commands/root/create.cmd.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@ const _ = require('lodash');
22
const CFError = require('cf-errors');
33
const Command = require('../../Command');
44
const { crudFilenameOption } = require('../../helpers/general');
5-
const creatingEntities = require('../../helpers/creatingEntities');
5+
const EntitiesManifests = require('../../helpers/entitiesManifests');
66
const yargs = require('yargs');
77

8+
function _getSupportedResourcesStr() {
9+
return EntitiesManifests.list
10+
.map(entity => `\n\t'${entity}'`)
11+
.join('');
12+
}
813
const get = new Command({
914
root: true,
1015
command: 'create',
1116
description: 'Create a resource from a file or stdin',
12-
usage: 'Supported resources: \n\t\'context\'\n\t\'pipeline\'\'\n\t\'step-type\'',
17+
usage: `Supported resources: ${_getSupportedResourcesStr()}`,
1318
webDocs: {
1419
description: 'Create a resource from a file, directory or url',
1520
category: 'Operate On Resources',
@@ -34,13 +39,8 @@ const get = new Command({
3439
throw new CFError('Name is missing');
3540
}
3641

37-
const entities = creatingEntities({ name, data });
38-
39-
if (!entities[entity]) {
40-
throw new CFError(`Entity: ${entity} not supported`);
41-
}
42-
43-
await entities[entity]();
42+
const manifests = new EntitiesManifests({ name, data });
43+
await manifests.createEntity(entity);
4444
console.log(`${_.capitalize(entity)}: ${name} created`);
4545
},
4646
});

lib/interface/cli/helpers/creatingEntities.js

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const _ = require('lodash');
2+
const CFError = require('cf-errors');
3+
const { validatePipelineSpec, checkOrProjectExists } = require('./validation');
4+
const { sdk } = require('../../../logic');
5+
6+
class EntitiesManifests {
7+
constructor({ name, data } = {}) {
8+
this.name = name;
9+
this.data = data;
10+
}
11+
12+
createEntity(entity) {
13+
if (!EntitiesManifests._entities[entity]) {
14+
throw new CFError(`Entity: ${entity} not supported`);
15+
}
16+
return EntitiesManifests._entities[entity]({
17+
name: this.name,
18+
data: this.data,
19+
});
20+
}
21+
}
22+
23+
EntitiesManifests._entities = {
24+
context: ({ data }) => sdk.contexts.create(data),
25+
'step-type': ({ data }) => sdk.steps.create(data),
26+
project: ({ name, data }) => checkOrProjectExists(name)
27+
.then(() => sdk.projects.create({ projectName: name, ..._.pick(data.metadata, ['tags', 'variables']) })),
28+
pipeline: ({ data }) => validatePipelineSpec(data)
29+
.then((result = {}) => (result.valid ? sdk.pipelines.create(data) : console.warn(result.message))),
30+
};
31+
32+
EntitiesManifests.list = Object.keys(EntitiesManifests._entities);
33+
34+
module.exports = EntitiesManifests;

lib/interface/cli/helpers/helpers.unit.spec.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const _ = require('lodash');
22
const helper = require('./image');
3-
const moment = require('moment');
4-
const creatingEntities = require('./creatingEntities');
3+
const EntitiesManifests = require('./entitiesManifests');
54

65
const { extractImages } = helper;
76

@@ -19,12 +18,11 @@ describe('helpers unit tests', () => {
1918
request.mockClear();
2019
await configureSdk(); // eslint-disable-line
2120
});
22-
const entities = creatingEntities({});
23-
it('should be an Object', () => expect(entities instanceof Object).toBe(true));
24-
it('should have some size', () => expect(_.size(entities)).not.toBe(0));
25-
for (const entity in entities) {
26-
it(`${entity} should be a function`, () => expect(entities[entity] instanceof Function).toBe(true));
27-
it(`${entity} should be promise`, () => expect(entities[entity]().catch(() => null) instanceof Promise).toBe(true));
21+
const manifests = new EntitiesManifests({});
22+
23+
it('should have some length', () => expect(EntitiesManifests.list.length).not.toBe(0));
24+
for (const entity of EntitiesManifests.list) {
25+
it(`${entity} should be promise`, () => expect(manifests.createEntity(entity).catch(() => null) instanceof Promise).toBe(true));
2826
}
2927
});
3028

lib/logic/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@ const sdk = require('./sdk');
33
module.exports = {
44
sdk,
55
};
6-

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codefresh",
3-
"version": "0.39.3",
3+
"version": "0.39.4",
44
"description": "Codefresh command line utility",
55
"main": "index.js",
66
"preferGlobal": true,

0 commit comments

Comments
 (0)