chore(JobExecutor): use value-matcher (#633)

This commit is contained in:
badrAZ 2017-12-28 11:51:23 +01:00 committed by Julien Fontanet
parent c8dc786008
commit 0b6bb65c17
3 changed files with 17 additions and 33 deletions

View File

@ -108,6 +108,7 @@
"through2": "^2.0.3", "through2": "^2.0.3",
"tmp": "^0.0.33", "tmp": "^0.0.33",
"uuid": "^3.0.1", "uuid": "^3.0.1",
"value-matcher": "^0.0.0",
"ws": "^3.3.3", "ws": "^3.3.3",
"xen-api": "^0.16.0", "xen-api": "^0.16.0",
"xml2js": "^0.4.19", "xml2js": "^0.4.19",

View File

@ -1,18 +1,14 @@
import Bluebird from 'bluebird' import Bluebird from 'bluebird'
import { BaseError } from 'make-error' import { BaseError } from 'make-error'
import { createPredicate } from 'value-matcher'
import { timeout } from 'promise-toolbox' import { timeout } from 'promise-toolbox'
import { import {
assign, assign,
every,
filter, filter,
find, find,
isArray,
isEmpty, isEmpty,
isPlainObject,
map, map,
mapValues, mapValues,
size,
some,
} from 'lodash' } from 'lodash'
import { crossProduct } from './math' import { crossProduct } from './math'
@ -35,32 +31,6 @@ export class UnsupportedVectorType extends JobExecutorError {
// =================================================================== // ===================================================================
const match = (pattern, value) => {
if (isPlainObject(pattern)) {
if (size(pattern) === 1) {
let op
if ((op = pattern.__or) !== undefined) {
return some(op, subpattern => match(subpattern, value))
}
if ((op = pattern.__not) !== undefined) {
return !match(op, value)
}
}
return isPlainObject(value) && every(pattern, (subpattern, key) => (
value[key] !== undefined && match(subpattern, value[key])
))
}
if (isArray(pattern)) {
return isArray(value) && every(pattern, subpattern =>
some(value, subvalue => match(subpattern, subvalue))
)
}
return pattern === value
}
const paramsVectorActionsMap = { const paramsVectorActionsMap = {
extractProperties ({ mapping, value }) { extractProperties ({ mapping, value }) {
return mapValues(mapping, key => value[key]) return mapValues(mapping, key => value[key])
@ -71,7 +41,7 @@ const paramsVectorActionsMap = {
)) ))
}, },
fetchObjects ({ pattern }) { fetchObjects ({ pattern }) {
const objects = filter(this.xo.getObjects(), object => match(pattern, object)) const objects = filter(this.xo.getObjects(), createPredicate(pattern))
if (isEmpty(objects)) { if (isEmpty(objects)) {
throw new Error('no objects match this pattern') throw new Error('no objects match this pattern')
} }

View File

@ -33,6 +33,13 @@
dependencies: dependencies:
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.31"
"@babel/polyfill@^7.0.0-beta.36":
version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0-beta.36.tgz#c37320d0e38f2cb6da3a78889b380cb529c7a957"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.1"
"@babel/template@7.0.0-beta.31": "@babel/template@7.0.0-beta.31":
version "7.0.0-beta.31" version "7.0.0-beta.31"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda"
@ -5973,7 +5980,7 @@ regenerator-runtime@^0.10.5:
version "0.10.5" version "0.10.5"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
regenerator-runtime@^0.11.0: regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
version "0.11.1" version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
@ -7099,6 +7106,12 @@ validate-npm-package-license@^3.0.1:
spdx-correct "~1.0.0" spdx-correct "~1.0.0"
spdx-expression-parse "~1.0.0" spdx-expression-parse "~1.0.0"
value-matcher@^0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/value-matcher/-/value-matcher-0.0.0.tgz#c0caf87dc3998a68ea56b31fd1916adefe39f7be"
dependencies:
"@babel/polyfill" "^7.0.0-beta.36"
varint@^5.0.0, varint@~5.0.0: varint@^5.0.0, varint@~5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.0.tgz#d826b89f7490732fabc0c0ed693ed475dcb29ebf" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.0.tgz#d826b89f7490732fabc0c0ed693ed475dcb29ebf"