iris-rb 0.4.5 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/lib/iris/azione.ir +39 -14
- 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: 23ca7ed54735846ae28025fc6a9e2917fa0c7cb3dfe65a8f2d0d77d1af022940
|
4
|
+
data.tar.gz: a2523342c51420428147fecc3235609b1ffdef3c9d4893e3ca98792129dd57eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3cf569ab4b698d0eec8ff2744741c75b073ef8ce35bf75be3480279d331ff243436903058d39fd594985f944bae2694353a1c12d948f105895210e3df733732
|
7
|
+
data.tar.gz: 044ef0b26235e831f627f42ec0735cb10fdcbcb3992b182789d0f33c7174d672605020c85d8dcaef7cb09fbd5b3016e19438fa5586c90e612d9e62cd41065ed2
|
data/.gitignore
CHANGED
data/lib/iris/azione.ir
CHANGED
@@ -53,6 +53,10 @@ 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)
|
@@ -79,11 +83,17 @@ modulo Iris
|
|
79
83
|
fine
|
80
84
|
fine
|
81
85
|
|
82
|
-
@corpo = @corpo.in_json se @corpo.risponde_a? :in_json
|
83
|
-
@intestazioni.deposita "Content-Length", @corpo.bytesize.to_s a_meno_che @stato == 204
|
84
86
|
@registratore.registra_azione @stato
|
85
87
|
|
86
|
-
|
88
|
+
se @corpo == :vuoto
|
89
|
+
@intestazioni.deposita "Content-Length", "0"
|
90
|
+
[ @stato, @intestazioni, [] ]
|
91
|
+
altrimenti
|
92
|
+
tipo_contenuto_risposta = @intestazioni.prendi "Content-Type", nullo
|
93
|
+
@corpo = @corpo.in_json se @corpo.risponde_a? :in_json e tipo_contenuto_risposta == Intestazioni::TIPO_CONTENUTO
|
94
|
+
@intestazioni.deposita "Content-Length", @corpo.bytesize.to_s a_meno_che @stato == 204
|
95
|
+
[ @stato, @intestazioni, [ @corpo ] ]
|
96
|
+
fine
|
87
97
|
fine
|
88
98
|
alias :call :_avvia
|
89
99
|
|
@@ -139,7 +149,7 @@ modulo Iris
|
|
139
149
|
definisci _imposta_variabili_istanza(richiesta)
|
140
150
|
@richiesta = richiesta
|
141
151
|
@richiesta["iris.parametri"] ||= Mappa.nuova
|
142
|
-
@tipo_contenuto = richiesta.
|
152
|
+
@tipo_contenuto = richiesta.prendi "CONTENT_TYPE", "application/json"
|
143
153
|
@stato = 200
|
144
154
|
@intestazioni = INTESTAZIONI_PREDEFINITE.clona
|
145
155
|
@corpo = nullo
|
@@ -152,6 +162,15 @@ modulo Iris
|
|
152
162
|
@parametri = Parametri.nuovo @richiesta["iris.parametri"]
|
153
163
|
fine
|
154
164
|
|
165
|
+
##
|
166
|
+
# Converte il corpo multipart.
|
167
|
+
definisci _converti_corpo_multipart
|
168
|
+
ritorna se @tipo_contenuto.non_inizia_con? "multipart/form-data"
|
169
|
+
@richiesta["iris.parametri"].fondi! Rack::Multipart.parse_multipart(@richiesta).simbolizza
|
170
|
+
recupera Errore => errore
|
171
|
+
arresta 400, errore: "Errore nella conversione del contenuto multipart fornito."
|
172
|
+
fine
|
173
|
+
|
155
174
|
##
|
156
175
|
# Converte il corpo della richiesta in JSON.
|
157
176
|
definisci _converti_corpo_in_json
|
@@ -160,6 +179,7 @@ modulo Iris
|
|
160
179
|
corpo = @richiesta["rack.input"].read
|
161
180
|
ritorna se corpo.non_specificato?
|
162
181
|
|
182
|
+
corpo_codificato = _codifica_corpo_in_utf8 corpo
|
163
183
|
corpo_convertito = (JSON.processa corpo).simbolizza
|
164
184
|
@richiesta["iris.parametri"].fondi! corpo_convertito se corpo_convertito.è_una? Mappa
|
165
185
|
@richiesta["iris.parametri"].fondi! Mappa(_corpo: corpo_convertito) se corpo_convertito.non_è_una? Mappa
|
@@ -169,6 +189,20 @@ modulo Iris
|
|
169
189
|
arresta 400, errore: "Il corpo fornito non è un JSON valido."
|
170
190
|
fine
|
171
191
|
|
192
|
+
##
|
193
|
+
# Codifica il corpo in UTF-8.
|
194
|
+
definisci _codifica_corpo_in_utf8(corpo)
|
195
|
+
corpo_già_in_utf8 = corpo.forza_codifica_a("UTF-8").codifica_valida?
|
196
|
+
ritorna corpo.codifica_in("UTF-8") se corpo_già_in_utf8
|
197
|
+
|
198
|
+
CODIFICHE_SUPPORTATE.per_ognuna esegui |codifica|
|
199
|
+
codifica_valida = corpo.forza_codifica_a(codifica).codifica_valida?
|
200
|
+
ritorna corpo.codifica_in(codifica) se codifica_valida
|
201
|
+
fine
|
202
|
+
|
203
|
+
corpo
|
204
|
+
fine
|
205
|
+
|
172
206
|
##
|
173
207
|
# Converte i parametri della richiesta passati come interrogazione.
|
174
208
|
definisci _converti_parametri_interrogazione
|
@@ -177,15 +211,6 @@ modulo Iris
|
|
177
211
|
@richiesta["iris.parametri"].fondi! Rack::Utils.parse_nested_query(parametri_stringa_interrogazione).simbolizza
|
178
212
|
fine
|
179
213
|
|
180
|
-
##
|
181
|
-
# Converte il corpo multipart.
|
182
|
-
definisci _converti_corpo_multipart
|
183
|
-
ritorna se @tipo_contenuto.non_inizia_con? "multipart/form-data"
|
184
|
-
@richiesta["iris.parametri"].fondi! Rack::Multipart.parse_multipart(@richiesta).simbolizza
|
185
|
-
recupera Errore => errore
|
186
|
-
arresta 400, errore: "Errore nella conversione del contenuto multipart fornito."
|
187
|
-
fine
|
188
|
-
|
189
214
|
##
|
190
215
|
# Questo modulo serve per eseguire il codice del metodo `_avvia`
|
191
216
|
# anche quando viene ridefinito nella classe includente.
|
@@ -208,4 +233,4 @@ modulo Iris
|
|
208
233
|
fine
|
209
234
|
|
210
235
|
fine
|
211
|
-
fine
|
236
|
+
fine
|
@@ -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.3
|
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-10-19 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
|