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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f530ed97880d96359159d5cb55abee605f9aa59d1f23e536b4c1885288da71c
4
- data.tar.gz: bbf25b5000ec1e074e6420edff1a9d13c3a23053444ca38366a9d91cc96c5ec0
3
+ metadata.gz: 342f7b6e458a03751e4cc02ea3ea1d1136facb8ba2f1c9b3e6ed2618356009b6
4
+ data.tar.gz: 23dd8f9356408ff363e1d9c248a37510ea2b91eb91068abcb4347c452c7410bc
5
5
  SHA512:
6
- metadata.gz: 60da79d63bd677064142b3db4a7fe870b7c5832da12d47c14532a0ad8795812d6f7b7d2820602c9211869bf362f878c70444b0d9048b0901ec52ce54c34868dc
7
- data.tar.gz: b8aa932680104bf1aeaf67c93e3b84336ac08e2dee651137f9d3e1d56a8b40950c04f72887e695615e4157036d328704cd558fe2fb35d7945bb60dbfe1096b3a
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.10)
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.13)
12
+ italian-ruby (0.1.17)
13
13
  ruby2ruby (~> 2.4)
14
14
  rack (2.2.2)
15
15
  rake (12.3.3)
@@ -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 `chiama` per Italian Ruby)
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 chiama(env)
46
+ definisci avvia(env)
47
47
  @app.call env
48
48
  fine
49
- alias :call :chiama
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 chiama
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.chiama se blocco.esiste?
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.chiama parametri_annidati
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 = @env["REQUEST_METHOD"]
17
- percorso_richiesta = @env["REQUEST_PATH"]
18
- parametri = @env["iris.parametri"]
19
- inizio_richiesta = @env["timer.start"]
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 chiama
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 chiama, che permette
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 call(env)
60
- _imposta_variabili_istanza env
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
- chiama
70
+ rilascia se blocco_dato?
70
71
  recupera StandardError => errore
71
- @errore = errore
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: @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 :avvia :call
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(env)
142
- @env = env
143
- @stato = 200
144
- @intestazioni = INTESTAZIONI_PREDEFINITE
145
- @corpo = nullo
146
- @env["iris.parametri"] ||= Mappa.nuova
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 @env["iris.parametri"]
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 @env["rack.input"].nullo?
159
- corpo = @env["rack.input"].read
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
- @env["iris.parametri"].fondi! corpo_convertito se corpo_convertito.è_una? Mappa
165
- @env["iris.corpo"] = corpo_convertito
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
- @env["rack.input"].rewind
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 @env["REQUEST_URI"].specificato? e @env["REQUEST_URI"].include?("?")
176
- parametri_stringa_interrogazione = @env["REQUEST_URI"].partiziona("?").ultimo
177
- @env["iris.parametri"].fondi! Rack::Utils.parse_nested_query(parametri_stringa_interrogazione).simbolizza
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
- definisci raggiungi(env)
14
- env["iris.parametri"] ||= Mappa.nuova
15
- env["iris.parametri"].fondi! @parametri se @parametri.esiste?
16
-
17
- se @azione.risponde_a? :chiama
18
- @azione.chiama env
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 env
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 == "*"
@@ -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(env)
23
+ definisci risolvi(richiesta)
23
24
  se @azione.esiste?
24
- @azione.avvia env
25
+ @azione.avvia richiesta
25
26
  altrimenti
26
- rotta_raggiungibile = cerca_rotta_raggiungibile_per env
27
- se rotta_raggiungibile.esiste?
28
- rotta_raggiungibile.raggiungi env
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
- @azione_rotta_non_raggiungibile.nuova.avvia env
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(env)
39
- rotta_raggiungibile = nulla
40
- metodo = env["REQUEST_METHOD"]
41
- percorso_richiesta = env["REQUEST_PATH"] || env["PATH_INFO"]
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
- @rotte.per_ognuna esegui |rotta_definita|
45
- se rotta_definita.è_una? Iris::Navigatore::Rotta
46
- se rotta_definita.raggiungibile_per? metodo, percorso_richiesta
47
- rotta_raggiungibile = rotta_definita
48
- lancia :rotta_trovata
49
- fine
50
- altrimenti_se rotta_definita.è_un? Iris::Navigatore
51
- rotta_raggiungibile = rotta_definita.cerca_rotta_raggiungibile_per env
52
- lancia :rotta_trovata se rotta_raggiungibile.esiste?
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 annidata.
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 chiama
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
@@ -1,3 +1,3 @@
1
1
  modulo Iris
2
- VERSIONE = "0.1.17"
2
+ VERSIONE = "0.2.0"
3
3
  fine
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 = si
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.1.17
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-09 00:00:00.000000000 Z
11
+ date: 2020-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: italian-ruby