mangusta 0.4.4 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 208efb975c8370ebdd3495bb2c450adfdbb06680987ff81122e8e2b4caf7ec58
4
- data.tar.gz: 7fb1f45c20640c3ec4dcee9095357a7b8d088c1ebaa1778fd03b8e94fc36367b
3
+ metadata.gz: c3c5485b118b948ab303c681b101d05d67f862a18a5521a345d89e6e527d4d40
4
+ data.tar.gz: 8c7bdc5c913277ab855e14afddae3b968d7634800a9de18ea9090f77ed4e71a6
5
5
  SHA512:
6
- metadata.gz: 8657b01392f853713c0ece3294a1e40fa61ed9fbbebc78db1f4fb2c0f03c15b149bc06cb1c257bfb6f850ee8deeef363983859d246a04067f1b7dd164abecb02
7
- data.tar.gz: bd74104cb4e2e07f3bc2627a68b860e43413eae0331624bac8d436c9884bef8a43945b78bf3a4782b4f8b2a4a747b71f562a0719837054ac991b7fbd66a1a81b
6
+ metadata.gz: 4c6c17516b69e0130ea1c855976661bb2bc674e58b20b142f7553444af1e320be8a95a8bf7b88a18b4ab10269bca49ecbfc315a0c98335ce47e39696afc327f3
7
+ data.tar.gz: 43aa2bbaacddfa1ee69bda7373af48eb5805780e6c1d5ecc2ca788134de9040f025e64f52af0dd42ad12c2d600bc6ab709ff60b7131505f87dcd859c2563b10b
data/Gemfile CHANGED
@@ -3,5 +3,5 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in mangusta.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
6
+ gem "rake", "~> 13.0"
7
7
  gem "rspec", "~> 3.0"
@@ -1,46 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mangusta (0.3.2)
4
+ mangusta (0.4.6)
5
5
  italian-ruby (~> 0.1)
6
6
  mongo (~> 2.11)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- bson (4.8.2)
11
+ bson (4.9.1)
12
12
  diff-lcs (1.3)
13
- italian-ruby (0.2.7)
14
- ruby2ruby (~> 2.4)
15
- mongo (2.12.0)
13
+ italian-ruby (0.8.0)
14
+ mongo (2.12.1)
16
15
  bson (>= 4.8.2, < 5.0.0)
17
- rake (12.3.3)
16
+ rake (13.0.1)
18
17
  rspec (3.9.0)
19
18
  rspec-core (~> 3.9.0)
20
19
  rspec-expectations (~> 3.9.0)
21
20
  rspec-mocks (~> 3.9.0)
22
- rspec-core (3.9.1)
23
- rspec-support (~> 3.9.1)
24
- rspec-expectations (3.9.1)
21
+ rspec-core (3.9.2)
22
+ rspec-support (~> 3.9.3)
23
+ rspec-expectations (3.9.2)
25
24
  diff-lcs (>= 1.2.0, < 2.0)
26
25
  rspec-support (~> 3.9.0)
27
26
  rspec-mocks (3.9.1)
28
27
  diff-lcs (>= 1.2.0, < 2.0)
29
28
  rspec-support (~> 3.9.0)
30
- rspec-support (3.9.2)
31
- ruby2ruby (2.4.4)
32
- ruby_parser (~> 3.1)
33
- sexp_processor (~> 4.6)
34
- ruby_parser (3.14.2)
35
- sexp_processor (~> 4.9)
36
- sexp_processor (4.14.1)
29
+ rspec-support (3.9.3)
37
30
 
38
31
  PLATFORMS
39
32
  ruby
40
33
 
41
34
  DEPENDENCIES
42
35
  mangusta!
43
- rake (~> 12.0)
36
+ rake (~> 13.0)
44
37
  rspec (~> 3.0)
45
38
 
46
39
  BUNDLED WITH
@@ -20,8 +20,8 @@ modulo Mangusta
20
20
  ritorna connessione se connessione.esiste?
21
21
 
22
22
  se_stessa.connessione = Mongo::Client.nuovo(
23
- [ parametri.ottieni(:indirizzo) ],
24
- database: parametri.ottieni(:base_dati))
23
+ [ parametri.prendi(:indirizzo) ],
24
+ database: parametri.prendi(:base_dati))
25
25
 
26
26
  se_stessa.base_dati = connessione.database
