Skip to content

Commit

Permalink
[readme] updated
Browse files Browse the repository at this point in the history
  • Loading branch information
exilon committed Oct 22, 2020
1 parent 78ba69a commit 37c616e
Showing 1 changed file with 117 additions and 0 deletions.
117 changes: 117 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Small delphi/Firemonkey(Windows, Linux, Android, OSX & IOS) and fpc(Windows & Li
* **Caching:**: Cache string or objects to retrieve fast later.
* **Templating:** Simple string templating with dictionaries.
* **Debuging:** Utils to debug your code.
* **Parameters:** Work with commandline parameters.

**Main units description:**

Expand Down Expand Up @@ -56,10 +57,12 @@ Small delphi/Firemonkey(Windows, Linux, Android, OSX & IOS) and fpc(Windows & Li
* **Quick.Pooling:** Creation of object pool to avoid external resource consum exhausts and overheads.
* **Quick.Template:** String template replacing with dictionary or delegate.
* **Quick.Debug.Utils:** Simple debugging and code benchmark utils.
* **Quick.Parameters:** Work with commandline parameters like a class.


**Updates:**

* NEW: QuickParameters to work with commandline arguments like a class.
* NEW: HttpServer custom and dynamic error pages.
* NEW: Debug utils
* NEW: String Template
Expand Down Expand Up @@ -1221,4 +1224,118 @@ end;
//29-06-2020 22:58:47.810 [EXIT] >> TCalculator.Mult in 2,00s
```

**Quick.Parameters:**
--
Working with commandline parameters will be easy using commandline extension.
Define a class inherited from TParameters or TServiceParameters (if working with QuickAppServices) with your possible arguments as published properties:
```delphi
uses
Quick.Parameters;
type
TCommand = (Copy, Move, Remove);
TMyMode = (mdAdd, mdSelect, mdRemove);
[CommandDescription('Simple console application example with Quick.Parameters')]
TMyParameter = class(TParameters)
private
fCommand : TCommand;
fHost : string;
fPort : Integer;
fRetries : Integer;
fUseTCP : Boolean;
fConfigFile: string;
fSilent: Boolean;
fMyMode: TMyMode;
fLogErrorsConsole: Boolean;
fLogErrors: Boolean;
fShowReport: Boolean;
published
[ParamCommand(1)]
[ParamRequired]
[ParamHelp('Command action.','command-action')]
property Command : TCommand read fCommand write fCommand;
[ParamName('HostName'),ParamRequired]
[ParamHelp('Define host to connect.','host')]
property Host : string read fHost write fHost;
[ParamName('Port','p')]
[ParamValueIsNextParam]
[ParamHelp('Define Port to connect (default 80)','port')]
property Port : Integer read fPort write fPort;
[ParamHelp('Number of max retries.')]
property Retries : Integer read fRetries write fRetries;
[ParamHelp('Path to config.','path')]
[ParamName('Config-file')]
property ConfigFile : String read fConfigFile write fConfigFile;
[ParamHelp('Silent mode.')]
property Silent : Boolean read fSilent write fSilent;
[ParamHelp('Modes (mdAdd, mdSelect, mdRemove)')]
property Mode : TMyMode read fMyMode write fMyMode;
end;
```
And pass to de commandline extension:
```delphi
services.AddCommandline<TArguments>;
```
When you call your exe with --help you get documentation. If you need to check for a switch or value, you can do like this:
```delphi
if services.Commandline<TArguments>.Port = 0 then ...
if services.Commandline<TArguments>.Silent then ...
```
QuickParameters uses custom attributes to define special parameter conditions:

- **CommandDescription:** Defines text to describe your application in help documentation.

- **ParamCommand(number):** Defines static position into commandline for single parameters.

- **ParamName(name,alias):** Define a diferent name for parameter. Allows to use special characters not allowed for class properties (like file-name or config.file). Optional Alias argument defines an alternative (normally short name) parameter name.

- **ParamHelp(helptext,valuename):** Defines a commandline help text and value name in usage section.

- **ParamSwitchChar(sign):** Defines string or char to indicate switch or parameter. If not defined, a double dash (--) will be used by default.

- **ParamValueSeparator(sign):** Defines string or char to separate parameter name from value (filename=config.json). If not defined, equal sign (=) will be used by default.

- **ParamValueIsNextParam:** Defines a parameter with a value without value separator (filename c:\config.ini)

- **ParamRequired:** Defines a parameter as required. If param not found, an exception will be raised.

QuickParameter automatically checks for value types. If you define a parameter value as Integer, and pass an alfanumeric, an exception will be raised.

Help customization:
You can define your own color customization with ColorizeHelp. Enabled property will use custom colors, otherwise b/w will be used.
```delphi
Parameters.ColorizeHelp.Enabled := True;
Parameters.ColorizeHelp.CommandName := ccCyan;
Parameters.ColorizeHelp.CommandUsage := ccBlue;
```
When parameters detects help parameter, help documentation will be showed.

Parameters.ShowHelp: Shows help documentation, generated automatically:
```
Parameters v.1.0
Usage: Parameters <command-action> <--HostName=<host>> [--Port <port>] [--Retries=<value>]
[--Config-file=<path>] [--UseTCP] [--Silent] [--Mode=<value>]
[--ShowReport] [--Help]
Simple console application example with Quick.Parameters
Arguments:
Command Command action.
--HostName Define host to connect.
--Port, -p Define Port to connect (default 80)
--Retries Number of max retries.
--Config-file Path to config.
--UseTCP Use TCP connection if present.
--Silent Silent mode.
--Mode Modes (mdAdd, mdSelect, mdRemove)
--Help, -h Show this documentation
```

0 comments on commit 37c616e

Please sign in to comment.