1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-29 05:40:04 +00:00

Compare commits

...

10 Commits

Author SHA1 Message Date
Allan Bowe
d254870439 Merge pull request #164 from sasjs/mf_verify
fix: updating mm_x macros following fix to mf_verifymacvars
2022-02-06 20:58:55 +02:00
munja
303225cb85 fix: updating mm_x macros following fix to mf_verifymacvars 2022-02-06 19:57:52 +01:00
Allan Bowe
90de167643 Merge pull request #163 from sasjs/mf_verfiy
fix: updating mf_abort param in mf_verifymacvars, also fixing return …
2022-02-06 17:16:54 +02:00
munja
8ee997de8e fix: updating mf_abort param in mf_verifymacvars, also fixing return code as per documentation, adding a test, and updating the header info 2022-02-06 16:11:18 +01:00
Allan Bowe
e27f6ac716 Merge pull request #162 from sasjs/mf_getapploc
fix: adding support for testsetup and testteardown in mf_getapploc.sas
2022-02-05 22:56:10 +02:00
munja
ec4de95fcf fix: reset syscc for testterm syscc check 2022-02-05 21:55:50 +01:00
munja
df0fa95519 fix: adding sasjs/core dependency - see: https://github.com/sasjs/cli/issues/1113 2022-02-05 21:29:03 +01:00
munja
2fe7fba79b fix: adding support for testsetup and testteardown in mf_getapploc.sas 2022-02-05 21:19:26 +01:00
Allan Bowe
e40234ee29 Merge pull request #160 from sasjs/allanbowe-patch-1
chore(docs): Update README.md to clarify LUA prefixes
2022-02-04 20:56:51 +02:00
Allan Bowe
a287cc27a7 Update README.md 2022-02-04 18:56:19 +00:00
13 changed files with 143 additions and 39 deletions

View File

