iris-rb 0.1.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6be422f8df8357d8d71729ee28dec6559f1dee436a0ddb535cf747346376fd24
4
+ data.tar.gz: a3b781e3a5ce7bfc19b3a915b0a02818d3853a6d64f9017c0c54733b7c994d5f
5
+ SHA512:
6
+ metadata.gz: 33c0589f46d772a96532ffbd102dfbfcdbb7eb20703a7e29f02e708854657ef5843a4d56ed235766456038af6613a960f70fdc969361a510471c418b13482821
7
+ data.tar.gz: ed95846c151350e6bcd4bd7cdc42e856c459f9f8736dee925009f6f035abf5d037705d6abcb7133b05f6a9e4e8c2ed28e671a40f21c9c50b98d5e191386bb5c1
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.0
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in iris.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "rspec", "~> 3.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,60 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ iris-rb (0.1.0)
5
+ hanami-router (~> 1.3)
6
+ hanami-utils (~> 1.3)
7
+ italian-ruby (~> 0.1)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ concurrent-ruby (1.1.6)
13
+ diff-lcs (1.3)
14
+ hanami-router (1.3.2)
15
+ hanami-utils (~> 1.3)
16
+ http_router (= 0.11.2)
17
+ rack (~> 2.0)
18
+ hanami-utils (1.3.6)
19
+ concurrent-ruby (~> 1.0)
20
+ transproc (~> 1.0)
21
+ http_router (0.11.2)
22
+ rack (>= 1.0.0)
23
+ url_mount (~> 0.2.1)
24
+ italian-ruby (0.1.6)
25
+ ruby2ruby (~> 2.4)
26
+ rack (2.2.2)
27
+ rake (12.3.3)
28
+ rspec (3.9.0)
29
+ rspec-core (~> 3.9.0)
30
+ rspec-expectations (~> 3.9.0)
31
+ rspec-mocks (~> 3.9.0)
32
+ rspec-core (3.9.1)
33
+ rspec-support (~> 3.9.1)
34
+ rspec-expectations (3.9.1)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.9.0)
37
+ rspec-mocks (3.9.1)
38
+ diff-lcs (>= 1.2.0, < 2.0)
39
+ rspec-support (~> 3.9.0)
40
+ rspec-support (3.9.2)
41
+ ruby2ruby (2.4.4)
42
+ ruby_parser (~> 3.1)
43
+ sexp_processor (~> 4.6)
44
+ ruby_parser (3.14.2)
45
+ sexp_processor (~> 4.9)
46
+ sexp_processor (4.14.1)
47
+ transproc (1.1.1)
48
+ url_mount (0.2.1)
49
+ rack
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ iris-rb!
56
+ rake (~> 12.0)
57
+ rspec (~> 3.0)
58
+
59
+ BUNDLED WITH
60
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Iris
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/iris`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'iris'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install iris
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/iris.
36
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ richiedi "iris"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/iris.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ require "italian/ruby"
2
+ richiedi_relativo "lib/iris/versione"
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "iris-rb"
6
+ spec.version = Iris::VERSIONE
7
+ spec.authors = ["Francesco Ballardin"]
8
+ spec.email = ["francesco.ballardin@develonproject.com"]
9
+
10
+ spec.summary = %q{Iris.}
11
+ spec.description = %q{Iris. Ruby.}
12
+ spec.homepage = "https://github.com/Pluvie/ruby-iris"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+
15
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/Pluvie/ruby-iris"
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ end
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_dependency "italian-ruby", "~> 0.1"
30
+ spec.add_dependency "hanami-router", "~> 1.3"
31
+ spec.add_dependency "hanami-utils", "~> 1.3"
32
+ end
@@ -0,0 +1,54 @@
1
+ require "hanami/router"
2
+
3
+ ##
4
+ # Descrive un'applicazione di Iris.
5
+ # Un'applicazione Iris è compatibile con Rack, quindi è un
6
+ # oggetto che risponde al metodo `call` (alias `chiama` per Italian Ruby)
7
+ # e ritorna una risposta in forma di array con stato, intestazioni e corpo.
8
+ #
9
+ # Un'esempio di applicazione Iris può essere il seguente:
10
+ #
11
+ # classe Libreria
12
+ # includi Iris::Applicazione
13
+ #
14
+ # definisci inizializzatore
15
+ # @app = _router
16
+ # fine
17
+ #
18
+ # privati
19
+ #
20
+ # definisci _router
21
+ # Hanami::Router.nuovo esegui
22
+ # get "/", to: Libreria::Azioni::Lista
23
+ # post "/crea", to: Libreria::Azioni::Crea
24
+ # fine
25
+ # fine
26
+ #
27
+ # fine
28
+ #
29
+ # Quest'applicazione d'esempio `Libreria` definisce due rotte, "/" e "/crea"
30
+ # che fanno capo a due rispettive azioni. Per dettagli su come definire le
31
+ # azioni, fare riferimento al modulo `Iris::Azioni` nel file lib/iris/azione.ir.
32
+ # Per dettagli su come costruire le rotte, fare riferimento al modulo Hanami::Router
33
+ # disponibile all'indirizzo https://github.com/hanami/router.
34
+ modulo Iris
35
+ modulo Applicazione
36
+
37
+ ##
38
+ # Inizializza l'applicazione. Questo metodo è da implementare
39
+ # nella classe in cui si include questo modulo, e dovrà
40
+ # creare una variabile d'istanza @app che sia compatibile con Rack.
41
+ # La variabile @app può essere un router che reindirizza la richiesta
42
+ # ad azioni interne.
43
+ definisci inizializzatore
44
+ fine
45
+
46
+ ##
47
+ # Questo metodo rende Iris::Applicazione compatibile con Rack.
48
+ definisci chiama(env)
49
+ @app.call env
50
+ fine
51
+ alias :call :chiama
52
+
53
+ fine
54
+ fine
@@ -0,0 +1,44 @@
1
+ modulo Iris
2
+ modulo Azione
3
+ ##
4
+ # Definisce costanti per le intestazioni.
5
+ modulo Intestazioni
6
+
7
+ ##
8
+ # Politica di sicurezza sorgenti.
9
+ POLITICA_SICUREZZA_SORGENTI =
10
+ "form-action 'self'; frame-ancestors 'self'; base-uri 'self'; default-src 'none'; "\
11
+ "script-src 'self'; connect-src 'self'; img-src 'self' https: data:; "\
12
+ "style-src 'self' 'unsafe-inline' https:; font-src 'self'; object-src 'none'; "\
13
+ "plugin-types application/pdf; child-src 'self'; frame-src 'self'; media-src 'self'".congela
14
+
15
+ ##
16
+ # Connessione.
17
+ CONNESSIONE = "keep-alive".congela
18
+
19
+ ##
20
+ # Controllo accessi.
21
+ CONTROLLO_ACCESSI = Mappa[
22
+ intestazioni: "Content-Type,Accept,Authorization,Session-Id".congela,
23
+ metodi: "GET,POST,PUT,PATCH,OPTIONS,DELETE".congela,
24
+ origini: "*".congela]
25
+
26
+ ##
27
+ # Tipo contenuto.
28
+ TIPO_CONTENUTO = "application/json; charset=utf-8".congela
29
+
30
+ ##
31
+ # Opzioni Tipo Contenuto.
32
+ OPZIONI_TIPO_CONTENUTO = "nosniff".congela
33
+
34
+ ##
35
+ # Opzioni Frame
36
+ OPZIONI_FRAME = "DENY".congela
37
+
38
+ ##
39
+ # Protezione Cross-site scripting (XSS).
40
+ PROTEZIONE_CROSS_SITE_SCRIPTING = "1; mode=block".congela
41
+
42
+ fine
43
+ fine
44
+ fine
@@ -0,0 +1,227 @@
1
+ modulo Iris
2
+ modulo Azione
3
+ ##
4
+ # Definisci i parametri di un'azione.
5
+ # I parametro possono essere controllati implementando il metodo `valida_parametri`.
6
+ # Un esempio di implementazione può essere il seguente:
7
+ #
8
+ # classe CreaLibro
9
+ # includi Iris::Azione
10
+ #
11
+ # definisci valida_parametri
12
+ # parametri.obbligatorio :nome, :stringa
13
+ # parametri.obbligatorio :autore esegui |autore|
14
+ # autore.obbligatorio :nome, :stringa
15
+ # autore.opzionale :età, :intero, :annullabile
16
+ # fine
17
+ # fine
18
+ #
19
+ # definisci chiama
20
+ # fine
21
+ #
22
+ # fine
23
+ #
24
+ # In questo esempio si richiede un parametro `nome` non annullabile e obbligatorio
25
+ # per definire il nome del libro, e poi un parametro obbligatorio `autore` che
26
+ # è annidato e rappresenta l'autore del libro, a sua volta contenente altre validazioni.
27
+ # Non c'è limite al numero di annidamenti possibili.
28
+ classe Parametri
29
+
30
+ ##
31
+ # Inizializza l'oggetto Parametri.
32
+ definisci inizializzatore(parametri_originali)
33
+ @parametri_originali = parametri_originali
34
+ @parametri_processati = Mappa.nuova
35
+ @errori = Mappa.nuova
36
+ @validi = si
37
+ fine
38
+
39
+ ##
40
+ # Determina se i parametri sono validi.
41
+ definisci validi?
42
+ @validi
43
+ fine
44
+
45
+ ##
46
+ # Determina se i parametri sono errati.
47
+ definisci errati?
48
+ !@validi
49
+ fine
50
+
51
+ ##
52
+ # Ritorna eventuali errori nei parametri.
53
+ definisci errori
54
+ @errori
55
+ fine
56
+
57
+ ##
58
+ # Ritorna i parametri processati.
59
+ definisci ottieni(*argomenti)
60
+ se argomenti.almeno_uno?
61
+ @parametri_processati.scava *argomenti
62
+ altrimenti
63
+ @parametri_processati
64
+ fine
65
+ fine
66
+
67
+ ##
68
+ # Esegue un controllo su un parametro obbligatoriol
69
+ definisci obbligatorio(parametro, *opzioni, &blocco)
70
+ _controlla parametro, _opzioni_parametro(*opzioni, &blocco).fondi(obbligatorio: si), &blocco
71
+ fine
72
+
73
+ ##
74
+ # Esegue un controllo su un parametro opzionale.
75
+ definisci opzionale(parametro, *opzioni, &blocco)
76
+ _controlla parametro, _opzioni_parametro(*opzioni, &blocco).fondi(obbligatorio: no), &blocco
77
+ fine
78
+
79
+ ##
80
+ # Definisce una regola personalizzata sui parametri.
81
+ # Un'esempio di regola potrebbe essere il seguente:
82
+ #
83
+ # classe AggiornaLibro
84
+ # includi Iris::Azione
85
+ #
86
+ # definisci valida_parametri
87
+ # parametri.regola "il prezzo deve essere maggiore di zero" esegui
88
+ # parametri.ottieni(:prezzo) > 0.0
89
+ # fine
90
+ # fine
91
+ # fine
92
+ #
93
+ # Il valore di ritorno della regola verrà valutato come booleano.
94
+ # In questo modo verrà aggiunto il messaggio di errore specificato
95
+ # alle regole, se la regola risulta falsa. Qualsiasi altro
96
+ # valore di ritorno verrà considerato come valido.
97
+ definisci regola(messaggio, &blocco)
98
+ ritorna se @validi == no
99
+
100
+ regola_rispettata = si
101
+ regola_rispettata = blocco.chiama se blocco.esiste?
102
+ se regola_rispettata == no
103
+ @validi = no
104
+ @errori.deposita :regole, [] se @errori.non_ha_chiave? :regole
105
+ @errori[:regole] << messaggio
106
+ fine
107
+ fine
108
+
109
+ privati
110
+
111
+ ##
112
+ # Recupera le opzioni del parametro, ovvero tipo e annullabilità.
113
+ definisci _opzioni_parametro(*opzioni, &blocco)
114
+ mappa_opzioni = Mappa[annullabile: no, tipo_desiderato: :stringa]
115
+ mappa_opzioni.deposita :annullabile, si se opzioni.include? :annullabile
116
+ considera
117
+ quando opzioni.include?(:booleano)
118
+ mappa_opzioni.deposita :tipo_desiderato, :booleano
119
+ quando opzioni.include?(:data)
120
+ mappa_opzioni.deposita :tipo_desiderato, :data
121
+ quando opzioni.include?(:stringa)
122
+ mappa_opzioni.deposita :tipo_desiderato, :stringa
123
+ quando opzioni.include?(:intero)
124
+ mappa_opzioni.deposita :tipo_desiderato, :intero
125
+ quando opzioni.include?(:decimale)
126
+ mappa_opzioni.deposita :tipo_desiderato, :decimale
127
+ quando opzioni.include?(:lista)
128
+ mappa_opzioni.deposita :tipo_desiderato, :lista
129
+ quando opzioni.include?(:mappa)
130
+ mappa_opzioni.deposita :tipo_desiderato, :mappa
131
+ fine
132
+ mappa_opzioni.deposita :tipo_desiderato, :mappa se blocco.esiste?
133
+ mappa_opzioni
134
+ fine
135
+
136
+ ##
137
+ # Esegue il controllo sul parametro.
138
+ definisci _controlla(parametro, obbligatorio: si, annullabile: si, tipo_desiderato: :stringa, &blocco)
139
+ valore_parametro = @parametri_originali.ottieni parametro, nullo
140
+ valore_parametro = Data.strptime(valore_parametro, "%Y-%m-%d") recupera valore_parametro
141
+
142
+ cattura :controllo_terminato esegui
143
+ _segnala_presenza_obbligatoria_su parametro se obbligatorio == si e @parametri_originali.non_ha_chiave? parametro
144
+
145
+ se @parametri_originali.ha_chiave? parametro
146
+ _segnala_non_annullabile_su parametro se annullabile == no e valore_parametro.nullo?
147
+ _segnala_tipo_non_valido_su parametro, tipo_desiderato se tipo_desiderato != _tipo_del(valore_parametro)
148
+ @parametri_processati.deposita parametro, valore_parametro
149
+ fine
150
+
151
+ se blocco.esiste?
152
+ _segnala_annidamento_richiesto_su parametro se obbligatorio == si e valore_parametro.non_è_una? Mappa
153
+ lancia :controllo_terminato se valore_parametro.nullo?
154
+
155
+ parametri_annidati = Parametri.nuovo valore_parametro
156
+ blocco.chiama parametri_annidati
157
+ @validi = (@validi e parametri_annidati.validi?)
158
+ @parametri_processati.deposita parametro, parametri_annidati.ottieni se @validi == si
159
+ @errori.deposita parametro, parametri_annidati.errori se parametri_annidati.errati?
160
+ fine
161
+ fine
162
+ fine
163
+
164
+ ##
165
+ # Segnala che un parametro deve per forza essere passato.
166
+ definisci _segnala_presenza_obbligatoria_su(parametro)
167
+ @validi = no
168
+ @errori.deposita parametro, "è obbligatorio."
169
+ lancia :controllo_terminato
170
+ fine
171
+
172
+ ##
173
+ # Segnala che un parametro non può essere nullo.
174
+ definisci _segnala_non_annullabile_su(parametro)
175
+ @validi = no
176
+ @errori.deposita parametro, "non deve essere nullo."
177
+ lancia :controllo_terminato
178
+ fine
179
+
180
+ ##
181
+ # Segnala che un parametro deve essere una Mappa innestata.
182
+ definisci _segnala_annidamento_richiesto_su(parametro)
183
+ @validi = no
184
+ @errori.deposita parametro, "deve essere un oggetto."
185
+ lancia :controllo_terminato
186
+ fine
187
+
188
+ ##
189
+ # Segnala che un parametro deve essere del tipo specificato.
190
+ definisci _segnala_tipo_non_valido_su(parametro, tipo_desiderato)
191
+ @validi = no
192
+ @errori.deposita parametro, "deve essere #{_messaggio_per tipo_desiderato}."
193
+ lancia :controllo_terminato
194
+ fine
195
+
196
+ ##
197
+ # Ottiene il tipo del valore di un parametro.
198
+ definisci _tipo_del(valore_parametro)
199
+ considera
200
+ quando valore_parametro.è_un?(TrueClass) allora :booleano
201
+ quando valore_parametro.è_un?(FalseClass) allora :booleano
202
+ quando valore_parametro.è_una?(Data) allora :data
203
+ quando valore_parametro.è_una?(Stringa) allora :stringa
204
+ quando valore_parametro.è_un?(Intero) allora :intero
205
+ quando valore_parametro.è_un?(Decimale) allora :decimale
206
+ quando valore_parametro.è_una?(Lista) allora :lista
207
+ quando valore_parametro.è_una?(Mappa) allora :mappa
208
+ altrimenti nullo fine
209
+ fine
210
+
211
+ ##
212
+ # Messaggio per il tipo parametro.
213
+ definisci _messaggio_per(tipo_parametro)
214
+ considera tipo_parametro
215
+ quando :booleano allora "o vero o falso"
216
+ quando :data allora "una data"
217
+ quando :stringa allora "una stringa"
218
+ quando :intero allora "un numero intero"
219
+ quando :decimale allora "un numero decimale"
220
+ quando :lista allora "una lista"
221
+ quando :mappa allora "un oggetto"
222
+ altrimenti nullo fine
223
+ fine
224
+
225
+ fine
226
+ fine
227
+ fine
@@ -0,0 +1,32 @@
1
+ require "hanami/logger"
2
+
3
+ modulo Iris
4
+ modulo Azione
5
+ classe Registratore
6
+
7
+ definisci inizializzatore
8
+ se ENV.esiste? e ENV["APPLICAZIONE"].specificato?
9
+ @nome_applicazione = ENV["APPLICAZIONE"]
10
+ altrimenti
11
+ @nome_applicazione = "app"
12
+ fine
13
+ @registratore = Hanami::Logger.nuovo @nome_applicazione
14
+ fine
15
+
16
+ definisci chiama(stato, env)
17
+ metodo_richiesta = env["REQUEST_METHOD"]
18
+ percorso_richiesta = env["REQUEST_PATH"]
19
+ parametri = env["router.params"]
20
+ messaggio = "#{stato} [#{metodo_richiesta}] #{percorso_richiesta} => #{parametri}".congela
21
+
22
+ considera
23
+ quando stato < 400
24
+ @registratore.info messaggio
25
+ quando stato >= 400
26
+ @registratore.error messaggio
27
+ fine
28
+ fine
29
+
30
+ fine
31
+ fine
32
+ fine
@@ -0,0 +1,127 @@
1
+ richiedi_relativo "azione/intestazioni"
2
+ richiedi_relativo "azione/parametri"
3
+ richiedi_relativo "azione/registratore"
4
+
5
+ ##
6
+ # Questo modulo permette di definire un'azione di un'applicazione.
7
+ # Con azione si intende una specifica procedura da eseguire, di solito
8
+ # associata ad una rotta. Ad esempio, data un'applicazione `Libreria`
9
+ # definita in questo modo:
10
+ #
11
+ # classe Libreria
12
+ # includi Iris::Applicazione
13
+ #
14
+ # definisci inizializzatore
15
+ # @app = Hanami::Router.nuovo esegui
16
+ # get "/", to: Libreria::Azioni::ListaLibri
17
+ # fine
18
+ # fine
19
+ #
20
+ # fine
21
+ #
22
+ # L'azione `ListaLibri` associata potrà essere definita come segue:
23
+ #
24
+ # classe Libreria
25
+ # modulo Azioni
26
+ # classe ListaLibri
27
+ # includi Iris::Azione
28
+ #
29
+ # definisci chiama
30
+ # [ 200, {}, [ "Libri" ] ]
31
+ # fine
32
+ #
33
+ # fine
34
+ # fine
35
+ # fine
36
+ #
37
+ # L'azione `ListaLibri` deve implementare il metodo chiama, che permette
38
+ # di eseguire la procedura desiderata, e fornire la risposta utilizzando
39
+ # le variabili d'istanza `@stato`, `@intestazioni` e `@corpo`.
40
+ modulo Iris
41
+ modulo Azione
42
+
43
+ ##
44
+ # Intestazioni predefinite.
45
+ INTESTAZIONI_PREDEFINITE = Mappa[
46
+ "Access-Control-Allow-Headers" => Intestazioni::CONTROLLO_ACCESSI[:intestazioni],
47
+ "Access-Control-Allow-Methods" => Intestazioni::CONTROLLO_ACCESSI[:metodi],
48
+ "Access-Control-Allow-Origin" => Intestazioni::CONTROLLO_ACCESSI[:origini],
49
+ "Connection" => Intestazioni::CONNESSIONE,
50
+ "Content-Security-Policy" => Intestazioni::POLITICA_SICUREZZA_SORGENTI,
51
+ "Content-Type" => Intestazioni::TIPO_CONTENUTO,
52
+ "X-Content-Type-Options" => Intestazioni::OPZIONI_TIPO_CONTENUTO,
53
+ "X-Frame-Options" => Intestazioni::OPZIONI_FRAME,
54
+ "X-XSS-Protection" => Intestazioni::PROTEZIONE_CROSS_SITE_SCRIPTING]
55
+
56
+ ##
57
+ # Metodo principale eseguito per risolvere l'azione.
58
+ definisci call(env)
59
+ _imposta_variabili_istanza env
60
+
61
+ cattura :arresta esegui
62
+ prima
63
+ valida_parametri
64
+ chiama
65
+ fine
66
+
67
+ registra @stato, env
68
+ @corpo = @corpo.to_json se @corpo.risponde_a? :to_json
69
+ @intestazioni.deposita "Content-Length", @corpo.bytesize.to_s
70
+
71
+ [ @stato, @intestazioni, [ @corpo ] ]
72
+ fine
73
+ alias :avvia :call
74
+
75
+ ##
76
+ # Aggiunge un aggancio per eseguire codice prima
77
+ # dell'azione effettiva. Può essere utile per definire
78
+ # controlli sull'utente o altre cose distribuite su azioni
79
+ # multiple.
80
+ definisci prima
81
+ rilascia se blocco_dato?
82
+ fine
83
+
84
+ ##
85
+ # Controlla la validità dei parametri. Questo metodo va implementato
86
+ # con i controlli desiderati.
87
+ definisci valida_parametri
88
+ fine
89
+
90
+ ##
91
+ # Registra la richiesta e la risposta.
92
+ definisci registra(stato, env)
93
+ @registratore.chiama stato, env
94
+ fine
95
+
96
+ privati
97
+
98
+ ##
99
+ # Imposta le variabili d'istanza iniziali.
100
+ definisci _imposta_variabili_istanza(env)
101
+ @env = env
102
+ @stato = 200
103
+ @intestazioni = INTESTAZIONI_PREDEFINITE
104
+ @corpo = nullo
105
+ @parametri = Parametri.nuovo @env["router.params"] || Mappa.nuova
106
+ @utente_corrente = @env["utente_corrente"]
107
+ @registratore = Iris::Azione::Registratore.nuovo
108
+ fine
109
+
110
+ ##
111
+ # Metodo di utilità per accedere ai parametri della richiesta.
112
+ definisci parametri
113
+ @parametri
114
+ fine
115
+
116
+ ##
117
+ # Metodo per terminare subito un'azione, fornendo
118
+ # stato e corpo risposta.
119
+ definisci arresta(stato, corpo)
120
+ @stato = stato
121
+ @corpo = corpo
122
+ lancia :arresta
123
+ fine
124
+ alias :stato :arresta
125
+
126
+ fine
127
+ fine
data/lib/iris/load.rb ADDED
@@ -0,0 +1 @@
1
+ richiedi_relativo "../iris"
@@ -0,0 +1,3 @@
1
+ modulo Iris
2
+ VERSIONE = "0.1.2"
3
+ fine
data/lib/iris.ir ADDED
@@ -0,0 +1,4 @@
1
+ richiedi_tutti "iris"
2
+
3
+ modulo Iris
4
+ fine
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iris-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Francesco Ballardin
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-04-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: italian-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hanami-router
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: hanami-utils
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ description: Iris. Ruby.
56
+ email:
57
+ - francesco.ballardin@develonproject.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".ruby-version"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - README.md
68
+ - Rakefile
69
+ - bin/console
70
+ - bin/setup
71
+ - iris.gemspec
72
+ - lib/iris.ir
73
+ - lib/iris/applicazione.ir
74
+ - lib/iris/azione.ir
75
+ - lib/iris/azione/intestazioni.ir
76
+ - lib/iris/azione/parametri.ir
77
+ - lib/iris/azione/registratore.ir
78
+ - lib/iris/load.rb
79
+ - lib/iris/versione.ir
80
+ homepage: https://github.com/Pluvie/ruby-iris
81
+ licenses: []
82
+ metadata:
83
+ allowed_push_host: https://rubygems.org
84
+ homepage_uri: https://github.com/Pluvie/ruby-iris
85
+ source_code_uri: https://github.com/Pluvie/ruby-iris
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 2.3.0
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubygems_version: 3.1.2
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Iris.
105
+ test_files: []