Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added option object to create option menus. #60

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
81 changes: 81 additions & 0 deletions docs/README-option
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Options Handling.

Set of scripts to handle script options/parameters.

## Manage Options: text mode.

To create an option menu:

* Import the option script:

import util/option

* Create an option menu and an option menu wrapper.

Options optionMenu
OptionsWrapper optionMenuWrapper

* Create a default values array using index with the format:

[optionName,optionValue,optionLetter,optionFlag,optionRequired]

declare -A DEFAULTS
DEFAULTS[one,1,a,false,true]=''
DEFAULTS[two,2,b,false,false]=''
DEFAULTS[verbose,false,v,true,false]=''

Where each index part is:

* optionName: name of the option. Example: username.

* optionValue: the value to set as default. Example: 777.

* optionLetter: letter used on text mode to especify an argument. Example: a.

* optionFlag: true or false value indicating if this option is a flag. Flag options can only take
true or false values, are marked as 'without argument' on the string passed to getopts
and are displayed as checkboxes on the GUI.

* optionRequired: true or false value indicating if this option is required. This attribute is
used on the GUI to verify if the user left a required option empty.

* Set the default values:

Options optionMenu=$($var:optionMenuWrapper SetDefaults optionMenu DEFAULTS)

* Now you can use Option functions:

declare -A PARAMETERS=$($var:optionMenuSample ToArray)
echo "${PARAMETERS[one]}"
echo "${PARAMETERS[two]}"

* You can also add options manually:

Option optionA
$var:optionA name = 'one'
$var:optionA value = 1
$var:optionA letter = 'a'
$var:optionA flag = false
$var:optionA required = true

$var:optionMenu Set optionA

## Manage Options: graphical user interface mode.

* Create the defaults as above and then call yad function:

Options optionMenu=$($var:optionMenuWrapper GetOptionsGUI optionMenu)

## Manage Options: fast text mode.

* Create the arrays DEFAULTS and OPTIONS same as above and then call the call the fast get arguments funtion:

Options::FastParseArguments DEFAULTS OPTIONS "$@"


## Manage Options: fast GUI mode.

* Create the arrays DEFAULTS and OPTIONS same as above and then call the call the fast get arguments funtion:

Options::FastGetOptionsGUI DEFAULTS OPTIONS

69 changes: 69 additions & 0 deletions docs/README-option.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Options Handling.

Set of scripts to handle script options/parameters.

## Manage Options: text mode.

To create an option menu:

* Import the option script:
```python
import util/option
```

* Create an option menu and an option menu wrapper:
```python
Options optionMenu
OptionsWrapper optionMenuWrapper
```

* Create a default values array using index with the format:
[optionName,optionValue,optionLetter,optionFlag,optionRequired]
```python
declare -A DEFAULTS
DEFAULTS[one,1,a,false,true]=''
DEFAULTS[two,2,b,false,false]=''
DEFAULTS[verbose,false,v,true,false]=''
```

* Set the default values:
```javascript
Options optionMenu=$($var:optionMenuWrapper SetDefaults optionMenu DEFAULTS)
```

* Now you can use Option functions:
```javascript
declare -A OPTIONS=$($var:optionMenuSample ToArray)
echo "${OPTIONS[one]}"
echo "${OPTIONS[two]}"
```
* You can also add options manually:
```javascript
Option optionA
$var:optionA name = 'one'
$var:optionA value = 1
$var:optionA letter = 'a'
$var:optionA flag = false
$var:optionA required = true
$var:optionMenu Set optionA
```
## Manage Options: graphical user interface.

* Create the defaults as above and then call yad function:
```javascript
Options optionMenu=$($var:optionMenuWrapper GetOptionsGUI optionMenu)
```
## Manage Options: fast text mode.

* Create the arrays DEFAULTS and OPTIONS same as above and then call the call the fast get arguments funtion:
```javascript
Options::FastParseArguments DEFAULTS OPTIONS "$@"
```

## Manage Options: fast GUI mode.

* Create the arrays DEFAULTS and OPTIONS same as above and then call the call the fast get arguments funtion:
```javascript
Options::FastGetOptionsGUI DEFAULTS OPTIONS
```

190 changes: 190 additions & 0 deletions example/option.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
#!/bin/bash
#
# Example Option, Options and OptionsWrapper objects use.

