1. **Permission** – to increase your response rate, get permission from people first before you send them email marketing messages.
-1. **Personality** – let your personality shine through in all your marketing communications to better connect with your ideal clients.
+c. **Personality** – let your personality shine through in all your marketing communications to better connect with your ideal clients.
1. **Personalization** – narrow your service offerings to a very specialized niche market to make it easier for potential clients to find you.
-
-This document highlights my personal adopted practices to efficiently and uniformly use the Perl language, through to all the code and future revisions.
+cThis document highlights my personal adopted practices to efficiently and uniformly use the Perl language, through to all the code and future revisions.
As the number of projects mount, and experience and the encountered other best practices come to light. Hopefully and possibly, this document will be updated and worked on to reflect, give answers or remind. Why something is implemented in a particular way, and to some readers for god sake, also why?
-## Perl Objects
+# Perl Objects
+
-Perl objects start with **variables** progress to **blocks** where variables are used in a expression context as encountered from one statement to next.
-Grouped and reused operations are called **subroutines**. Subroutines choice of use is, is incredibly in many ways flexible further. Where they can be void, functions and even method like, when used in a **package** object. Beside packaging your variables and subroutines for reuse into a single object. It is worth mentioning, that packages can be placed into modules, for further better organization, however modules are not objects.
### Variables
>However, No permission has been given, to publishing, copy parts of this document,
outside of its project location.
- The only permission been given by the author, is to remove this document from after acquiring any other project code or files, which are open source.
\ No newline at end of file
+ The only permission been given by the author, is to remove this document from after acquiring any other project code or files, which are open source.
* (2024-07-06) - v.3.3.1, **PerlCNF Minor New Release**
Further development on data plugins and tables. First simple many to one (any to single) relationship between tables implemented.
* CNFSQL updated.
- * New CentralDataPlugin
+ * New [CentralDataPlugin](CentralDataPlugin)
* Creates automated SQL queries and synchronization based on a TREE schema, fully automated.
* CNF DATA based instructions, that is tables are converted automatically to and SQL database/
* TestManger major upgrade, has better output and error handling, argument options.
* Check also the latest Perl CNF [example.cnf](./tests/example.cnf) scripted also as an tutorial.
* Yes! That is an actual valid configuration file.
* To only just run it or check use ``` perl ./tests/testExample.pl ```
+---
+TOC
+ * [[You can find the specification here](./Specifications_For_CNF_ReadMe.md).](#[you-can-find-the-specification-here](./specifications_for_cnf_readme.md).)
+1. [Release Status](#release-status)
+2. [Installation Of This Perl GitHub Project](#installation-of-this-perl-github-project)
+3. [Usage](#usage)
+4. [Sample CNF File](#sample-cnf-file)
+5. [Check Online Demo](#check-online-demo)
+6. [Run Test Cases](#run-test-cases)
<<MyItemsTbl<FILE data_my_app.cnf>
```
-## CNF Meta Instructions
+## CNF Meta Instructions For CNF Data
> Various Meta instructions are available to aid processing and decision-making
+1. ```__HAS_HEADER```
+ CNF Data has the column names and specs as first row.
+2. ```__SQL_TABLE__ ```
+ Instructs to create an SQL create statement from the CNF Data Header.
+3.```__SQL_PostgreSQL__```
+ Create/handle PostgresSQL db flavour SQL.
+3. ```__AUTO_NUMBER__ or __AUTONUMBER__```
+ For primary key as the ID, auto number the entry.
+ ```_CNF_ID_``` column type declares the primary key, otherwise just naming an column ```ID``` defaults to the same.
+
+
+ ```CNF
+ <<Employees<DATA> __HAS_HEADER__ __SQL_TABLE__ ____AUTO_NUMBERED__
+ ID`ID_ADDR __CNF_ID__`FullName`Position`Email~
+ ##`1`Jhonny Lagaluga`Cleaner`jlagaluga@inc.com~
+ >>
+ <<Addresses<DATA> __HAS_HEADER__ __SQL_TABLE__
+ ID`Address _TEXT_~
+ 01`sample address line 1
+ line 2
+ ~
+ >>
+ ```
+
+### Data Base Conversion Types
+
+
+
+Column Type | Description
+------------|------------
+__ID__| Default ID name for tables converts to unique primary auto-numbered. ID will be default autonumber an __#__ scripted value.
+___INT__ _| Large Integer Number.
+___NUM__ _| Large Double Number.
+___BOOL__ _| Boolen or alternative type, 0/1 only.
+___TEXT__ _| Varchar type UTF8.
+___DATE__ _| Date time and zone type.
+___CNF_ID__ _| Similar to ID, but also can separate column in relation to another table ID.
+INDEX| Sets up this column as an lookup index, for fast searches.
+___AUTO__ _| Instructs to auto-number a column.
+___REL__ _| Relative ID to another table.
+
+
***
Please refer to this specifications header and item or section points, on any desired clarifications or research/troubleshooting inquires.
-<center>Sun Stage - v.1.0 2024</center>
+<center>Sun Stage - v.2.0 2025</center>
+++ /dev/null
-<<paragraphs$$<TREE> __HAS_PROCESSING_PRIORITY__
-<content<
- class : main
- pass:true
- div__\ __IN_SHORTIFE__
- class: paragraphs
- div1__\
- class: paragraph
- This is a Perl CNF to HTML example document.
- It is similar to HTML that individual DOM elements.
- Are tree like placed in the body of the TREE instructed CNF Property.
- It is easier to the eye, and more readable. You can be the judge. __~
- __/
- div2__\
- class: paragraph
- Second paragraph here. __~ # A sub node values has to be terminated, otherwise will get skipped.
- __//
->content>
->>
-
-<<paragraphs$$<TREE>
-<content< __IN_SHORTIFE__
-test list type anon with instructions.
->content>
->>
-
-<<paragraphs$$<Simple format of anon.>>>
-<<paranormal$$>value>>>
-
-<<<TREE __IN_SHORTIFE__ meta __\
- @@ __\
- header __\
- link __\
- rel = stylesheet
- href = wsrc/main.css
- Its Text
- ________///
- @@ __\
- tag: css_style
- property: <*<MarkdownPlugin::CSS>*>
- __/
-__/ >>>
\ No newline at end of file
###
# Makes this test unsuited to be skipped as part of an all test suit run.
-# Usually called on a new test file that needs further work or tests to be done to.
-# Also some experimental test files might be only in direct run be only suitable.
-# By default all tests are suited.
+# Usually called or set on a new test file that still needs further work and tests to be done to.
+# Also some experimental test files might be only,to be in direct run be only suitable.
+# By default all tests are suited with my $test = TestManager -> new($0);
+# To make unsuited from a set use: my $test = TestManager -> new($0) -> unsuited();
###
sub unsuited{my $self = shift; $self->{suited} = 0; return $self}
}
if(defined($self->{case_err}) && $self->{case_err} > 0){
my $errors = "errors"; $errors = "error" if $self->{case_err} == 1;
- $result .= $self->{case_err} . BRIGHT_RED . " evaluation $errors.".RESET.BOLD." Status is ";
+ $result .= BRIGHT_RED . $self->{case_err} . " evaluation $errors.".RESET.BOLD." Status is ";
print $result, BRIGHT_RED."FAILED".RESET." for test file:". RESET WHITE.$self->{test_file}."\n". RESET;
print $self->{test_cnt}."|FAILED|".$self->{test_file},"\n"
}else{
}
my $TEST_LOCAL_DIR = './tests';
-my @failed;
+my @failed;my @unsuited_test_files;
my $DISPLAY_ISSUES = 0;
my $RUN_IN_TAINT_MODE = 0;
my $DISPLAY_TESTS_OUTPUT = 1;
run \@perl, \$in, \$output, '2>>', \$warnings, timeout(10); #give 10 sec per test file.
###
if($? == 2048){
+ $unsuited_test_files[@unsuited_test_files] = $file;
$tests_unsuited++; print BOLD. YELLOW."Skipping is unsuited ->$file\n",RESET; next;
}
my @test_ret = $output=~m/(\d*)\|(\w*)\|($CWD\/$file)$/g;
}
foreach ($DISPLAY_ERRORS_OUTPUT && @ERR){
print $_
- }
-
+ }
print "\n",'-'x100, "\n";
+ print BOLD BLUE "\tNumber of test cases run: ", WHITE.$test_cases,"\n",BLUE,
+ "\tNumber of unsuited tests encountered: ", YELLOW.$tests_unsuited,"\n",BLUE,
+ "\tPassed test count: ",BRIGHT_GREEN,"$test_pass\n",BLUE,
+ "\tFailed test file count: ", RED,"$test_fail\n",RESET;
if($test_fail){
- print BOLD BRIGHT_RED, "HALT! Not all test have passed!\n",BLUE,
- "\tNumber of test cases run: ",BOLD, WHITE,$test_cases,"\n",BLUE,
- "\tNumber of unsuited tests encountered: ",BOLD, YELLOW,$tests_unsuited,"\n", BLUE,
- "\tPassed test count: ", BRIGHT_GREEN, "$test_pass\n", BLUE
- "\tFailed test file count: ", BOLD RED,"$test_fail\n",BLUE,
- join "",@failed,
- BOLD WHITE, "Finished with test Suit ->$0\n", RESET;
-
+ print BOLD BRIGHT_RED, "HALT! Not all tests have passed!\n", ( join "", @failed) ,
+ BOLD WHITE, "Finished with test Suit ->$0\n", RESET;
}elsif($test_pass){
- print BOLD.BLUE."Test Suit:", RESET WHITE, " $0 [\n";
+ print BOLD BLUE "Test Suit:", RESET WHITE, "$CWD/$0 [\n";
foreach (@files) {
- print WHITE, "\t\t\t$_\n",;
+ print WHITE, "\t\t$_\n",;
}
- print "\t\t]\n",RESET;
-
+ print BOLD BLUE "]\n",RESET;
print BOLD BLUE "Test files ($test_pass of them), are having $test_cases cases. Have all ", BRIGHT_GREEN ,"SUCCESSFULLY PASSED!", RESET, WHITE,
" (".(scalar localtime).")\n", RESET;
}else{
- print BOLD BRIGHT_RED, "No tests have been run or found!", RESET WHITE, " $0\n", RESET;
+ print BOLD BRIGHT_RED, "No tests have been run or found!",RESET WHITE, " $0\n", RESET;
+ }
+ if(@unsuited_test_files){
+ print BOLD WHITE."List of unsuited test files -> [\n".RESET;
+ foreach(@unsuited_test_files){
+ print YELLOW, "\t$CWD/$_\n",;
+ }
+ print BOLD WHITE."]\n",RESET;
}
if($DISPLAY_ISSUES && %WARN){
print BOLD YELLOW, "Buddy, sorry to tell you. But you got the following Perl Issues:\n",BLUE;
foreach(keys %WARN){
my $w = $WARN{$_};
- $w=~ s/\s+eval\s\{...\}.*$//gs;
- $w=~ s/\scalled\sat/\ncalled at/s;
+ $w=~ s/\s+eval\s\{...\}.*$//gs;
+ $w=~ s/\scalled\sat/\ncalled at/s;
print "In file: $_".MAGENTA."\n",$w."\n", BLUE;
}
print RESET;