iris-rb 0.1.17 → 0.2.0
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/Gemfile.lock +2 -2
- data/lib/iris/applicazione.ir +3 -3
- data/lib/iris/azione/parametri.ir +3 -3
- data/lib/iris/azione/registratore.ir +4 -4
- data/lib/iris/azione.ir +55 -35
- data/lib/iris/navigatore/rotta.ir +12 -7
- data/lib/iris/navigatore.ir +57 -23
- data/lib/iris/versione.ir +1 -1
- data/lib/iris.ir +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 342f7b6e458a03751e4cc02ea3ea1d1136facb8ba2f1c9b3e6ed2618356009b6
|
4
|
+
data.tar.gz: 23dd8f9356408ff363e1d9c248a37510ea2b91eb91068abcb4347c452c7410bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a06570fcdf74938281327bbded5e1742bdbcf81a5454907454b55aed8359e939158578f68bf856331c432b52a0112ddbfb51251afd59946d65f741d046eec956
|
7
|
+
data.tar.gz: 9a92fa07eebcbc5130d9cdb174b67a8ff3ec38c5675894b864a918f4e6348886e8e2c3d66ffbded6dc41890557a26aba8d1b19fee5a6008667616bef9ca56819
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
iris-rb (0.1.
|
4
|
+
iris-rb (0.1.17)
|
5
5
|
italian-ruby (~> 0.1)
|
6
6
|
rack (~> 2.2)
|
7
7
|
|
@@ -9,7 +9,7 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
diff-lcs (1.3)
|
12
|
-
italian-ruby (0.1.
|
12
|
+
italian-ruby (0.1.17)
|
13
13
|
ruby2ruby (~> 2.4)
|
14
14
|
rack (2.2.2)
|
15
15
|
rake (12.3.3)
|
data/lib/iris/applicazione.ir
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
##
|
2
2
|
# Descrive un'applicazione di Iris.
|
3
3
|
# Un'applicazione Iris è compatibile con Rack, quindi è un
|
4
|
-
# oggetto che risponde al metodo `call` (alias `
|
4
|
+
# oggetto che risponde al metodo `call` (alias `avvia` per Italian Ruby)
|
5
5
|
# e ritorna una risposta in forma di array con stato, intestazioni e corpo.
|
6
6
|
#
|
7
7
|
# Un'esempio di applicazione Iris può essere il seguente:
|
@@ -43,10 +43,10 @@ modulo Iris
|
|
43
43
|
|
44
44
|
##
|
45
45
|
# Questo metodo rende Iris::Applicazione compatibile con Rack.
|
46
|
-
definisci
|
46
|
+
definisci avvia(env)
|
47
47
|
@app.call env
|
48
48
|
fine
|
49
|
-
alias :call :
|
49
|
+
alias :call :avvia
|
50
50
|
|
51
51
|
fine
|
52
52
|
fine
|
@@ -16,7 +16,7 @@ modulo Iris
|
|
16
16
|
# fine
|
17
17
|
# fine
|
18
18
|
#
|
19
|
-
# definisci
|
19
|
+
# definisci avvia
|
20
20
|
# fine
|
21
21
|
#
|
22
22
|
# fine
|
@@ -98,7 +98,7 @@ modulo Iris
|
|
98
98
|
ritorna se @validi == no
|
99
99
|
|
100
100
|
regola_rispettata = si
|
101
|
-
regola_rispettata = blocco.
|
101
|
+
regola_rispettata = blocco.avvia se blocco.esiste?
|
102
102
|
se regola_rispettata == no
|
103
103
|
@validi = no
|
104
104
|
@errori.deposita :regole, [] se @errori.non_ha_chiave? :regole
|
@@ -135,7 +135,7 @@ modulo Iris
|
|
135
135
|
lancia :controllo_terminato se valore_parametro.nullo?
|
136
136
|
|
137
137
|
parametri_annidati = Parametri.nuovo valore_parametro
|
138
|
-
blocco.
|
138
|
+
blocco.avvia parametri_annidati
|
139
139
|
@validi = (@validi e parametri_annidati.validi?)
|
140
140
|
@parametri_processati.deposita parametro, parametri_annidati.ottieni se @validi == si
|
141
141
|
@errori.deposita parametro, parametri_annidati.errori se parametri_annidati.errati?
|
@@ -13,10 +13,10 @@ modulo Iris
|
|
13
13
|
applicazione = "IRIS"
|
14
14
|
fine
|
15
15
|
|
16
|
-
metodo_richiesta = @
|
17
|
-
percorso_richiesta = @
|
18
|
-
parametri = @
|
19
|
-
inizio_richiesta = @
|
16
|
+
metodo_richiesta = @richiesta["REQUEST_METHOD"]
|
17
|
+
percorso_richiesta = @richiesta["REQUEST_PATH"]
|
18
|
+
parametri = @richiesta["iris.parametri"]
|
19
|
+
inizio_richiesta = @richiesta["timer.start"]
|
20
20
|
se inizio_richiesta.specificato?
|
21
21
|
tempo_richiesta = "#{((Tempo.adesso - inizio_richiesta) * 1000).arrotonda}ms"
|
22
22
|
altrimenti
|
data/lib/iris/azione.ir
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "json"
|
1
2
|
richiedi_relativo "azione/intestazioni"
|
2
3
|
richiedi_relativo "azione/parametri"
|
3
4
|
richiedi_relativo "azione/registratore"
|
@@ -26,7 +27,7 @@ richiedi_relativo "azione/registratore"
|
|
26
27
|
# classe ListaLibri
|
27
28
|
# includi Iris::Azione
|
28
29
|
#
|
29
|
-
# definisci
|
30
|
+
# definisci avvia
|
30
31
|
# [ 200, {}, [ "Libri" ] ]
|
31
32
|
# fine
|
32
33
|
#
|
@@ -34,7 +35,7 @@ richiedi_relativo "azione/registratore"
|
|
34
35
|
# fine
|
35
36
|
# fine
|
36
37
|
#
|
37
|
-
# L'azione `ListaLibri` deve implementare il metodo
|
38
|
+
# L'azione `ListaLibri` deve implementare il metodo avvia, che permette
|
38
39
|
# di eseguire la procedura desiderata, e fornire la risposta utilizzando
|
39
40
|
# le variabili d'istanza `@stato`, `@intestazioni` e `@corpo`.
|
40
41
|
modulo Iris
|
@@ -56,8 +57,8 @@ modulo Iris
|
|
56
57
|
|
57
58
|
##
|
58
59
|
# Metodo principale eseguito per risolvere l'azione.
|
59
|
-
definisci
|
60
|
-
_imposta_variabili_istanza
|
60
|
+
definisci _avvia(richiesta)
|
61
|
+
_imposta_variabili_istanza richiesta
|
61
62
|
_converti_parametri_interrogazione
|
62
63
|
_converti_corpo_in_json
|
63
64
|
_inizializza_parametri
|
@@ -66,13 +67,14 @@ modulo Iris
|
|
66
67
|
inizia
|
67
68
|
prima
|
68
69
|
valida_parametri
|
69
|
-
|
70
|
+
rilascia se blocco_dato?
|
70
71
|
recupera StandardError => errore
|
71
|
-
|
72
|
+
alza errore a_meno_che Iris.configurazione.cattura_errori
|
73
|
+
|
72
74
|
se Iris.configurazione.blocco_recupero_errori.esiste?
|
73
|
-
esegui_in_istanza &Iris.configurazione.blocco_recupero_errori
|
75
|
+
esegui_in_istanza errore, &Iris.configurazione.blocco_recupero_errori
|
74
76
|
altrimenti
|
75
|
-
arresta 500, errore:
|
77
|
+
arresta 500, errore: errore
|
76
78
|
fine
|
77
79
|
fine
|
78
80
|
fine
|
@@ -84,16 +86,7 @@ modulo Iris
|
|
84
86
|
|
85
87
|
[ @stato, @intestazioni, [ @corpo ] ]
|
86
88
|
fine
|
87
|
-
alias :
|
88
|
-
|
89
|
-
##
|
90
|
-
# Metodo per risolvere l'azione in modo personalizzato.
|
91
|
-
# In questo metodo è possibile impostare lo stato, le intestazioni
|
92
|
-
# o il corpo della risposta. È inoltre possibile utilizzare
|
93
|
-
# i metodi `arresta` e `stato` per interrompere il flusso dell'azione
|
94
|
-
# e ritornare immediatamente i valori passati.
|
95
|
-
definisci chiama
|
96
|
-
fine
|
89
|
+
alias :call :_avvia
|
97
90
|
|
98
91
|
##
|
99
92
|
# Aggiunge un aggancio per eseguire codice prima
|
@@ -101,7 +94,6 @@ modulo Iris
|
|
101
94
|
# controlli sull'utente o altre cose distribuite su azioni
|
102
95
|
# multiple.
|
103
96
|
definisci prima
|
104
|
-
rilascia se blocco_dato?
|
105
97
|
fine
|
106
98
|
|
107
99
|
##
|
@@ -109,7 +101,6 @@ modulo Iris
|
|
109
101
|
# dell'azione effettiva. A questo punto sono già definiti
|
110
102
|
# stato, intestazioni e corpo della risposta.
|
111
103
|
definisci dopo
|
112
|
-
rilascia se blocco_dato?
|
113
104
|
fine
|
114
105
|
|
115
106
|
##
|
@@ -134,48 +125,77 @@ modulo Iris
|
|
134
125
|
fine
|
135
126
|
alias :stato :arresta
|
136
127
|
|
128
|
+
##
|
129
|
+
# Codice da eseguire all'inclusione del modulo.
|
130
|
+
definisci se_stesso.included(azione)
|
131
|
+
azione.class_eval esegui
|
132
|
+
preponi Iris::Azione::InterfacciaAvvio
|
133
|
+
fine
|
134
|
+
fine
|
135
|
+
|
137
136
|
privati
|
138
137
|
|
139
138
|
##
|
140
139
|
# Imposta le variabili d'istanza iniziali.
|
141
|
-
definisci _imposta_variabili_istanza(
|
142
|
-
@
|
143
|
-
@stato
|
144
|
-
@intestazioni
|
145
|
-
@corpo
|
146
|
-
@
|
140
|
+
definisci _imposta_variabili_istanza(richiesta)
|
141
|
+
@richiesta = richiesta
|
142
|
+
@stato = 200
|
143
|
+
@intestazioni = INTESTAZIONI_PREDEFINITE
|
144
|
+
@corpo = nullo
|
145
|
+
@richiesta["iris.parametri"] ||= Mappa.nuova
|
147
146
|
fine
|
148
147
|
|
149
148
|
##
|
150
149
|
# Inizializza i parametri.
|
151
150
|
definisci _inizializza_parametri
|
152
|
-
@parametri = Parametri.nuovo @
|
151
|
+
@parametri = Parametri.nuovo @richiesta["iris.parametri"]
|
153
152
|
fine
|
154
153
|
|
155
154
|
##
|
156
155
|
# Converte il corpo della richiesta in JSON.
|
157
156
|
definisci _converti_corpo_in_json
|
158
|
-
ritorna se @
|
159
|
-
corpo = @
|
157
|
+
ritorna se @richiesta["rack.input"].nullo?
|
158
|
+
corpo = @richiesta["rack.input"].read
|
160
159
|
ritorna se corpo.non_specificato?
|
161
160
|
|
162
161
|
inizia
|
163
162
|
corpo_convertito = (JSON.processa corpo).simbolizza
|
164
|
-
@
|
165
|
-
@
|
163
|
+
@richiesta["iris.parametri"].fondi! corpo_convertito se corpo_convertito.è_una? Mappa
|
164
|
+
@richiesta["iris.corpo"] = corpo_convertito
|
166
165
|
recupera JSON::ParserError => errore
|
167
166
|
arresta 400, errore: "Il corpo fornito non è un JSON valido."
|
168
167
|
fine
|
169
|
-
@
|
168
|
+
@richiesta["rack.input"].rewind
|
170
169
|
fine
|
171
170
|
|
172
171
|
##
|
173
172
|
# Converte i parametri della richiesta.
|
174
173
|
definisci _converti_parametri_interrogazione
|
175
|
-
ritorna a_meno_che @
|
176
|
-
parametri_stringa_interrogazione = @
|
177
|
-
@
|
174
|
+
ritorna a_meno_che @richiesta["REQUEST_URI"].specificato? e @richiesta["REQUEST_URI"].include?("?")
|
175
|
+
parametri_stringa_interrogazione = @richiesta["REQUEST_URI"].partiziona("?").ultimo
|
176
|
+
@richiesta["iris.parametri"].fondi! Rack::Utils.parse_nested_query(parametri_stringa_interrogazione).simbolizza
|
178
177
|
fine
|
179
178
|
|
179
|
+
##
|
180
|
+
# Questo modulo serve per eseguire il codice del metodo `_avvia`
|
181
|
+
# anche quando viene ridefinito nella classe includente.
|
182
|
+
modulo InterfacciaAvvio
|
183
|
+
|
184
|
+
##
|
185
|
+
# Metodo per risolvere l'azione in modo personalizzato.
|
186
|
+
# In questo metodo è possibile impostare lo stato, le intestazioni
|
187
|
+
# o il corpo della risposta. È inoltre possibile utilizzare
|
188
|
+
# i metodi `arresta` e `stato` per interrompere il flusso dell'azione
|
189
|
+
# e ritornare immediatamente i valori passati.
|
190
|
+
definisci avvia(richiesta)
|
191
|
+
_avvia(richiesta) esegui
|
192
|
+
se definito? super
|
193
|
+
super
|
194
|
+
fine
|
195
|
+
fine
|
196
|
+
fine
|
197
|
+
|
198
|
+
fine
|
199
|
+
|
180
200
|
fine
|
181
201
|
fine
|
@@ -10,17 +10,22 @@ modulo Iris
|
|
10
10
|
@parametri = Mappa.nuova
|
11
11
|
fine
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
se @
|
18
|
-
|
13
|
+
##
|
14
|
+
# Avvia l'azione corrispondente alla rotta.
|
15
|
+
definisci avvia_azione(richiesta)
|
16
|
+
richiesta["iris.parametri"] ||= Mappa.nuova
|
17
|
+
richiesta["iris.parametri"].fondi! @parametri se @parametri.esiste?
|
18
|
+
|
19
|
+
se @azione.risponde_a? :avvia
|
20
|
+
@azione.avvia richiesta
|
19
21
|
altrimenti
|
20
|
-
@azione.nuova.avvia
|
22
|
+
@azione.nuova.avvia richiesta
|
21
23
|
fine
|
22
24
|
fine
|
23
25
|
|
26
|
+
##
|
27
|
+
# Determina se la rotta è raggiungibile per il metodo
|
28
|
+
# e il percorso della richiesta.
|
24
29
|
definisci raggiungibile_per?(metodo, percorso_richiesta)
|
25
30
|
ritorna no se metodo != @metodo
|
26
31
|
ritorna si se @passi_definiti.ultimo == "*"
|
data/lib/iris/navigatore.ir
CHANGED
@@ -9,8 +9,9 @@ modulo Iris
|
|
9
9
|
|
10
10
|
definisci inizializzatore(azione: nulla, percorso_padre: nullo, &blocco)
|
11
11
|
@rotte = []
|
12
|
+
@montaggi = []
|
12
13
|
@percorso_padre = percorso_padre
|
13
|
-
@azione_rotta_non_raggiungibile = RottaNonRaggiungibile
|
14
|
+
@azione_rotta_non_raggiungibile = RottaNonRaggiungibile.nuova
|
14
15
|
|
15
16
|
se azione.esiste?
|
16
17
|
@azione = azione
|
@@ -19,15 +20,19 @@ modulo Iris
|
|
19
20
|
fine
|
20
21
|
fine
|
21
22
|
|
22
|
-
definisci risolvi(
|
23
|
+
definisci risolvi(richiesta)
|
23
24
|
se @azione.esiste?
|
24
|
-
@azione.avvia
|
25
|
+
@azione.avvia richiesta
|
25
26
|
altrimenti
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
cerca_rotta_raggiungibile_per richiesta
|
28
|
+
|
29
|
+
ritorna @azione_rotta_non_raggiungibile.avvia(richiesta) se @rotta_raggiungibile.non_esiste?
|
30
|
+
ritorna @rotta_raggiungibile.avvia_azione(richiesta) se @rotta_raggiungibile.è_una? Iris::Navigatore::Rotta
|
31
|
+
|
32
|
+
se @rotta_raggiungibile.risponde_a? :avvia
|
33
|
+
@rotta_raggiungibile.avvia richiesta
|
29
34
|
altrimenti
|
30
|
-
@
|
35
|
+
@rotta_raggiungibile.nuova.avvia richiesta
|
31
36
|
fine
|
32
37
|
fine
|
33
38
|
fine
|
@@ -35,25 +40,47 @@ modulo Iris
|
|
35
40
|
|
36
41
|
##
|
37
42
|
# Cerca la rotta raggiungibile per la richiesta.
|
38
|
-
definisci cerca_rotta_raggiungibile_per(
|
39
|
-
rotta_raggiungibile
|
40
|
-
metodo
|
41
|
-
percorso_richiesta
|
43
|
+
definisci cerca_rotta_raggiungibile_per(richiesta)
|
44
|
+
@rotta_raggiungibile = nulla
|
45
|
+
@metodo = richiesta["REQUEST_METHOD"]
|
46
|
+
@percorso_richiesta = richiesta["iris.percorso"] || richiesta["REQUEST_PATH"] || richiesta["PATH_INFO"]
|
42
47
|
|
43
48
|
cattura :rotta_trovata esegui
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
cerca_fra_i_montaggi richiesta
|
50
|
+
cerca_fra_le_rotte richiesta
|
51
|
+
fine
|
52
|
+
|
53
|
+
@rotta_raggiungibile
|
54
|
+
fine
|
55
|
+
|
56
|
+
##
|
57
|
+
# Cerca se fra i montaggi c'è una rotta raggiungibile
|
58
|
+
# per la richiesta.
|
59
|
+
definisci cerca_fra_i_montaggi(richiesta)
|
60
|
+
@montaggi.per_ognuno esegui |montaggio|
|
61
|
+
se @percorso_richiesta.inizia_con? montaggio[:su]
|
62
|
+
@rotta_raggiungibile = montaggio[:applicazione]
|
63
|
+
richiesta["iris.percorso"] = @percorso_richiesta.rimpiazza montaggio[:su], ""
|
64
|
+
lancia :rotta_trovata
|
65
|
+
fine
|
66
|
+
fine
|
67
|
+
fine
|
68
|
+
|
69
|
+
##
|
70
|
+
# Cerca se fra le rotte definite ce n'è una raggiungibile
|
71
|
+
# per la richiesta.
|
72
|
+
definisci cerca_fra_le_rotte(richiesta)
|
73
|
+
@rotte.per_ognuna esegui |rotta_definita|
|
74
|
+
se rotta_definita.è_una? Iris::Navigatore::Rotta
|
75
|
+
se rotta_definita.raggiungibile_per? @metodo, @percorso_richiesta
|
76
|
+
@rotta_raggiungibile = rotta_definita
|
77
|
+
lancia :rotta_trovata
|
53
78
|
fine
|
79
|
+
altrimenti_se rotta_definita.è_un? Iris::Navigatore
|
80
|
+
@rotta_raggiungibile = rotta_definita.cerca_rotta_raggiungibile_per richiesta
|
81
|
+
lancia :rotta_trovata se @rotta_raggiungibile.esiste?
|
54
82
|
fine
|
55
83
|
fine
|
56
|
-
rotta_raggiungibile
|
57
84
|
fine
|
58
85
|
|
59
86
|
privati
|
@@ -77,20 +104,27 @@ modulo Iris
|
|
77
104
|
alias :options :rotta
|
78
105
|
|
79
106
|
##
|
80
|
-
# Definisce una percorso
|
107
|
+
# Definisce una percorso annidato.
|
81
108
|
definisci percorso(percorso_rotta, &blocco)
|
82
109
|
alza "Definire un percorso valido, non può essere nullo né vuoto." se percorso_rotta.non_specificato?
|
83
110
|
percorso_completo = [ @percorso_padre, percorso_rotta ].unisci
|
84
111
|
@rotte << Iris::Navigatore.nuovo(azione: nulla, percorso_padre: percorso_completo, &blocco)
|
85
112
|
fine
|
86
113
|
|
114
|
+
##
|
115
|
+
# Monta un'altra applicazione.
|
116
|
+
definisci monta(applicazione, su: nullo)
|
117
|
+
alza "Definire un percorso valido, non può essere nullo né vuoto." se su.non_specificato?
|
118
|
+
@montaggi << Mappa[applicazione: applicazione, su: su]
|
119
|
+
fine
|
120
|
+
|
87
121
|
##
|
88
122
|
# L'azione predefinita con cui rispondere se non vengono
|
89
123
|
# trovate rotte raggiungibili per il metodo e il percorso richiesto.
|
90
124
|
classe RottaNonRaggiungibile
|
91
125
|
includi Iris::Azione
|
92
126
|
|
93
|
-
definisci
|
127
|
+
definisci avvia(richiesta)
|
94
128
|
arresta 405, errore: "Nessuna rotta trovata per questo percorso."
|
95
129
|
fine
|
96
130
|
fine
|
data/lib/iris/versione.ir
CHANGED
data/lib/iris.ir
CHANGED
@@ -10,10 +10,12 @@ modulo Iris
|
|
10
10
|
|
11
11
|
classe Configurazione
|
12
12
|
accessore :registra_azioni
|
13
|
+
accessore :cattura_errori
|
13
14
|
accessore :blocco_recupero_errori
|
14
15
|
|
15
16
|
definisci inizializzatore
|
16
|
-
@registra_azioni
|
17
|
+
@registra_azioni = si
|
18
|
+
@cattura_errori = no
|
17
19
|
@blocco_recupero_errori = nullo
|
18
20
|
fine
|
19
21
|
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
|
+
version: 0.2.0
|
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-04-
|
11
|
+
date: 2020-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: italian-ruby
|