@@ -81,7 +81,7 @@ Macros used for interfacing with SAS Viya.
Wait - this is a macro library - what is LUA doing here? Well, it is a little known fact that you CAN run LUA within a SAS Macro. It has to be written to a text file with a `.lua` extension, from where you can `%include` it. So, without using the `proc lua` wrapper.
To contribute, simply write your freeform LUA in the LUA folder. Then run the `build.py`, which will convert your LUA into a data step with put statements, and create the macro wrapper with a `ml_` prefix. You can then use your module in any program by running:
To contribute, simply write your freeform LUA in the LUA folder. Then run the `build.py`, which will convert all files with a ".lua" extension into a macro wrapper with an `ml_` prefix (embedding the necessary data step put statements). You can then use your module in any program by running:
```sas
/* compile the lua module */
@@ -95,8 +95,7 @@ endsubmit;
run;
```
- X command enabled
- Prefixes: _mmw_,_mmu_,_mmx_
- Prefixes: _ml_
## Installation
@@ -129,11 +128,11 @@ filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas";
- _mf_ for macro functions (can be used in open code).
- _ml_ for macros that are used to compile LUA modules
- _mm_ for metadata macros (interface with the metadata server).
- _mmx_ for macros that use metadata and are XCMD enabled
- _mmx_ for macros that use metadata and are XCMD enabled (working on both windows and unix)
- _mp_ for macro procedures (which generate sas code)
- _ms_ for macro procedures that will only work with [@sasjs/server](https://github.com/sasjs/server)
- _mv_ for macro procedures that will only work in Viya
- _mx_ for macros that are XCMD enabled
- _mx_ for macros that are XCMD enabled (working on both windows and unix)
- follow verb-noun convention
- unix style line endings (lf)
- individual lines should be no more than 80 characters long

57
all.sas
View File

@@ -352,6 +352,7 @@ https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md#functionex
@li /data
@li /jobs
@li /services
@li /tests
@li /tests/jobs
@li /tests/services
@li /tests/macros
@@ -383,9 +384,13 @@ https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md#functionex
/**
* First check we are not in the tests/macros folder (which has no subfolders)
* or specifically in the testsetup or testteardown services
*/
%if %index(&pgm,/tests/macros/) %then %do;
%let root=%substr(&pgm,1,%index(&pgm,/tests/macros)-1);
%if %index(&pgm,/tests/macros/)
or %index(&pgm,/tests/testsetup)
or %index(&pgm,/tests/testteardown)
%then %do;
%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);
&root
%return;
%end;
@@ -1802,7 +1807,7 @@ Usage:
%mend mf_uid;/**
@file
@brief Checks if a set of macro variables exist / contain values.
@brief Checks if a set of macro variables exist AND contain values.
@details Writes ERROR to log if abortType is SOFT, else will call %mf_abort.
Usage:
@@ -1816,10 +1821,11 @@ Usage:
<h4> SAS Macros </h4>
@li mf_abort.sas
@param verifyvars space separated list of macro variable names
@param makeupcase= set to YES to convert all variable VALUES to
@param [in] verifyvars Space separated list of macro variable names
@param [in] makeupcase= (NO) Set to YES to convert all variable VALUES to
uppercase.
@param mAbort= Abort Type. Default is SOFT (writes err to log).
@param [in] mAbort= (SOFT) Abort Type. When SOFT, simply writes an err
message to the log.
Set to any other value to call mf_abort (which can be configured to abort in
various fashions according to context).
@@ -1860,9 +1866,15 @@ Usage:
%goto exit_success;
%exit_err:
%if &mAbort=SOFT %then %put %str(ERR)OR: &abortmsg;
%else %mf_abort(mac=mf_verifymacvars,type=&mabort,msg=&abortmsg);
%put %str(ERR)OR: &abortmsg;
%mf_abort(iftrue=(&mabort ne SOFT),
mac=mf_verifymacvars,
msg=%str(&abortmsg)
)
0
%return;
%exit_success:
1
%mend mf_verifymacvars;
/**
@@ -12603,7 +12615,10 @@ run;
%&mD.put Executing &sysmacroname..sas;
%&mD.put _local_;
%mf_verifymacvars(tree name)
%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: tree name)
)
/**
* check tree exists
@@ -12827,7 +12842,10 @@ run;
%&mD.put Executing &sysmacroname..sas;
%&mD.put _local_;
%mf_verifymacvars(tree name)
%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: tree name)
)
/**
* check tree exists
@@ -13196,12 +13214,14 @@ run;
filename &frefin temp;
filename &frefout temp;
%mp_abort(iftrue= (
&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0
)
,mac=&sysmacroname
,msg=%str(Empty inputs: libname libref engine servercontext tree)
)
%if &engine=BASE %then %do;
%mf_verifymacvars(libname libref engine servercontext tree)
/**
* Check that the ServerContext exists
*/
@@ -13492,7 +13512,12 @@ filename &frefout temp;
%&mD.put Executing mm_CreateSTP.sas;
%&mD.put _local_;
%mf_verifymacvars(stpname filename directory tree)
%mp_abort(
iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: stpname filename directory tree)
)
%mp_dropmembers(%scan(&outds,2,.))
/**

View File

@@ -15,6 +15,7 @@
@li /data
@li /jobs
@li /services
@li /tests
@li /tests/jobs
@li /tests/services
@li /tests/macros
@@ -46,9 +47,13 @@
/**
* First check we are not in the tests/macros folder (which has no subfolders)
* or specifically in the testsetup or testteardown services
*/
%if %index(&pgm,/tests/macros/) %then %do;
%let root=%substr(&pgm,1,%index(&pgm,/tests/macros)-1);
%if %index(&pgm,/tests/macros/)
or %index(&pgm,/tests/testsetup)
or %index(&pgm,/tests/testteardown)
%then %do;
%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);
&root
%return;
%end;

View File

@@ -1,6 +1,6 @@
/**
@file
@brief Checks if a set of macro variables exist / contain values.
@brief Checks if a set of macro variables exist AND contain values.
@details Writes ERROR to log if abortType is SOFT, else will call %mf_abort.
Usage:
@@ -14,10 +14,11 @@
<h4> SAS Macros </h4>
@li mf_abort.sas
@param verifyvars space separated list of macro variable names
@param makeupcase= set to YES to convert all variable VALUES to
@param [in] verifyvars Space separated list of macro variable names
@param [in] makeupcase= (NO) Set to YES to convert all variable VALUES to
uppercase.
@param mAbort= Abort Type. Default is SOFT (writes err to log).
@param [in] mAbort= (SOFT) Abort Type. When SOFT, simply writes an err
message to the log.
Set to any other value to call mf_abort (which can be configured to abort in
various fashions according to context).
@@ -58,8 +59,14 @@
%goto exit_success;
%exit_err:
%if &mAbort=SOFT %then %put %str(ERR)OR: &abortmsg;
%else %mf_abort(mac=mf_verifymacvars,type=&mabort,msg=&abortmsg);
%put %str(ERR)OR: &abortmsg;
%mf_abort(iftrue=(&mabort ne SOFT),
mac=mf_verifymacvars,
msg=%str(&abortmsg)
)
0
%return;
%exit_success:
1
%mend mf_verifymacvars;

View File

@@ -59,7 +59,10 @@
%&mD.put Executing &sysmacroname..sas;
%&mD.put _local_;
%mf_verifymacvars(tree name)
%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: tree name)
)
/**
* check tree exists

View File

@@ -47,7 +47,10 @@
%&mD.put Executing &sysmacroname..sas;
%&mD.put _local_;
%mf_verifymacvars(tree name)
%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: tree name)
)
/**
* check tree exists

View File

@@ -133,12 +133,14 @@ run;
filename &frefin temp;
filename &frefout temp;
%mp_abort(iftrue= (
&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0
)
,mac=&sysmacroname
,msg=%str(Empty inputs: libname libref engine servercontext tree)
)
%if &engine=BASE %then %do;
%mf_verifymacvars(libname libref engine servercontext tree)
/**
* Check that the ServerContext exists
*/

