iris-rb 0.1.2

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