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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a31ac3843e194993b7631bce432eae9bf870690fa241ccf65f5cf07955af81a1
4
- data.tar.gz: a0f6d111d4d91f7f8bb38992210a6c94688e3d50186ca981d3440a399a162ea3
3
+ metadata.gz: c0c0f2b700cf6afa534162c4494b9462d4c7bf1a05300d76f55ea138c57d579a
4
+ data.tar.gz: d100c0e76b78fe2687199286b0b2e2090f39e42b66f312a4afaed4e0bf9eb185
5
5
  SHA512:
6
- metadata.gz: bab5898303d6528b64cbccebdc417c9746ee2d4714e5a9e72e765165d3cecf5b2cd3e88f3ce38c48f365c64d6067533cb0310cdb8a65560343dbfc2803096754
7
- data.tar.gz: 8aa8016b1feda69ab7b2244a692919f501f77c951aadb85ae51fc9e6bd8918c07143b65d6b5678f88cef7c048cb8fbb18e7af772c7e576e1a04da56298df6ae1
6
+ metadata.gz: ef257008011ae9d9f125808504eb6fc907ca03f48f5bf67245c94f9475c707b34ee6238a0dd373d2a18dca1159f33a382dd979efe74230782b411007fb293cab
7
+ data.tar.gz: ecd52d67b889be73879f48ce4ebe7f04313e255dffc5c7bf5c15ccbe3cc4b8fe140e0add0f64ab6624f6a25e2bb1315d04e5cd0f80fdc29af6bee1fbd81fae3d
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /.italian-ruby
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
@@ -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
- inizia
161
- corpo_convertito = (JSON.processa corpo).simbolizza
162
- @richiesta["iris.parametri"].fondi! corpo_convertito se corpo_convertito.è_una? Mappa
163
- @richiesta["iris.corpo"] = corpo_convertito
164
- recupera JSON::ParserError => errore
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 obbligatoriol
71
- definisci obbligatorio(parametro, *opzioni, &blocco)
72
- _controlla parametro, _opzioni_parametro(*opzioni, &blocco).fondi(obbligatorio: si), &blocco
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
- definisci opzionale(parametro, *opzioni, &blocco)
78
- _controlla parametro, _opzioni_parametro(*opzioni, &blocco).fondi(obbligatorio: no), &blocco
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.ottieni(:prezzo) > 0.0
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
- # Esegue il controllo sul parametro.
115
- definisci _controlla(parametro, obbligatorio: si, annullabile: si, tipo_desiderato: :stringa, &blocco)
116
- valore_parametro = @parametri_originali.ottieni parametro, nullo
117
- valore_parametro = _applica_conversioni_su valore_parametro, tipo_desiderato
118
-
119
- cattura :controllo_terminato esegui
120
- _segnala_presenza_obbligatoria_su parametro se obbligatorio == si e @parametri_originali.non_ha_chiave? parametro
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
- # Esege il controllo annidato su un parametro di tipo lista.
158
- definisci _controllo_annidato_lista(parametro, valore_parametro, &blocco)
159
- elementi_processati = []
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
- valore_parametro.per_ognuno.con_indice esegui |elemento, indice|
163
- parametri_elemento = Parametri.nuovo elemento
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
- @parametri_processati.deposita parametro, elementi_processati se @validi == si
171
- @errori.deposita parametro, errori_trovati se errori_trovati.almeno_uno?
172
- fine
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
@@ -89,7 +89,7 @@ modulo Iris
89
89
  ##
90
90
  # Definisce una rotta.
91
91
  definisci rotta(percorso_rotta, **opzioni)
92
- azione = opzioni.ottieni :verso
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 "\
@@ -1,3 +1,3 @@
1
1
  modulo Iris
2
- VERSIONE = "0.4.3"
2
+ VERSIONE = "0.5.1"
3
3
  fine
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.3
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-05-19 00:00:00.000000000 Z
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