27
27
  se_stessa.collezioni = base_dati.collections
@@ -12,6 +12,7 @@ module Mongo
12
12
  class View
13
13
  alias :primo :first
14
14
  alias :lista :entries
15
+ alias :conteggio :count
15
16
  end
16
17
  end
17
18
  end
@@ -13,7 +13,13 @@ modulo Mangusta
13
13
  # includi Mangusta::Documento
14
14
  #
15
15
  # campo :titolo, valore_iniziale: "Il Signore degli Anelli"
16
- # appartiene_a :autore, classe: "Autore"
16
+ #
17
+ # appartiene_a :autore,
18
+ # ripostiglio: "RipostiglioAutori",
19
+ # nome_campo: :id_autore
20
+ #
21
+ # incorpora_molte :ristampe,
22
+ # nome_classe: "Libro::Ristampa"
17
23
  # fine
18
24
  #
19
25
  # Il metodo di classe `campo` ha come primo argomento obbligatorio il nome del campo,
@@ -23,24 +29,56 @@ modulo Mangusta
23
29
  #
24
30
  # I metodi di classe `appartiene_a`, `ha_molte`, `ha_e_appartiene_a_molte` (gli ultimi
25
31
  # due hanno alias `ha_molti` e `ha_e_appartiene_a_molti`) definiscono delle relazioni.
32
+ #
33
+ # I metodi di classe `incorpora_un` (alias `incorpora_una`) e `incorpora_molti` (alias
34
+ # `incorpora_molte`) definiscono dei documenti incorporati. Un esempio di documento
35
+ # incorporato è questo:
36
+ #
37
+ # classe Libro
38
+ # classe Ristampa
39
+ # includi Mangusta::Documento
40
+ #
41
+ # campo :anno
42
+ #
43
+ # incorporato_in :libro,
44
+ # nome_classe: "Libro"
45
+ # fine
46
+ # fine
26
47
  modulo Documento
27
48
 
28
49
  ##
29
50
  # Inizializzatore di un documento.
30
51
  # Si preoccupa di impostare campi ed eventuali valori iniziali.
31
52
  definisci inizializzatore(**attributi)
32
- ritorna se se_stesso.classe.campi.nullo? o se_stesso.classe.campi.vuoto?
53
+ ritorna se campi.nessuno?
54
+ _assegna_valori_iniziali
55
+ assegna **attributi
56
+ assegna _id: IdOggetto.nuovo se _id.nullo?
57
+ fine
33
58
 
34
- se_stesso.classe.campi.per_ognuno esegui |campo|
35
- _inizializza_campo campo
59
+ ##
60
+ # Assegna dei valori al documento.
61
+ definisci assegna(**attributi)
62
+ attributi.per_ognuno esegui |nome_attributo, valore_attributo|
63
+ metodo_assegnazione = "#{nome_attributo}="
64
+ prossimo se se_stesso.non_risponde_a? metodo_assegnazione
65
+ se_stesso.manda metodo_assegnazione, valore_attributo
36
66
  fine
37
67
 
38
- assegna **attributi
39
- _genera_nuovo_id se ottieni_valore(:_id).nullo?
40
- _genera_documento_padre **attributi se attributi.ha_chiave? :_padre
41
- _memorizza_attributi_originali **attributi
68
+ se_stesso
42
69
  fine
43
70
 
71
+ ##
72
+ # Espone il documento come JSON.
73
+ definisci _esponi(*chiavi_richieste, **relazioni_richieste)
74
+ espositore = Mangusta::Documento::Espositore.nuovo se_stesso, *chiavi_richieste, **relazioni_richieste
75
+ espositore.esponi
76
+ fine
77
+ definisci esponi(*chiavi_richieste, **relazioni_richieste)
78
+ _esponi *chiavi_richieste, **relazioni_richieste
79
+ fine
80
+ alias :in_mappa :esponi
81
+
44
82
  ##
45
83
  # Recupera i campi definiti.
46
84
  definisci campi
@@ -55,141 +93,29 @@ modulo Mangusta
55
93
 
56
94
  ##
57
95
  # Recupera i documenti incorporati.