source "$( cd "${BASH_SOURCE[0]%/*}" && cd .. && pwd )/lib/oo-bootstrap.sh"

import util/option

OptionsWrapper optionMenuWrapper
Options optionMenu

echo 'Set default values manually.'

Option optionA
$var:optionA name = 'one'
$var:optionA value = 1
$var:optionA letter = 'a'
$var:optionA flag = false
$var:optionA required = true

Option optionB
$var:optionB name = 'two'
$var:optionB value = 2
$var:optionB letter = 'b'
$var:optionB flag = false
$var:optionB required = false

Option optionVerbose
$var:optionVerbose name = 'verbose'
$var:optionVerbose value = false
$var:optionVerbose letter = 'v'
$var:optionVerbose flag = true
$var:optionVerbose required = false

# Add options.
$var:optionMenu Set optionA
$var:optionMenu Set optionB
$var:optionMenu Set optionVerbose

$var:optionMenu
echo '----------------'

echo 'Set default values from array.'
# Set defaults index as: [name,value,letter,flag,required]
declare -A DEFAULTS
DEFAULTS[one,1,a,false,true]=''
DEFAULTS[two,2,b,false,false]=''
DEFAULTS[three,3,c,false,false]=''
DEFAULTS[verbose,false,v,true,false]=''

Options optionMenu=$($var:optionMenuWrapper SetDefaults optionMenu DEFAULTS)
$var:optionMenu
echo '----------------'

echo 'Serialize all options.'
$var:optionMenu
echo '----------------'

echo 'Delete option.'
$var:optionMenu Delete optionB
$var:optionMenu
echo '----------------'

echo 'Serialize option.'
serializedOption=$($var:optionA)
echo "$serializedOption"
echo '----------------'

echo 'Get attributes from serialized string.'
Options::GetSerializedAttribute "$serializedOption" 'name'
Options::GetSerializedAttribute "$serializedOption" 'value'
echo '----------------'

echo 'Unserialize option.'
Option optionC
Options::Unserialize "$serializedOption" $ref:optionC
$var:optionC name
$var:optionC value
echo '----------------'

echo 'Search option by name.'
Option optionC=$($var:optionMenu Search 'name' 'verbose')
$var:optionC
echo '----------------'

echo 'Search option by letter.'
Option optionC=$($var:optionMenu Search 'letter' 'a')
$var:optionC
echo '----------------'

echo 'Get options string.'
$var:optionMenu GetOptionsString
echo '----------------'

# Simulate call the script like: ./option.sh -a 777
echo 'Parse arguments -a 777'
set -- "${@:1:2}" '-a 777'
Options optionMenu=$($var:optionMenuWrapper ParseArguments optionMenu "$@")
$var:optionMenu
echo '----------------'

echo 'Copy values from Object to associative array.'
declare -A OPTIONS=$($var:optionMenu ToArray)
echo "${OPTIONS[@]}"
echo '----------------'

echo 'Basic use: read defaults from array, write results to associative array.'

echo ' DEFAULTS[one,1,a,false,true] > Options Object'
echo ' DEFAULTS[two,2,b,false,false] > Options Object'

echo ' Option Object > PARAMETERS[one]="1"'
echo ' Option Object > PARAMETERS[two]="2"'

Options optionMenuSample
OptionsWrapper optionMenuWrapperSample

# Name,value,letter,flag,required.
declare -A DEFAULTS_SAMPLE
DEFAULTS_SAMPLE[one,1,a,false,true]=''
DEFAULTS_SAMPLE[two,2,b,false,false]=''
Options optionMenuSample=$($var:optionMenuWrapperSample SetDefaults optionMenuSample DEFAULTS_SAMPLE)

declare -A OPTIONS_SAMPLE=$($var:optionMenuSample ToArray)

for index in "${!OPTIONS_SAMPLE[@]}"; do
echo "$index : ${OPTIONS_SAMPLE[$index]}"
done

echo "${OPTIONS_SAMPLE[one]}"
echo "${OPTIONS_SAMPLE[two]}"
echo '----------------'

echo 'Graphical User Interface with yad.'
Options optionMenuYad
OptionsWrapper optionMenuWrapperYad

# Name,value,letter,flag,required.
declare -A DEFAULTS_YAD
DEFAULTS_YAD[one,1,a,false,true]=''
DEFAULTS_YAD[two,2,b,false,false]=''
DEFAULTS_YAD[verbose,false,v,true,false]=''

Options optionMenuYad=$($var:optionMenuWrapperYad SetDefaults optionMenuYad DEFAULTS_YAD)
Options optionMenuYad=$($var:optionMenuWrapperYad GetOptionsGUI optionMenuYad)

if [[ "$($var:optionMenuYad yadSuccess)" == true ]]; then
$var:optionMenuYad
else
echo "An error happend with yad."
fi
echo '----------------'

echo 'Fast parse arguments.'

# Name,value,letter,flag,required.
declare -A DEFAULTS_FAST
DEFAULTS_FAST[one,1,a,false,true]=''
DEFAULTS_FAST[two,2,b,false,false]=''
DEFAULTS_FAST[verbose,false,v,true,false]=''

declare -A OPTIONS_FAST

set -- "${@:1:2}" '-a 777'
Options::FastParseArguments DEFAULTS_FAST OPTIONS_FAST "$@"

echo "${!OPTIONS_FAST[@]}"
echo "${OPTIONS_FAST[@]}"

echo '----------------'

echo 'Fast get options GUI.'

# Name,value,letter,flag,required.
declare -A DEFAULTS_FAST_GUI
DEFAULTS_FAST_GUI[one,1,a,false,true]=''
DEFAULTS_FAST_GUI[two,2,b,false,false]=''
DEFAULTS_FAST_GUI[verbose,false,v,true,false]=''

declare -A OPTIONS_FAST_GUI

Options::FastGetOptionsGUI DEFAULTS_FAST_GUI OPTIONS_FAST_GUI

echo "${!OPTIONS_FAST_GUI[@]}"
echo "${OPTIONS_FAST_GUI[@]}"

echo '----------------'

exit 0

Loading