iris-rb 0.4.3 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/iris/azione.ir +39 -9
- data/lib/iris/azione/parametri.ir +32 -171
- data/lib/iris/azione/parametri/parametro.ir +266 -0
- data/lib/iris/navigatore.ir +1 -1
- data/lib/iris/versione.ir +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0c0f2b700cf6afa534162c4494b9462d4c7bf1a05300d76f55ea138c57d579a
|
4
|
+
data.tar.gz: d100c0e76b78fe2687199286b0b2e2090f39e42b66f312a4afaed4e0bf9eb185
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef257008011ae9d9f125808504eb6fc907ca03f48f5bf67245c94f9475c707b34ee6238a0dd373d2a18dca1159f33a382dd979efe74230782b411007fb293cab
|
7
|
+
data.tar.gz: ecd52d67b889be73879f48ce4ebe7f04313e255dffc5c7bf5c15ccbe3cc4b8fe140e0add0f64ab6624f6a25e2bb1315d04e5cd0f80fdc29af6bee1fbd81fae3d
|
data/.gitignore
CHANGED
data/lib/iris/azione.ir
CHANGED
@@ -53,12 +53,17 @@ modulo Iris
|
|
53
53
|
"X-Frame-Options" => Intestazioni::OPZIONI_FRAME,
|
54
54
|
"X-XSS-Protection" => Intestazioni::PROTEZIONE_CROSS_SITE_SCRIPTING]
|
55
55
|
|
56
|
+
##
|
57
|
+
# Codifiche corpo supportate (oltre a UTF-8).
|
58
|
+
CODIFICHE_SUPPORTATE = [ "ISO-8859-1", "ASCII-8BIT" ].congela
|
59
|
+
|
56
60
|
##
|
57
61
|
# Metodo principale eseguito per risolvere l'azione.
|
58
62
|
definisci _avvia(richiesta)
|
59
63
|
cattura :arresta esegui
|
60
64
|
_imposta_variabili_istanza richiesta
|
61
65
|
_converti_parametri_interrogazione
|
66
|
+
_converti_corpo_multipart
|
62
67
|
_converti_corpo_in_json
|
63
68
|
_inizializza_parametri
|
64
69
|
|
@@ -138,8 +143,9 @@ modulo Iris
|
|
138
143
|
definisci _imposta_variabili_istanza(richiesta)
|
139
144
|
@richiesta = richiesta
|
140
145
|
@richiesta["iris.parametri"] ||= Mappa.nuova
|
146
|
+
@tipo_contenuto = richiesta.prendi "CONTENT_TYPE", "application/json"
|
141
147
|
@stato = 200
|
142
|
-
@intestazioni = INTESTAZIONI_PREDEFINITE
|
148
|
+
@intestazioni = INTESTAZIONI_PREDEFINITE.clona
|
143
149
|
@corpo = nullo
|
144
150
|
@registratore = Iris::Registratore.nuovo @richiesta
|
145
151
|
fine
|
@@ -150,25 +156,49 @@ modulo Iris
|
|
150
156
|
@parametri = Parametri.nuovo @richiesta["iris.parametri"]
|
151
157
|
fine
|
152
158
|
|
159
|
+
##
|
160
|
+
# Converte il corpo multipart.
|
161
|
+
definisci _converti_corpo_multipart
|
162
|
+
ritorna se @tipo_contenuto.non_inizia_con? "multipart/form-data"
|
163
|
+
@richiesta["iris.parametri"].fondi! Rack::Multipart.parse_multipart(@richiesta).simbolizza
|
164
|
+
recupera Errore => errore
|
165
|
+
arresta 400, errore: "Errore nella conversione del contenuto multipart fornito."
|
166
|
+
fine
|
167
|
+
|
153
168
|
##
|
154
169
|
# Converte il corpo della richiesta in JSON.
|
155
170
|
definisci _converti_corpo_in_json
|
156
171
|
ritorna se @richiesta["rack.input"].nullo?
|
172
|
+
ritorna se @tipo_contenuto != "application/json"
|
157
173
|
corpo = @richiesta["rack.input"].read
|
158
174
|
ritorna se corpo.non_specificato?
|
159
175
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
arresta 400, errore: "Il corpo fornito non è un JSON valido."
|
166
|
-
fine
|
176
|
+
corpo_codificato = _codifica_corpo_in_utf8 corpo
|
177
|
+
corpo_convertito = (JSON.processa corpo).simbolizza
|
178
|
+
@richiesta["iris.parametri"].fondi! corpo_convertito se corpo_convertito.è_una? Mappa
|
179
|
+
@richiesta["iris.parametri"].fondi! Mappa(_corpo: corpo_convertito) se corpo_convertito.non_è_una? Mappa
|
180
|
+
@richiesta["iris.corpo"] = corpo_convertito
|
167
181
|
@richiesta["rack.input"].rewind
|
182
|
+
recupera JSON::ParserError => errore
|
183
|
+
arresta 400, errore: "Il corpo fornito non è un JSON valido."
|
184
|
+
fine
|
185
|
+
|
186
|
+
##
|
187
|
+
# Codifica il corpo in UTF-8.
|
188
|
+
definisci _codifica_corpo_in_utf8(corpo)
|
189
|
+
corpo_già_in_utf8 = corpo.forza_codifica_a("UTF-8").codifica_valida?
|
190
|
+
ritorna corpo.codifica_in("UTF-8") se corpo_già_in_utf8
|
191
|
+
|
192
|
+
CODIFICHE_SUPPORTATE.per_ognuna esegui |codifica|
|
193
|
+
codifica_valida = corpo.forza_codifica_a(codifica).codifica_valida?
|
194
|
+
ritorna corpo.codifica_in(codifica) se codifica_valida
|
195
|
+
fine
|
196
|
+
|
197
|
+
corpo
|
168
198
|
fine
|
169
199
|
|
170
200
|
##
|
171
|
-
# Converte i parametri della richiesta.
|
201
|
+
# Converte i parametri della richiesta passati come interrogazione.
|
172
202
|
definisci _converti_parametri_interrogazione
|
173
203
|
ritorna a_meno_che @richiesta["REQUEST_URI"].specificato? e @richiesta["REQUEST_URI"].include?("?")
|
174
204
|
parametri_stringa_interrogazione = @richiesta["REQUEST_URI"].partiziona("?").ultimo
|
@@ -1,3 +1,5 @@
|
|
1
|
+
richiedi_relativo "parametri/parametro"
|
2
|
+
|
1
3
|
modulo Iris
|
2
4
|
modulo Azione
|
3
5
|
##
|
@@ -67,15 +69,21 @@ modulo Iris
|
|
67
69
|
fine
|
68
70
|
|
69
71
|
##
|
70
|
-
# Esegue un controllo su un parametro
|
71
|
-
|
72
|
-
|
72
|
+
# Esegue un controllo su un parametro obbligatorio.
|
73
|
+
# Quando un parametro obbligatorio non viene passato, oppure viene passato
|
74
|
+
# con valore nullo o stringa vuota, viene generato un errore.
|
75
|
+
definisci obbligatorio(parametro, *opzioni_parametro, **opzioni_lista, &blocco)
|
76
|
+
_inizializza parametro, :obbligatorio, *opzioni_parametro, **opzioni_lista, &blocco
|
73
77
|
fine
|
74
78
|
|
75
79
|
##
|
76
80
|
# Esegue un controllo su un parametro opzionale.
|
77
|
-
|
78
|
-
|
81
|
+
# Quando un parametro opzionale non viene passato, non viene generato un errore.
|
82
|
+
# Se però esso viene passato, e con valore nullo o stringa vuota, allora
|
83
|
+
# viene generato un errore, a meno che non sia stato specificato come
|
84
|
+
# annullabile.
|
85
|
+
definisci opzionale(parametro, *opzioni_parametro, **opzioni_lista, &blocco)
|
86
|
+
_inizializza parametro, :opzionale, *opzioni_parametro, **opzioni_lista, &blocco
|
79
87
|
fine
|
80
88
|
|
81
89
|
##
|
@@ -86,8 +94,10 @@ modulo Iris
|
|
86
94
|
# includi Iris::Azione
|
87
95
|
#
|
88
96
|
# definisci valida_parametri
|
97
|
+
# parametri.obbligatorio :prezzo, :decimale
|
98
|
+
#
|
89
99
|
# parametri.regola "il prezzo deve essere maggiore di zero" esegui
|
90
|
-
# parametri.
|
100
|
+
# parametri.prendi(:prezzo) > 0.0
|
91
101
|
# fine
|
92
102
|
# fine
|
93
103
|
# fine
|
@@ -101,6 +111,7 @@ modulo Iris
|
|
101
111
|
|
102
112
|
regola_rispettata = si
|
103
113
|
regola_rispettata = blocco.avvia se blocco.esiste?
|
114
|
+
|
104
115
|
se regola_rispettata == no
|
105
116
|
@validi = no
|
106
117
|
@errori.deposita :regole, [] se @errori.non_ha_chiave? :regole
|
@@ -111,178 +122,28 @@ modulo Iris
|
|
111
122
|
privati
|
112
123
|
|
113
124
|
##
|
114
|
-
#
|
115
|
-
definisci
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
se @parametri_originali.ha_chiave? parametro
|
123
|
-
_segnala_non_annullabile_su parametro se annullabile == no e valore_parametro.non_specificato?
|
124
|
-
_segnala_tipo_non_valido_su parametro, tipo_desiderato se tipo_non_corrispondente?(valore_parametro, tipo_desiderato)
|
125
|
-
valore_parametro = nullo se valore_parametro.non_specificato?
|
126
|
-
@parametri_processati.deposita parametro, valore_parametro
|
127
|
-
fine
|
128
|
-
|
129
|
-
_controlla_annidato parametro, valore_parametro, tipo_desiderato, obbligatorio, &blocco se blocco.esiste?
|
130
|
-
fine
|
131
|
-
fine
|
132
|
-
|
133
|
-
##
|
134
|
-
# Esegue il controllo annidato sul parametro.
|
135
|
-
definisci _controlla_annidato(parametro, valore_parametro, tipo_desiderato, obbligatorio, &blocco)
|
136
|
-
se obbligatorio == si
|
137
|
-
_segnala_tipo_non_valido_su parametro, :mappa se valore_parametro.non_è_una? Mappa e tipo_desiderato == :mappa
|
138
|
-
_segnala_tipo_non_valido_su parametro, :lista se valore_parametro.non_è_una? Lista e tipo_desiderato == :lista
|
139
|
-
fine
|
140
|
-
lancia :controllo_terminato se valore_parametro.nullo?
|
141
|
-
|
142
|
-
_controllo_annidato_mappa parametro, valore_parametro, &blocco se tipo_desiderato == :mappa
|
143
|
-
_controllo_annidato_lista parametro, valore_parametro, &blocco se tipo_desiderato == :lista
|
144
|
-
fine
|
145
|
-
|
146
|
-
##
|
147
|
-
# Esege il controllo annidato su un parametro di tipo mappa.
|
148
|
-
definisci _controllo_annidato_mappa(parametro, valore_parametro, &blocco)
|
149
|
-
parametri_annidati = Parametri.nuovo valore_parametro
|
150
|
-
blocco.avvia parametri_annidati
|
151
|
-
@validi = (@validi e parametri_annidati.validi?)
|
152
|
-
@parametri_processati.deposita parametro, parametri_annidati.in_mappa se @validi == si
|
153
|
-
@errori.deposita parametro, parametri_annidati.errori se parametri_annidati.errati?
|
125
|
+
# Inizializza un parametro da controllare.
|
126
|
+
definisci _inizializza(parametro, obbligatorietà, *opzioni_parametro, **opzioni_lista, &blocco)
|
127
|
+
valore = @parametri_originali.prendi parametro, nullo
|
128
|
+
opzioni_parametro |= [ :mappa ] se blocco_dato?
|
129
|
+
parametro = Parametro.nuovo parametro, valore, obbligatorietà,
|
130
|
+
*opzioni_parametro, **opzioni_lista
|
131
|
+
_valida parametro, &blocco
|
154
132
|
fine
|
155
133
|
|
156
134
|
##
|
157
|
-
#
|
158
|
-
definisci
|
159
|
-
|
160
|
-
errori_trovati = []
|
135
|
+
# Esegue la validazione di un singolo parametro.
|
136
|
+
definisci _valida(parametro, &blocco)
|
137
|
+
parametro.valida @parametri_originali, &blocco
|
161
138
|
|
162
|
-
|
163
|
-
|
164
|
-
blocco.avvia parametri_elemento
|
165
|
-
@validi = (@validi e parametri_elemento.validi?)
|
166
|
-
elementi_processati << parametri_elemento.in_mappa se @validi == si
|
167
|
-
errori_trovati << parametri_elemento.errori.fondi(_indice: indice) se parametri_elemento.errati?
|
139
|
+
se parametro.valido? e @parametri_originali.ha_chiave? parametro.nome
|
140
|
+
@parametri_processati.deposita parametro.nome, parametro.valore
|
168
141
|
fine
|
169
142
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
##
|
175
|
-
# Recupera le opzioni del parametro, ovvero tipo e annullabilità.
|
176
|
-
definisci _opzioni_parametro(*opzioni, &blocco)
|
177
|
-
mappa_opzioni = Mappa[annullabile: no, tipo_desiderato: :stringa]
|
178
|
-
mappa_opzioni.deposita :annullabile, si se opzioni.include? :annullabile
|
179
|
-
considera
|
180
|
-
quando opzioni.include?(:booleano)
|
181
|
-
mappa_opzioni.deposita :tipo_desiderato, :booleano
|
182
|
-
quando opzioni.include?(:data)
|
183
|
-
mappa_opzioni.deposita :tipo_desiderato, :data
|
184
|
-
quando opzioni.include?(:stringa)
|
185
|
-
mappa_opzioni.deposita :tipo_desiderato, :stringa
|
186
|
-
quando opzioni.include?(:simbolo)
|
187
|
-
mappa_opzioni.deposita :tipo_desiderato, :simbolo
|
188
|
-
quando opzioni.include?(:id_oggetto)
|
189
|
-
mappa_opzioni.deposita :tipo_desiderato, :id_oggetto
|
190
|
-
quando opzioni.include?(:intero)
|
191
|
-
mappa_opzioni.deposita :tipo_desiderato, :intero
|
192
|
-
quando opzioni.include?(:decimale)
|
193
|
-
mappa_opzioni.deposita :tipo_desiderato, :decimale
|
194
|
-
quando opzioni.include?(:lista)
|
195
|
-
mappa_opzioni.deposita :tipo_desiderato, :lista
|
196
|
-
quando opzioni.include?(:mappa)
|
197
|
-
mappa_opzioni.deposita :tipo_desiderato, :mappa
|
143
|
+
se parametro.errato?
|
144
|
+
@validi = no
|
145
|
+
@errori.deposita parametro.nome, parametro.errore
|
198
146
|
fine
|
199
|
-
mappa_opzioni.deposita :tipo_desiderato, :mappa se blocco.esiste? e opzioni.non_include? :lista
|
200
|
-
mappa_opzioni
|
201
|
-
fine
|
202
|
-
|
203
|
-
##
|
204
|
-
# Segnala che un parametro deve per forza essere passato.
|
205
|
-
definisci _segnala_presenza_obbligatoria_su(parametro)
|
206
|
-
@validi = no
|
207
|
-
@errori.deposita parametro, "è obbligatorio."
|
208
|
-
lancia :controllo_terminato
|
209
|
-
fine
|
210
|
-
|
211
|
-
##
|
212
|
-
# Segnala che un parametro non può essere nullo.
|
213
|
-
definisci _segnala_non_annullabile_su(parametro)
|
214
|
-
@validi = no
|
215
|
-
@errori.deposita parametro, "non deve essere nullo."
|
216
|
-
lancia :controllo_terminato
|
217
|
-
fine
|
218
|
-
|
219
|
-
##
|
220
|
-
# Segnala che un parametro deve essere del tipo specificato.
|
221
|
-
definisci _segnala_tipo_non_valido_su(parametro, tipo_desiderato)
|
222
|
-
@validi = no
|
223
|
-
@errori.deposita parametro, "deve essere #{_messaggio_per tipo_desiderato}."
|
224
|
-
lancia :controllo_terminato
|
225
|
-
fine
|
226
|
-
|
227
|
-
##
|
228
|
-
# Applica conversioni sul valore parametro in base al tipo desiderato.
|
229
|
-
definisci _applica_conversioni_su(valore_parametro, tipo_desiderato)
|
230
|
-
considera tipo_desiderato
|
231
|
-
quando :id_oggetto
|
232
|
-
valore_parametro.in_id
|
233
|
-
quando :simbolo
|
234
|
-
valore_parametro.in_simbolo
|
235
|
-
quando :data
|
236
|
-
Data.strptime(valore_parametro, "%Y-%m-%d")
|
237
|
-
altrimenti
|
238
|
-
valore_parametro
|
239
|
-
fine
|
240
|
-
recupera
|
241
|
-
valore_parametro
|
242
|
-
fine
|
243
|
-
|
244
|
-
##
|
245
|
-
# Determina se il tipo del valore di un parametro è corrispondente
|
246
|
-
# a quello desiderato.
|
247
|
-
definisci tipo_non_corrispondente?(valore_parametro, tipo_desiderato)
|
248
|
-
ritorna no se valore_parametro.non_specificato?
|
249
|
-
|
250
|
-
considera tipo_desiderato
|
251
|
-
quando :intero, :decimale
|
252
|
-
ritorna si se valore_parametro.non_è_un? Numerico
|
253
|
-
quando :booleano
|
254
|
-
ritorna si se valore_parametro.non_è_un? TrueClass e valore_parametro.non_è_un? FalseClass
|
255
|
-
quando :data
|
256
|
-
ritorna si se valore_parametro.non_è_una? Data
|
257
|
-
quando :stringa
|
258
|
-
ritorna si se valore_parametro.non_è_una? Stringa
|
259
|
-
quando :simbolo
|
260
|
-
ritorna si se valore_parametro.non_è_una? Simbolo
|
261
|
-
quando :id_oggetto
|
262
|
-
ritorna si se valore_parametro.non_è_un? IdOggetto
|
263
|
-
quando :lista
|
264
|
-
ritorna si se valore_parametro.non_è_una? Lista
|
265
|
-
quando :mappa
|
266
|
-
ritorna si se valore_parametro.non_è_una? Mappa
|
267
|
-
fine
|
268
|
-
|
269
|
-
no
|
270
|
-
fine
|
271
|
-
|
272
|
-
##
|
273
|
-
# Messaggio per il tipo parametro.
|
274
|
-
definisci _messaggio_per(tipo_parametro)
|
275
|
-
considera tipo_parametro
|
276
|
-
quando :booleano allora "un booleano"
|
277
|
-
quando :data allora "una data"
|
278
|
-
quando :stringa allora "una stringa"
|
279
|
-
quando :simbolo allora "una stringa"
|
280
|
-
quando :id_oggetto allora "un id oggetto"
|
281
|
-
quando :intero allora "un numero intero"
|
282
|
-
quando :decimale allora "un numero decimale"
|
283
|
-
quando :lista allora "una lista"
|
284
|
-
quando :mappa allora "un oggetto"
|
285
|
-
altrimenti nullo fine
|
286
147
|
fine
|
287
148
|
|
288
149
|
fine
|
@@ -0,0 +1,266 @@
|
|
1
|
+
modulo Iris
|
2
|
+
modulo Azione
|
3
|
+
classe Parametri
|
4
|
+
##
|
5
|
+
# Un parametro è un singolo elemento di una mappa di Parametri.
|
6
|
+
classe Parametro
|
7
|
+
|
8
|
+
##
|
9
|
+
# Tipi disponibili.
|
10
|
+
TIPI = [ :booleano, :data, :stringa, :simbolo, :id_oggetto, :intero, :decimale, :mappa, :lista ].congela
|
11
|
+
|
12
|
+
accessore :nome, :valore,
|
13
|
+
:valido, :errore,
|
14
|
+
:obbligatorio, :opzionale, :annullabile,
|
15
|
+
:tipi_desiderati, :tipi_elementi_lista
|
16
|
+
|
17
|
+
alias :obbligatorio? :obbligatorio
|
18
|
+
alias :opzionale? :opzionale
|
19
|
+
alias :annullabile? :annullabile
|
20
|
+
alias :valido? :valido
|
21
|
+
|
22
|
+
definisci inizializzatore(nome, valore_originale, obbligatorietà, *opzioni, di: nulla)
|
23
|
+
@nome = nome
|
24
|
+
@annullabile = _estrai_annullabilità_da *opzioni
|
25
|
+
@tipi_desiderati = _estrai_tipi_desiderati_da *opzioni
|
26
|
+
@tipi_elementi_lista = [ di ].appiattisci.compatta
|
27
|
+
@valido = si
|
28
|
+
@valore = _esegui_conversione_tipo_su valore_originale
|
29
|
+
|
30
|
+
considera obbligatorietà
|
31
|
+
quando :obbligatorio
|
32
|
+
@obbligatorio = si
|
33
|
+
@opzionale = no
|
34
|
+
quando :opzionale
|
35
|
+
@obbligtorio = no
|
36
|
+
@opzionale = si
|
37
|
+
altrimenti
|
38
|
+
alza "il parametro deve essere `obbligatorio` o `opzionale`"
|
39
|
+
fine
|
40
|
+
fine
|
41
|
+
|
42
|
+
##
|
43
|
+
# Valida il parametro.
|
44
|
+
definisci valida(parametri_originali, &blocco)
|
45
|
+
@parametri_originali = parametri_originali
|
46
|
+
|
47
|
+
cattura :controllo_terminato esegui
|
48
|
+
_segnala_presenza_obbligatoria se obbligatorio? e @parametri_originali.non_ha_chiave? nome
|
49
|
+
_segnala_non_annullabile se annullabile? == no e @parametri_originali.ha_chiave? nome
|
50
|
+
_segnala_tipo_non_valido se tipi_desiderati.tutti? { |tipo| _tipo_non_corrispondente? tipo }
|
51
|
+
_controlla_tipi_elementi_lista se tipi_elementi_lista.almeno_uno?
|
52
|
+
_controlla_annidato &blocco se blocco_dato?
|
53
|
+
fine
|
54
|
+
fine
|
55
|
+
|
56
|
+
##
|
57
|
+
# Determina se il parametro ha errori.
|
58
|
+
definisci errato?
|
59
|
+
!valido?
|
60
|
+
fine
|
61
|
+
|
62
|
+
privati
|
63
|
+
|
64
|
+
##
|
65
|
+
# Estrae l'annullabilità dalle opzioni.
|
66
|
+
definisci _estrai_annullabilità_da(*opzioni)
|
67
|
+
se opzioni.include? :annullabile
|
68
|
+
@annullabile = si
|
69
|
+
altrimenti
|
70
|
+
@annullabile = no
|
71
|
+
fine
|
72
|
+
fine
|
73
|
+
|
74
|
+
##
|
75
|
+
# Estrae i tipi desiderati dalle opzioni.
|
76
|
+
definisci _estrai_tipi_desiderati_da(*opzioni)
|
77
|
+
tipi_estratti = opzioni.seleziona esegui |opzione|
|
78
|
+
opzione.in? TIPI e opzione != :annullabile
|
79
|
+
fine
|
80
|
+
tipi_non_riconosciuti = opzioni - tipi_estratti - [ :annullabile ]
|
81
|
+
se tipi_non_riconosciuti.almeno_una?
|
82
|
+
alza "i tipi `#{tipi_non_riconosciuti.unisci(", ")}` non sono supportati"
|
83
|
+
fine
|
84
|
+
tipi_estratti = [ :stringa ] se tipi_estratti.nessuno?
|
85
|
+
tipi_estratti
|
86
|
+
fine
|
87
|
+
|
88
|
+
##
|
89
|
+
# Esegue la conversione di tipo sul valore.
|
90
|
+
definisci _esegui_conversione_tipo_su(valore_originale, tipi = tipi_desiderati)
|
91
|
+
se valore_originale.è_una? Lista e tipi.include? :lista
|
92
|
+
lista = valore_originale
|
93
|
+
ritorna _esegui_conversione_tipo_su_ogni_elemento_della lista
|
94
|
+
fine
|
95
|
+
|
96
|
+
considera tipi.primo
|
97
|
+
quando :id_oggetto, :id_oggetti
|
98
|
+
valore_originale.in_id
|
99
|
+
quando :simbolo, :simboli
|
100
|
+
valore_originale.in_simbolo
|
101
|
+
quando :data, :date
|
102
|
+
Data.strptime(valore_originale, "%Y-%m-%d")
|
103
|
+
quando :stringa
|
104
|
+
valore_originale.specificato? ? valore_originale : nullo
|
105
|
+
altrimenti
|
106
|
+
valore_originale
|
107
|
+
fine
|
108
|
+
recupera
|
109
|
+
valore_originale
|
110
|
+
fine
|
111
|
+
|
112
|
+
##
|
113
|
+
# Esegue la conversione dei tipi su ogni elemento della lista.
|
114
|
+
definisci _esegui_conversione_tipo_su_ogni_elemento_della(lista)
|
115
|
+
lista.mappa esegui |valore_originale|
|
116
|
+
_esegui_conversione_tipo_su valore_originale, tipi_elementi_lista
|
117
|
+
fine
|
118
|
+
fine
|
119
|
+
|
120
|
+
##
|
121
|
+
# Segnala che un parametro deve per forza essere passato.
|
122
|
+
definisci _segnala_presenza_obbligatoria
|
123
|
+
@valido = no
|
124
|
+
@errore = "è obbligatorio."
|
125
|
+
lancia :controllo_terminato
|
126
|
+
fine
|
127
|
+
|
128
|
+
##
|
129
|
+
# Segnala che un parametro non può essere nullo.
|
130
|
+
definisci _segnala_non_annullabile
|
131
|
+
ritorna se valore.specificato?
|
132
|
+
@valido = no
|
133
|
+
@errore = "non deve essere nullo."
|
134
|
+
lancia :controllo_terminato
|
135
|
+
fine
|
136
|
+
|
137
|
+
##
|
138
|
+
# Segnala che un parametro deve essere uno dei tipi specificati.
|
139
|
+
definisci _segnala_tipo_non_valido(tipi = tipi_desiderati)
|
140
|
+
@valido = no
|
141
|
+
@errore = "deve essere #{_messaggio_per tipi}."
|
142
|
+
lancia :controllo_terminato
|
143
|
+
fine
|
144
|
+
|
145
|
+
##
|
146
|
+
# Controlla che gli elementi della lista siano tutti del tipo desiderato.
|
147
|
+
definisci _controlla_tipi_elementi_lista
|
148
|
+
ritorna se tipi_desiderati.non_include? :lista o valore.non_è_una? Lista
|
149
|
+
|
150
|
+
lista = valore
|
151
|
+
lista.per_ognuno esegui |elemento|
|
152
|
+
se tipi_elementi_lista.tutti? { |tipo| _tipo_non_corrispondente? tipo, elemento }
|
153
|
+
_segnala_tipo_non_valido tipi_elementi_lista
|
154
|
+
fine
|
155
|
+
fine
|
156
|
+
fine
|
157
|
+
|
158
|
+
##
|
159
|
+
# Controlla i parametri annidati.
|
160
|
+
definisci _controlla_annidato(&blocco)
|
161
|
+
ritorna se tipi_desiderati.non_include? :mappa e tipi_desiderati.non_include? :lista
|
162
|
+
ritorna se valore.nullo?
|
163
|
+
|
164
|
+
se valore.è_una? Mappa
|
165
|
+
_controllo_annidato_mappa &blocco
|
166
|
+
fine
|
167
|
+
|
168
|
+
se valore.è_una? Lista
|
169
|
+
_controllo_annidato_lista valore, &blocco
|
170
|
+
fine
|
171
|
+
fine
|
172
|
+
|
173
|
+
##
|
174
|
+
# Controlla i parametri annidati su mappa.
|
175
|
+
definisci _controllo_annidato_mappa(&blocco)
|
176
|
+
parametri_annidati = Iris::Azione::Parametri.nuovo valore
|
177
|
+
blocco.avvia parametri_annidati
|
178
|
+
@valido = (@valido e parametri_annidati.validi?)
|
179
|
+
@valore = parametri_annidati.in_mappa se parametri_annidati.validi?
|
180
|
+
@errore = parametri_annidati.errori se parametri_annidati.errati?
|
181
|
+
fine
|
182
|
+
|
183
|
+
##
|
184
|
+
# Controlla i parametri annidati su lista.
|
185
|
+
definisci _controllo_annidato_lista(lista, &blocco)
|
186
|
+
elementi_processati = []
|
187
|
+
|
188
|
+
lista.per_ognuno.con_indice esegui |elemento, indice|
|
189
|
+
parametri_elemento = Iris::Azione::Parametri.nuovo elemento
|
190
|
+
blocco.avvia parametri_elemento
|
191
|
+
se parametri_elemento.validi?
|
192
|
+
elementi_processati << parametri_elemento.in_mappa
|
193
|
+
altrimenti
|
194
|
+
@valido = no
|
195
|
+
@errore = Mappa("elemento alla posizione #{indice}:" => parametri_elemento.errori)
|
196
|
+
fine
|
197
|
+
fine
|
198
|
+
|
199
|
+
@valore = elementi_processati se valido?
|
200
|
+
fine
|
201
|
+
|
202
|
+
##
|
203
|
+
# Determina se il tipo del valore di un parametro è corrispondente
|
204
|
+
# a quello desiderato.
|
205
|
+
definisci _tipo_non_corrispondente?(tipo_desiderato, valore_da_controllare = valore)
|
206
|
+
ritorna no se valore_da_controllare.non_specificato?
|
207
|
+
|
208
|
+
considera tipo_desiderato
|
209
|
+
quando :intero, :interi, :decimale, :decimali
|
210
|
+
ritorna si se valore_da_controllare.non_è_un? Numerico
|
211
|
+
quando :booleano, :booleani
|
212
|
+
ritorna si se valore_da_controllare.non_è_un? TrueClass e valore_da_controllare.non_è_un? FalseClass
|
213
|
+
quando :data, :date
|
214
|
+
ritorna si se valore_da_controllare.non_è_una? Data
|
215
|
+
quando :stringa, :stringhe
|
216
|
+
ritorna si se valore_da_controllare.non_è_una? Stringa
|
217
|
+
quando :simbolo, :simboli
|
218
|
+
ritorna si se valore_da_controllare.non_è_una? Simbolo
|
219
|
+
quando :id_oggetto, :id_oggetti
|
220
|
+
ritorna si se valore_da_controllare.non_è_un? IdOggetto
|
221
|
+
quando :lista, :liste
|
222
|
+
ritorna si se valore_da_controllare.non_è_una? Lista
|
223
|
+
quando :mappa, :mappe
|
224
|
+
ritorna si se valore_da_controllare.non_è_una? Mappa
|
225
|
+
altrimenti
|
226
|
+
alza "tipo `#{tipo_desiderato}` non supportato"
|
227
|
+
fine
|
228
|
+
|
229
|
+
no
|
230
|
+
fine
|
231
|
+
|
232
|
+
##
|
233
|
+
# Messaggio per il tipo parametro.
|
234
|
+
definisci _messaggio_per(tipi = tipi_desiderati)
|
235
|
+
lista_messaggi = []
|
236
|
+
|
237
|
+
tipi.per_ognuno esegui |tipo_desiderato|
|
238
|
+
considera tipo_desiderato
|
239
|
+
quando :booleano allora lista_messaggi << "un booleano"
|
240
|
+
quando :booleani allora lista_messaggi << "una lista di booleani"
|
241
|
+
quando :data allora lista_messaggi << "una data"
|
242
|
+
quando :date allora lista_messaggi << "una lista di date"
|
243
|
+
quando :stringa allora lista_messaggi << "una stringa"
|
244
|
+
quando :stringhe allora lista_messaggi << "una lista di stringhe"
|
245
|
+
quando :simbolo allora lista_messaggi << "una stringa"
|
246
|
+
quando :simboli allora lista_messaggi << "una lista di simboli"
|
247
|
+
quando :id_oggetto allora lista_messaggi << "un id oggetto"
|
248
|
+
quando :id_oggetti allora lista_messaggi << "una lista di id oggetti"
|
249
|
+
quando :intero allora lista_messaggi << "un numero intero"
|
250
|
+
quando :interi allora lista_messaggi << "una lista di numeri interi"
|
251
|
+
quando :decimale allora lista_messaggi << "un numero decimale"
|
252
|
+
quando :decimali allora lista_messaggi << "una lista di numeri decimali"
|
253
|
+
quando :lista allora lista_messaggi << "una lista"
|
254
|
+
quando :liste allora lista_messaggi << "una lista di liste"
|
255
|
+
quando :mappa allora lista_messaggi << "un oggetto"
|
256
|
+
quando :mappe allora lista_messaggi << "una lista di oggetti"
|
257
|
+
fine
|
258
|
+
fine
|
259
|
+
|
260
|
+
lista_messaggi.unisci(" o ")
|
261
|
+
fine
|
262
|
+
|
263
|
+
fine
|
264
|
+
fine
|
265
|
+
fine
|
266
|
+
fine
|
data/lib/iris/navigatore.ir
CHANGED
@@ -89,7 +89,7 @@ modulo Iris
|
|
89
89
|
##
|
90
90
|
# Definisce una rotta.
|
91
91
|
definisci rotta(percorso_rotta, **opzioni)
|
92
|
-
azione = opzioni.
|
92
|
+
azione = opzioni.prendi :verso
|
93
93
|
nome_metodo = __callee__
|
94
94
|
percorso_completo = [ @percorso_padre, percorso_rotta ].unisci
|
95
95
|
alza "Metodo `#{nome_metodo}` non supportato. I metodi supportati per le rotte "\
|
data/lib/iris/versione.ir
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iris-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesco Ballardin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: italian-ruby
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/iris/azione.ir
|
75
75
|
- lib/iris/azione/intestazioni.ir
|
76
76
|
- lib/iris/azione/parametri.ir
|
77
|
+
- lib/iris/azione/parametri/parametro.ir
|
77
78
|
- lib/iris/load.rb
|
78
79
|
- lib/iris/navigatore.ir
|
79
80
|
- lib/iris/navigatore/percorso.ir
|