58
- definisci documenti_incorporati
59
- se_stesso.classe.documenti_incorporati || []
60
- fine
61
-
62
- ##
63
- # Recupera il valore di un campo del documento.
64
- definisci ottieni_valore(nome_campo)
65
- valore_campo = ottieni_variabile_istanza "@#{nome_campo}"
66
- ritorna valore_campo se valore_campo.non_è_una? Mappa
67
- valore_campo.simbolizza
68
- fine
69
-
70
- ##
71
- # Imposta il valore di un campo del documento.
72
- definisci imposta_valore(nome_campo, valore_campo)
73
- imposta_variabile_istanza "@#{nome_campo}", valore_campo
74
- fine
75
-
76
- ##
77
- # Ottiene la rappresentazione per stampa dell'oggetto.
78
- definisci inspect
79
- "#<#{se_stesso.classe} #{se_stesso.esponi}>"
80
- fine
81
- definisci ai(opzioni = Mappa.nuova)
82
- se definito? AwesomePrint
83
- ap = AwesomePrint::Inspector.nuovo opzioni.fondi(indent: 2, ruby19_syntax: si)
84
- "#<#{se_stesso.classe} #{ap.awesome se_stesso.esponi}>"
85
- altrimenti
86
- inspect
87
- fine
88
- fine
89
-
90
- ##
91
- # Uguaglianza di documenti.
92
- definisci ==(documento)
93
- _id == documento._id
94
- fine
95
- definisci ===(documento)
96
- se_stesso == documento
97
- fine
98
- definisci eql?(documento)
99
- se_stesso == documento
100
- fine
101
-
102
- ##
103
- # Ottiene la rappresentazione in Mappa dei campi del documento.
104
- definisci esponi(*chiavi_richieste, **relazioni_richieste)
105
- Espositore.nuovo(se_stesso, *chiavi_richieste, **relazioni_richieste).esponi
96
+ definisci incorporati
97
+ se_stesso.classe.incorporati || []
106
98
  fine
107
99
 
108
100
  ##
109
- # Assegna i parametri passati al documento. Considera anche gli alias.
110
- definisci assegna(**parametri)
111
- parametri.per_ognuno esegui |nome_parametro, valore_parametro|
112
- nome_metodo_assegnamento = "#{nome_parametro}="
113
- prossimo se se_stesso.non_risponde_a? nome_metodo_assegnamento
114
- se_stesso.manda nome_metodo_assegnamento, _converti_in_id(valore_parametro)
101
+ # Codice da eseguire quando questo modulo verrà incluso.
102
+ definisci se_stesso.quando_incluso(classe_documento)
103
+ classe_documento.apri_classe esegui
104
+ includi Mangusta::Documento::MetodiCondivisi
105
+ estendi Mangusta::Documento::MetodiDiClasse
106
+ _inizializza_documento
115
107
  fine
116
- se_stesso
117
- fine
118
-
119
- ##
120
- # Accede al valore dell'attributo originale del documento,
121
- # passando oltre gli accessori, per accedere a campi non modellati.
122
- definisci [](attributo)
123
- @_attributi_originali.ottieni attributo
124
- fine
125
-
126
- ##
127
- # Accede al documento padre, se presente.
128
- definisci _padre
129
- @_padre
130
108
  fine
131
109
 
132
110
  privati
133
111
 
134
112
  ##
135
- # Imposta il valore iniziale di un campo.
136
- definisci _inizializza_campo(campo)
137
- se campo.ha_valore_iniziale?
138
- imposta_variabile_istanza "@#{campo.nome}", campo.valore_iniziale
139
- altrimenti
140
- imposta_variabile_istanza "@#{campo.nome}", nullo
113
+ # Assegna i valori iniziali ai campi.
114
+ definisci _assegna_valori_iniziali
115
+ campi.seleziona { |campo| campo.ha_valore_iniziale? }.per_ognuno esegui |campo|
116
+ campo.assegna se_stesso, campo.valore_iniziale
141
117
  fine
142
118
  fine
143
119
 
