From dfa2d51e37076b5583ea32c2f852d4399f80c32e Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Tue, 3 Aug 2021 16:24:59 -0300 Subject: [PATCH] new(basic.gblib): New TOLIST, APPEND, SORT TO keyword.. --- .../basic.gblib/services/DialogKeywords.ts | 10 ++++++ packages/basic.gblib/services/GBVMService.ts | 15 ++++++-- .../basic.gblib/services/SystemKeywords.ts | 36 ++++++++++++++++--- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/packages/basic.gblib/services/DialogKeywords.ts b/packages/basic.gblib/services/DialogKeywords.ts index 71d3a1ac..b742f683 100644 --- a/packages/basic.gblib/services/DialogKeywords.ts +++ b/packages/basic.gblib/services/DialogKeywords.ts @@ -133,6 +133,16 @@ export class DialogKeywords { return date.toLocaleString('en-us', { weekday: 'short' }); } + /** + * Returns specified list member separated by comma. + * + * @example TALK TOLIST (array, member) + * + */ + public toList(array, member) { + return Array.prototype.map.call(array, (item)=> { return item[member]; }).join(","); + } + /** * Returns the specified time in format hh:dd. * diff --git a/packages/basic.gblib/services/GBVMService.ts b/packages/basic.gblib/services/GBVMService.ts index 35448b9b..f5c03552 100644 --- a/packages/basic.gblib/services/GBVMService.ts +++ b/packages/basic.gblib/services/GBVMService.ts @@ -161,10 +161,11 @@ export class GBVMService extends GBService { username = this.userName(step); mobile = this.userMobile(step); from = mobile; - ubound = function(list){return list.length}; - isarray = function(list){return Array.isArray(list) }; + ubound = function(array){return array.length}; + isarray = function(array){return Array.isArray(array) }; weekday = this.getWeekFromDate; hour = this.getHourFromDate; + tolist = this.toList; headers = {}; ${code} @@ -240,6 +241,14 @@ export class GBVMService extends GBService { return `${$1} = sys().find(${$2})\n`; }); + code = code.replace(/(\w)\s*\=\s*append\s*(.*)/gi, ($0, $1, $2, $3) => { + return `${$1} = sys().append(${$2})\n`; + }); + + code = code.replace(/(\w+)\s*\=\s*sort\s*(\w+)\s*by(.*)/gi, ($0, $1, $2, $3) => { + return `${$1} = sys().sortBy(${$2}, ${$3})\n`; + }); + code = code.replace(/(wait)\s*(\d+)/gi, ($0, $1, $2) => { return `sys().wait(${$2})`; }); @@ -429,6 +438,7 @@ export class GBVMService extends GBService { parsedCode = parsedCode.replace(/(\btoday\b)(?=(?:[^"]|"[^"]*")*$)/gi, 'await this.getToday(step)'); parsedCode = parsedCode.replace(/(\bweekday\b)(?=(?:[^"]|"[^"]*")*$)/gi, 'weekday'); parsedCode = parsedCode.replace(/(\bhour\b)(?=(?:[^"]|"[^"]*")*$)/gi, 'hour'); + parsedCode = parsedCode.replace(/(\btolist\b)(?=(?:[^"]|"[^"]*")*$)/gi, 'tolist'); parsedCode = beautify(parsedCode, { indent_size: 2, space_in_empty_paren: true }); fs.writeFileSync(jsfile, parsedCode); @@ -491,6 +501,7 @@ export class GBVMService extends GBService { code = code.replace('ubound = async', 'ubound ='); // TODO: Improve this. code = code.replace('hour = await', 'hour ='); // TODO: Improve this. code = code.replace('weekday = await', 'weekday ='); // TODO: Improve this. + code = code.replace('tolist = await', 'tolist ='); // TODO: Improve this. code = code.replace('isArray = async', 'isArray ='); // TODO: Waiting for a compiler. return code; diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index 9233e553..3c8c9cdf 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -74,6 +74,17 @@ export class SystemKeywords { this.dk = dk; } + /** + * Retrives the content of a given URL. + */ + public async append(...args) { + return [].concat(...args); + } + + public async sortBy(array, memberName) { + return array ? [].sort(p => p[memberName]) : null; + } + /** * Retrives the content of a given URL. */ @@ -316,6 +327,15 @@ export class SystemKeywords { operator: op.toString().replace(/\//g, '').replace(/\\/g, '').replace(/\b/g, ''), value: parts[1].trim() }; + + // Swaps values and names in case of IN operators. + + if (filter.operator === 'not in' || filter.operator === 'in') { + const columnName = filter.columnName; + filter.columnName = filter.value; + filter.value = columnName; + } + done = true; } }); @@ -371,8 +391,7 @@ export class SystemKeywords { let table = []; table.push({ 'this is a hidden base 0': 'element' }); - let foundIndex = 0; - + let foundIndex = 1; // Fills the row variable. @@ -390,6 +409,16 @@ export class SystemKeywords { filterAcceptCount++; } break; + case 'not in': + if (filter.value.indexOf(result)) { + filterAcceptCount++; + } + break; + case 'in': + if (!filter.value.indexOf(result)) { + filterAcceptCount++; + } + break; } break; case 'number': @@ -451,9 +480,6 @@ export class SystemKeywords { } } - - - /** * Creates a folder in the bot instance drive. *