iris-rb 0.1.17 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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