144
- ##
145
- # Genera un nuovo id.
146
- definisci _genera_nuovo_id
147
- imposta_valore :_id, IdOggetto.nuovo
148
- fine
149
-
150
- ##
151
- # Genera il puntatore al documento padre.
152
- definisci _genera_documento_padre(**attributi)
153
- @_padre = attributi.ottieni :_padre
154
- fine
155
-
156
- ##
157
- # Converte in IdOggetto una stringa.
158
- # Se la conversione fallisce, ritorna la stringa iniziale.
159
- definisci _converti_in_id(stringa)
160
- ritorna stringa se stringa.non_è_una? Stringa
161
- IdOggetto.converti(stringa)
162
- recupera
163
- stringa
164
- fine
165
-
166
- ##
167
- # Memorizza gli attiributi originali del documento.
168
- definisci _memorizza_attributi_originali(**attributi)
169
- @_attributi_originali = attributi
170
- fine
171
-
172
- ##
173
- # Codice da eseguire quando questo modulo verrà incluso.
174
- definisci se_stesso.quando_incluso(classe_documento)
175
-
176
- classe_documento.apri_classe esegui
177
- estendi Mangusta::Documento::MetodiDiClasse
178
-
179
- classe << se_stesso
180
- accessore :campi
181
- accessore :relazioni
182
- accessore :documenti_incorporati
183
- fine
184
-
185
- se_stesso.campi = []
186
- se_stesso.relazioni = []
187
- se_stesso.documenti_incorporati = []
188
-
189
- _memorizza_campo :_id
190
- fine
191
-
192
- fine
193
-
194
120
  fine
195
121
  fine
@@ -6,12 +6,16 @@ modulo Mangusta
6
6
 
7
7
  accessore :nome
8
8
  accessore :valore_iniziale
9
+ accessore :per_relazione
10
+ accessore :per_incorporato
9
11
 
10
12
  ##
11
13
  # Imposta nome e valore iniziale.
12
- definisci inizializzatore(nome, **parametri)
13
- se_stesso.nome = nome
14
- se_stesso.valore_iniziale = parametri.ottieni(:valore_iniziale, nullo)
14
+ definisci inizializzatore(nome, **opzioni)
15
+ se_stesso.nome = nome
16
+ se_stesso.valore_iniziale = opzioni.prendi :valore_iniziale, nullo
17
+ se_stesso.per_relazione = opzioni.prendi :per_relazione, no
18
+ se_stesso.per_incorporato = opzioni.prendi :per_incorporato, no
15
19
  fine
16
20
 
17
21
  ##
@@ -20,6 +24,36 @@ modulo Mangusta
20
24
  se_stesso.valore_iniziale.esiste?
21
25
  fine
22
26
 
27
+ ##
28
+ # Determina se il campo è stato creato per una relazione.
29
+ definisci per_relazione?
30
+ se_stesso.per_relazione == si
31
+ fine
32
+
33
+ ##
34
+ # Determina se il campo è stato creato per un documento incorporato.
35
+ definisci per_incorporato?
36
+ se_stesso.per_incorporato == si
37
+ fine
38
+
39
+ ##
40
+ # Ottiene il valore del campo.
41
+ definisci valore(documento)
42
+ valore_campo = documento.ottieni_variabile_istanza "@#{nome}"
43
+
44
+ se valore_campo.risponde_a? :simbolizza
45
+ valore_campo.simbolizza
46
+ altrimenti
47
+ valore_campo
48
+ fine
49
+ fine
50
+
51
+ ##
52
+ # Assegna il valore al campo.
53
+ definisci assegna(documento, valore_da_assegnare)
54
+ documento.imposta_variabile_istanza "@#{nome}", valore_da_assegnare
55
+ fine
56
+
23
57
  fine
24
58
  fine
25
59
  fine
@@ -5,63 +5,139 @@ modulo Mangusta
5
5
  classe Espositore
6
6
 
7
7
  ##