View File

@@ -108,7 +108,12 @@
%&mD.put Executing mm_CreateSTP.sas;
%&mD.put _local_;
%mf_verifymacvars(stpname filename directory tree)
%mp_abort(
iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)
,mac=&sysmacroname
,msg=%str(Empty inputs: stpname filename directory tree)
)
%mp_dropmembers(%scan(&outds,2,.))
/**

15
package-lock.json generated
View File

@@ -7,7 +7,8 @@
"name": "@sasjs/core",
"license": "MIT",
"devDependencies": {
"@sasjs/cli": "3.6.0"
"@sasjs/cli": "3.6.0",
"@sasjs/core": "4.4.4"
}
},
"node_modules/@sasjs/adapter": {
@@ -108,6 +109,12 @@
"valid-url": "^1.0.9"
}
},
"node_modules/@sasjs/core": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.4.4.tgz",
"integrity": "sha512-gN6d0fvhaofp7buemS5KIOo5Bz8lbqhsEQD7SuH5FZ02MQurmfu7A0Zg0lIEi0w2/ptI4M/sZdF4D2DRh1D5xA==",
"dev": true
},
"node_modules/@sasjs/lint": {
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/@sasjs/lint/-/lint-1.11.2.tgz",
@@ -2822,6 +2829,12 @@
}
}
},
"@sasjs/core": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.4.4.tgz",
"integrity": "sha512-gN6d0fvhaofp7buemS5KIOo5Bz8lbqhsEQD7SuH5FZ02MQurmfu7A0Zg0lIEi0w2/ptI4M/sZdF4D2DRh1D5xA==",
"dev": true
},
"@sasjs/lint": {
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/@sasjs/lint/-/lint-1.11.2.tgz",

View File

@@ -33,6 +33,7 @@
"prepare": "git rev-parse --git-dir && git config core.hooksPath ./.git-hooks || true"
},
"devDependencies": {
"@sasjs/cli": "3.6.0"
"@sasjs/cli": "3.6.0",
"@sasjs/core": "4.4.4"
}
}

View File

@@ -46,4 +46,20 @@
),
desc=Checking tests/macros appLoc matches (which has no subfolder),
outds=work.test_results
)
%mp_assert(
iftrue=(
"%mf_getapploc(/some/area/tests/testsetup)"="/some/area"
),
desc=Checking tests/testsetup operation,
outds=work.test_results
)
%mp_assert(
iftrue=(
"%mf_getapploc(/some/area/tests/testteardown)"="/some/area"
),
desc=Checking tests/teardown operation,
outds=work.test_results
)

View File

@@ -0,0 +1,22 @@
/**
@file
@brief Testing mf_verifymacvars macro
<h4> SAS Macros </h4>
@li mf_verifymacvars.sas
@li mp_assert.sas
@li mp_assertscope.sas
**/
%let var1=x;
%let var2=y;
%mp_assertscope(SNAPSHOT)
%mp_assert(
iftrue=(%mf_verifymacvars(var1 var2)=1),
desc=Checking macvars exist,
outds=work.test_results
)
%mp_assertscope(COMPARE)

View File

@@ -76,3 +76,6 @@ run;
iftrue=(&syscc ne 0),
desc=Check that non zero return code is returned if called job fails
)
/* set syscc to zero for final check in testterm */
%let syscc=0;