proofreader

This commit is contained in:
gwen 2025-06-26 17:17:06 +02:00
parent a3d7258a64
commit f7701917d0
4 changed files with 88 additions and 71 deletions

View file

@ -6,9 +6,9 @@ The `hidden` property
In this section we will:
- use a new family or variable's property: the `hidden` property
- create a new variable's type: `boolean`
- create a variable with a new type, the `boolean` type
- reuse a value of a variable for another variable
(in this use case we will reuse the HTTP configuration variables values for the HTTPS configuration).
(in this use case we will reuse the HTTP configuration variables values for the configuration of the HTTPS).
.. prerequisites:: Reminder
@ -32,7 +32,7 @@ Whe have the `proxy_mode` configuration here:
- Automatic proxy configuration URL
default: No proxy
With the `manual` subfamily that is used in case of the `"Manual proxy configuration"` value of the `proxy_mode` variable has been chosen:
With the `manual` family that is used in case of the `"Manual proxy configuration"` value of the `proxy_mode` variable has been chosen:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_030/firefox/10-manual.yml
:language: yaml
@ -68,7 +68,7 @@ Now we will focus on configuring the HTTPS mode in case of `"Manual proxy config
.. image:: images/firefox_manual_https.png
Let's set two other variables for the HTTPS use only:
We are going to define two other variables for the HTTPS use only:
.. confval:: https_proxy.address
:type: `domainname`
@ -80,7 +80,7 @@ Let's set two other variables for the HTTPS use only:
This is a port setting for the manual HTTPS configuration
- So we have two very similar variables, a `manual.http_proxy.address` variable and a `manual.https_proxy.address` variable
- There are now two very similar variables, a `manual.http_proxy.address` variable and a `manual.https_proxy.address` variable
- In the same way, we have a `manual.http_proxy.port` variable and a `manual.https_proxy.port` variable.
The context
@ -93,10 +93,10 @@ Let's introduce a new Rougail concept here:
context
A :term:`configuration` is highly statefull and can change at any moment.
Sometimes somes minor changes in the :term:`user datas` involves chain reactions
in the whole :term:`configuration`.
Sometimes somes minor changes in the :term:`user datas` may involve chain reactions
in the whole :term:`configuration`.
The **context** is the state of the user datas at one moment. The set of the values of the variables
in a given moment.
at a given moment.
This term also refers
to the ability of a system to handle the *statefull* state of a configuration.
It expresses the transition between one situation to another situation,
@ -117,7 +117,7 @@ Let's create a new variable, named `use_for_https` here:
:type: `boolean`
:default: `true`
This is a setting that enables to reuse the HTTP proxy configuration for HTTPS
This is a setting that enables to reuse or not the HTTP proxy configuration for HTTPS
.. questions:: Question: how does it work?
@ -140,7 +140,7 @@ Its description in the structure file gives us this:
.. prerequisites:: Reminder
So now we have three new variables in the `manual` family which expresses the manual mode of the http proxy configuration.
So now we have three new variables in the `manual` family (with its `https_proxy` subfamily) which express the manual mode of the http proxy configuration.
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_032/firefox/20-manual.yml
:language: yaml
@ -183,16 +183,16 @@ And with this :confval:`use_for_https` boolean variable, there are two possibili
It is absolutely not a question of deactivating them. The `manual.https_proxy.address`
and the `manual.http_proxy.port` variables shall not be disabled (deactivated) in the manual mode.
Let's introduce here a new concept here.
We have to create a new property here.
The hidden property
---------------------
The `hidden` property
----------------------
.. glossary::
hidden
A variable or family's property is hidden if its value shall not be seen in a given consistency.
A variable or family's property is hidden if its value **shall not be seen** in a given :term:`context`.
Anyway, these variables can be used again if the context evolves. This is the main difference
between the `hidden` and the `disabled` properties.

View file

@ -5,17 +5,19 @@ The `disabled` property
In this section we will learn:
- how to disable a family,(yes, a family can disapear in the outerspace)
- what a *property* is
- what the `disabled` property is
- how to disable a family (yes, a family can disapear in the outerspace)
- explain the `disabled` property
What is a disabled variable or family is, and why it is interesting to do that.
We will see what is a disabled variable or family is, and why it is interesting to do that.
.. prerequisites:: Reminder
- We have three variables: :confval:`proxy_mode`, :confval:`address` and :confval:`port` placed in the `http_proxy` subfamily.
.. type-along:: The disabled property
A disabled property assigned to a family
---------------------------------------------
.. glossary::
@ -25,10 +27,6 @@ The `disabled` property
of a family, a subfamily or a variable. These properties may vary
depending on the context.
A disabled family
-----------------------
.. glossary::
disabled
@ -52,11 +50,13 @@ The five choices are:
If the `Manual proxy configuration` is not selected, we don't need to set
the :confval:`address` and :confval:`port` variables, there is no point
in setting them. It's not just that: if we fill them in, there might be a problem in the overall integrity of the configuration. We shall fill and use in these variables
only in the `Manual proxy configuration` context. Otherwise, we need to disable them.
only in the `Manual proxy configuration` context. Otherwise, **we need to disable them when they are not necessary**.
.. important:: We need to have the ability to **disable** variables that are not used
in a given context.
.. type-along:: disabling the :confval:`address` and :confval:`port` variables
If we don't choose the manual mode, we need to **disable** these variables.
They are not used anymore.
@ -92,11 +92,17 @@ disable the variables that are placed in it.
We can see here the `disabled: true` parameter set in the `manual` family.
.. attention:: We will intentionally create an inconsistency here in order to
explore the `disabled` property's behavior.
A conditional disabled family
------------------------------
Let's decide to make an inconsistency in the configuration: we are going to
select **the manual mode** as its variables are disabled.
.. warning:: In this section, we will **intentionally** create an inconsistency in the configuration
in order to explore the `disabled` property's behavior.
We are going to
- select **the manual mode** value for the `proxy_mode`
- assing the `example.net` value to the `address` validate in the user data file.
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_027/config/03/config.yaml
:linenos:
@ -110,6 +116,8 @@ select **the manual mode** as its variables are disabled.
http_proxy:
address: example.net
.. warning:: Remember that the `manual` family is disabled, so are the variables it contains.
Now let's validate the consitency of the configuration:
@ -137,23 +145,25 @@ As expected, we encounter an error:
<span style="color: #5c5cff">┗━━ </span>📓 proxy_mode: Manual proxy configuration (<span style="color: #00aa00">No proxy</span>)
</pre>
To avoid this type of error, What we need is a *dynamic setting* of the disable/enable property.
.. questions:: Question
How to avoid these error messages?
Contextual setting of a property
------------------------------------
To avoid this type of error, what we need is a *dynamic setting* of the disable/enable property of the `manual` family.
.. type-along:: The conditional disabled property
A conditional disabled family
------------------------------
If the manual mode for the proxy is not selected, then the `manual` family shall be disabled.
On the other hand, if the manual proxy's configuration mode is selected,
then we need to activate the `manual` family.
then we need to activate (enable) the `manual` family.
And we understand that this activation/deactivation of the `manual` family
depends on the value of the `proxy_mode` variable.
In rougail, we can set a property's value **depending on** the value of another variable. That is, it is conditioned by another variable.
In rougail, we can set a property's value **depending on** the value of another variable. That is, **it is conditioned by** another variable.
Here is how we can achieve this:
@ -196,27 +206,31 @@ Here we have the `disabled` property like this:
variable: proxy_mode
when_not: 'Manual proxy configuration'
It means that the `disabled` property **depends on** the value of another variable.
Here the `disabled` property **depends on** the value of another variable.
The `variable` parameter allows you to define the name of the target variable on which the `disabled` property depends.
What does it allow you to do?
- if `proxy_mode` is not `'Manual proxy configuration'` it disables the `manual` family
- if `proxy_mode == 'Manual proxy configuration'` it enables the `manual` family
.. keypoints:: Key points progress
**summary**
We have the ability to build a contextual setting:
- if `proxy_mode` is not `'Manual proxy configuration'` it disables the `manual` family
- if `proxy_mode == 'Manual proxy configuration'` it enables the `manual` family
**Keywords**
- the :term:`property` concept
- the `disabled` property
- disabled variable or family
- the `variable` target property
- a disabled variable or family
- raising a configuration's consistency error
- variable based conditional disabled family
- a variable based contextual disabled family
**Progress**
- we have a :term:`family` named `manual` and a sub family named `http_proxy`
- And we have now two variables: :confval:`proxy_mode` and :confval:`address`.
- We have disabled the `manual` family (and the `http_proxy` sub family).
- We have dynamically disabled the `manual` family (and the `http_proxy` sub family).

View file

@ -16,7 +16,7 @@ Preliminaries
Making a structure file
-------------------------
.. exercise:: The folder structure
.. demo:: The folder structure
Here is the tree structure we want to have::

View file

@ -1,4 +1,4 @@
The `manual` family
Let's dive in
====================
.. objectives:: Objectives
@ -15,7 +15,9 @@ The `manual` family
- We have a folder named :file:`firefox` and we are putting all the structure description files into it
.. type-along:: So we have this choice type variable in the structure file
.. type-along:: let's recap: we have this choice type variable
In the structure description file, we have:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_013/firefox/00-proxy.yml
:linenos:
@ -37,10 +39,10 @@ The `manual` family
.. We're gonna put it in a :term:`family`.
.. note:: The variables, families, etc. will be created in several files for educational purposes.
.. warning:: The variables, families, etc. will be created in several files for educational purposes.
Here we made a :file:`firefox/00-proxy.yml` structure file and we're gonna make
a new structure file named :file:`firefox/10-manual.yml`
We could of course have put everything in one file, we decided to separate the files for reasons of ordering and clarity
a new structure file named :file:`firefox/10-manual.yml`\ .
We could of course have put everything in one file, we decided to separate the files for reasons of ordering and clarity.
So we have now a `proxy_mode` variable.
@ -50,10 +52,10 @@ So we have now a `proxy_mode` variable.
This is a setting that controls the proxy's type
A family named `manual`
-------------------------
Creating a new family
-----------------------
Let's create a family named `manual`
Let's create a family named `manual` which obviously corresponds to the proxy's manual configuration choice.
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_020/firefox/10-manual.yml
:language: yaml
@ -69,17 +71,18 @@ Let's create a family named `manual`
We can see that we have defined a :term:`family` here, and this family is *empty*
(that is the family which is a container variable contains no variable yet).
.. admonition:: If a family is empty
.. warning::
We need to specify the :term:`family` type here because if we don't,
If a family is empty, we need to specify the :term:`family` type here because if we don't,
the Rougail's type engine will infer it by default as a :term:`variable`.
It's because we don't have set any :term:`variable` inside. If we have a variable inside of a family,
we make a YAML block (that is, we just indent the lines) and the Rougail's type inference engine will implicitely infer it as a family.
We have to force the family type inference.
It's because we don't have set any :term:`variable` inside yet. When we will have a variable inside of this family,
we will make a YAML block (that is, we just indent the lines) and the Rougail's type inference engine will implicitely infer the variable's container as a family type.
.. type-along:: A family inside a family
Creating a family hierarchy is very easy, here is an example:
Creating a family hierarchy of family container types is very easy, here is an example:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_021/firefox/10-manual.yml
:language: yaml
@ -101,8 +104,8 @@ Here the `http_proxy` family lives inside the `manual` family.
Putting a variable inside of a family or a sub family
----------------------------------------------------------
Let's create a variable in its family.
The type of this variable is a `choice` type:
Let's create a variable in the `http_proxy` family.
This time, the type of this new variable is a `domainname` type:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_024/firefox/10-manual.yml
:language: yaml
@ -123,9 +126,9 @@ The type of this variable is a `choice` type:
description: HTTP address
type: domainname
The :term:`operator` can now then set :term:`a value <value>` to the :confval:`address` variable
Now that the :confval:`address` variable is declarde, the :term:`operator` can set :term:`a value <value>` to the :confval:`address` variable
So we have now an `address` variable.
So we have now an :confval:`address` variable:
.. confval:: address
:type: `domainname`
@ -133,8 +136,8 @@ So we have now an `address` variable.
This is the HTTP address of the proxy
.. note:: We encountered here a new type of variable there: the `domainname` type
.. note:: We encountered here a new type of variable there: the `domainname` type.
There are a bunch of types available in Rougail.
Assigning a user value
------------------------------------
@ -152,7 +155,7 @@ otherwise we will get an error if we try to access this variable:
<span style="color: #ff0000">┗━━ </span> - manual.http_proxy.address (HTTP address)
</pre>
Because this variable is :term:`mandatory`.
Because the :term:`mandatory` variable attribute is infered by default for this variable.
.. type-along:: user data files are where the user values lives
@ -162,14 +165,14 @@ And we need to set the values in separate files too, called `user data fil
user data file
A user data file is a file where only the user datas are assigned.
A user data file is a file where only :term:`user datas` are set.
A user file is a file where there are only user datas in it, users can set values, called user values --
that is variable's values that have been set by an :term:`operator`\ .
see also :term:`user datas`
Let's set user values in user data files
.. type-along:: let's set user values in a user data file
Here is a user data file sample:
@ -233,6 +236,8 @@ Variables can have parameters
We need to specify whether our variable accepts to be filled using an IP or a domain name only.
This is where the ability to parameterize our variable comes in.
.. type-along:: let's create a variable parameter named `allow_ip`
..
---
manual:
@ -275,7 +280,7 @@ with IPs.
A parameter is a property of a variable that can refine its behavior
.. type-along:: One more variable
.. type-along:: a second variable in the `http_proxy` family
Let's create a `port` variable in the `http_proxy` family:
@ -312,9 +317,7 @@ Here is the new :file:`firefox/10-manual.yml` structure file:
type: port
default: 8080
Take a look at lines 14 to 17.
.. keypoints:: Key points progress
.. keypoints:: let's review the key points
**Keywords**