8
- # Imposta campi e relazioni richieste.
9
- definisci inizializzatore(documento, *chiavi_richieste, **relazioni_richieste)
10
- @documento = documento
11
- @campi_richiesti = chiavi_richieste.seleziona { |chiave| chiave.in? documento.campi.mappa(&:nome) }
12
- @relazioni_dirette = chiavi_richieste.seleziona { |chiave| chiave.in? documento.relazioni.mappa(&:nome) }
13
- @relazioni_annidate = relazioni_richieste.chiavi
14
- @relazioni_richieste = relazioni_richieste
8
+ # Inizializza l'espositore.
9
+ definisci inizializzatore(documento, *interi_richiesti, **filtrati_richiesti)
10
+ @documento = documento
11
+ @filtrati_richiesti = filtrati_richiesti
12
+
13
+ alza "campi, relazioni o incorporati da esporre interamente devono essere Simboli" se
14
+ interi_richiesti.almeno_uno? { |intero_richiesto| intero_richiesto.non_è_un? Simbolo }
15
+
16
+ alza "relazioni o incorporati da filtrare deve essere una Mappa con chiave Simbolo e valore Liste di Simboli" se
17
+ filtrati_richiesti.chiavi.almeno_una? { |chiave| chiave.non_è_un? Simbolo } o
18
+ filtrati_richiesti.valori.almeno_uno? { |lista| lista.non_è_una? Lista } o
19
+ filtrati_richiesti.valori.almeno_uno? { |lista| lista.almeno_uno? { |valore| valore.non_è_un? Simbolo } }
20
+
21
+ @campi = documento.campi.seleziona esegui |campo|
22
+ campo.nome.in? interi_richiesti
23
+ fine
24
+ @relazioni_intere = documento.relazioni.seleziona esegui |relazione|
25
+ relazione.nome.in? interi_richiesti
26
+ fine
27
+ @relazioni_filtrate = documento.relazioni.seleziona esegui |relazione|
28
+ relazione.nome.in? filtrati_richiesti.chiavi
29
+ fine
30
+ @incorporati_interi = documento.incorporati.seleziona esegui |incorporato|
31
+ incorporato.nome.in? interi_richiesti
32
+ fine
33
+ @incorporati_filtrati = documento.incorporati.seleziona esegui |incorporato|
34
+ incorporato.nome.in? filtrati_richiesti.chiavi
35
+ fine
36
+
37
+ @campi = @documento.campi se @campi.nessuno?
38
+ @incorporati_interi = @documento.incorporati se @incorporati_interi.nessuno? e @incorporati_filtrati.nessuno?
15
39
  fine
16
40
 
17
41
  ##
18
42
  # Espone il documento.
19
43
  definisci esponi
20
- @documento_convertito = Mangusta::Utilità.converti_in_json @documento,
21
- *(@relazioni_dirette + @relazioni_annidate)
44
+ documento_esposto = Mappa.nuova
22
45
 
23
- se @campi_richiesti.nessuno?
24
- @documento_convertito
25
- altrimenti
26
- filtra_esposizione
27
- fine
46
+ _esponi_campi_su documento_esposto
47
+ _esponi_incorporati_interi_su documento_esposto
48
+ _esponi_incorporati_filtrati_su documento_esposto
49
+ _esponi_relazioni_intere_su documento_esposto
50
+ _esponi_relazioni_filtrate_su documento_esposto
51
+
52
+ documento_esposto
28
53
  fine
29
54
 
30
- ##
31
- # Filtra l'esposizione del documento sui campi o relazioni richieste.
32
- definisci filtra_esposizione
33
- esposizione_filtrata = Mappa.nuova
55
+ privati
56
+
57
+ ##
58
+ # Espone i campi sul documento esposto.
59
+ definisci _esponi_campi_su(documento_esposto)
60
+ @campi.per_ognuno esegui |campo|
61
+ valore_campo = @documento.manda campo.nome
62
+ prossimo se valore_campo.nullo? o campo.nome == :_padre
63
+
64
+ se valore_campo.è_una? Mappa
65
+ valore_campo = valore_campo.simbolizza
66
+ altrimenti_se valore_campo.è_una? Lista
67
+ valore_campo = valore_campo.mappa(&:simbolizza) recupera valore_campo
68
+ fine
34
69
 
35
- @campi_richiesti.per_ognuno esegui |campo_richiesto|
36
- prossimo se campo_richiesto.non_è_un? Simbolo
37
- esposizione_filtrata.deposita campo_richiesto, @documento_convertito.ottieni(campo_richiesto, nullo)
70
+ documento_esposto.deposita campo.nome, valore_campo
71
+ fine
38
72
  fine
39
73
 
40
- @relazioni_dirette.per_ognuna esegui |relazione_richiesta|
41
- alza Relazione::NonInclusa, "per poter esporre la relazione `#{relazione_richiesta}` è necessario prima includerla" se
42
- relazione_richiesta.non_è_un? Simbolo o @documento_convertito.non_ha_chiave? relazione_richiesta
43
- esposizione_filtrata.deposita relazione_richiesta, @documento_convertito.ottieni(relazione_richiesta)
74
+ ##
75
+ # Espone gli incorporati interi.
76
+ definisci _esponi_incorporati_interi_su(documento_esposto)
77
+ @incorporati_interi.per_ognuno esegui |incorporato|
78
+ valore_incorporato = @documento.manda incorporato.nome
79
+ considera incorporato.tipologia
80
+ quando :singolo
81
+ documento_esposto.deposita incorporato.nome, valore_incorporato.esponi
82
+ quando :multiplo
83
+ documento_esposto.deposita incorporato.nome, valore_incorporato.mappa(&:esponi)
84
+ fine
85
+ fine
44
86
  fine
45
87
 
46
- @relazioni_richieste.per_ognuna esegui |nome_relazione, campi_relazione_richiesti|
47
- prossima se campi_relazione_richiesti.non_è_una? Lista
48
- valore_relazione = @documento_convertito.ottieni nome_relazione, nulla
49
- se valore_relazione.è_una? Mappa
50
- esposizione_filtrata.deposita nome_relazione, valore_relazione
51
- .seleziona { |chiave, valore| chiave.in? campi_relazione_richiesti }
52
- altrimenti_se valore_relazione.è_una? Lista
53
- valori_filtrati = valore_relazione.mappa esegui |singolo_valore_relazione|
54
- prossima se singolo_valore_relazione.non_è_una? Mappa
55
- singolo_valore_relazione.seleziona { |chiave, valore| chiave.in? campi_relazione_richiesti }
88
+ ##
89
+ # Espone gli incorporati filtrati.
90
+ definisci _esponi_incorporati_filtrati_su(documento_esposto)
91
+ @incorporati_filtrati.per_ognuno esegui |incorporato|
92
+ valore_incorporato = @documento.manda incorporato.nome
93
+ campi_incorporato_filtrati = @filtrati_richiesti.prendi incorporato.nome
94
+ considera incorporato.tipologia
95
+ quando :singolo
96
+ documento_esposto.deposita incorporato.nome, valore_incorporato.esponi(*campi_incorporato_filtrati)
97
+ quando :multiplo
98
+ documento_esposto.deposita incorporato.nome, valore_incorporato
99
+ .mappa { |documento_incorporato| documento_incorporato.esponi *campi_incorporato_filtrati }
56
100
  fine
57
- esposizione_filtrata.deposita nome_relazione, valori_filtrati.compatta
58
- altrimenti
59
- prossima
60
101
  fine
61
102
  fine
62
103
 
63
- esposizione_filtrata
64
- fine
104
+ ##
105
+ # Espone le relazioni intere.
106
+ definisci _esponi_relazioni_intere_su(documento_esposto)
107
+ @relazioni_intere.per_ognuna esegui |relazione|
108
+ alza Relazione::NonInclusa, "la relazione #{relazione.nome} deve essere inclusa per "\
109
+ "poter essere esposta" se relazione.documenti_in_memoria.nullo?
110
+
111
+ valore_relazione = @documento.manda relazione.nome
112
+ considera relazione.tipologia
113
+ quando :appartiene_a
114
+ documento_esposto.deposita relazione.nome, valore_relazione.esponi
115
+ quando :ha_molti, :ha_e_appartiene_a_molti
116
+ documento_esposto.deposita relazione.nome, valore_relazione.mappa(&:esponi)
117
+ fine
118
+ fine
119
+ fine
120
+
121
+ ##
122
+ # Espone le relazioni filtrate.
123
+ definisci _esponi_relazioni_filtrate_su(documento_esposto)
124
+ @relazioni_filtrate.per_ognuna esegui |relazione|
125
+ alza Relazione::NonInclusa, "la relazione #{relazione.nome} deve essere inclusa per "\
126
+ "poter essere esposta" se relazione.documenti_in_memoria.nullo?
127
+
128
+ valore_relazione = @documento.manda relazione.nome
129
+ prossima se valore_relazione.nulla?
130
+
131
+ campi_relazione_filtrati = @filtrati_richiesti.prendi relazione.nome
132
+ considera relazione.tipologia
133
+ quando :ha_un, :appartiene_a
134
+ documento_esposto.deposita relazione.nome, valore_relazione.esponi(*campi_relazione_filtrati)
135
+ quando :ha_molti, :ha_e_appartiene_a_molti
136
+ documento_esposto.deposita relazione.nome, valore_relazione
137
+ .mappa { |documento_relazionato| documento_relazionato.esponi *campi_relazione_filtrati }
138
+ fine
139
+ fine
140
+ fine
65
141
 
66
142
  fine
67
143
  fine