mangusta 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/lib/mangusta/documento/metodi_di_classe.ir +15 -0
- data/lib/mangusta/documento/relazione.ir +47 -11
- data/lib/mangusta/documento.ir +40 -14
- data/lib/mangusta/ripostiglio/risultato_ricerca.ir +21 -2
- data/lib/mangusta/ripostiglio.ir +9 -0
- data/lib/mangusta/utilit/303/240/convertitori.ir +18 -7
- data/lib/mangusta/versione.ir +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 389949238c8259b0673f09e72b0c5bd46681d7e7ef2f6336d5713db03e15bcda
|
4
|
+
data.tar.gz: 52739e88619c9a0b0036857421d4e6648c3fd18b107eabb5cf36261b310c6006
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbe833890db5b169fe0a98739b8a72332beee5e11c9ce7c6565bc2def76267b377d2e74922280c9cbf3f804606f37d547c459ba5c460a221f2475deb07351b9c
|
7
|
+
data.tar.gz: 28f8d3da01384ea4cedba6f8df6b17703bcffaa5a24cfd7b95433ba3f800db2406b423c14b9725487864b19d0a3eb5d5a139ad12a02dcae8ee83fbc89b0f50ce
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mangusta (0.2.
|
4
|
+
mangusta (0.2.2)
|
5
5
|
italian-ruby (~> 0.1)
|
6
6
|
mongo (~> 2.11)
|
7
7
|
|
@@ -10,7 +10,7 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
bson (4.8.2)
|
12
12
|
diff-lcs (1.3)
|
13
|
-
italian-ruby (0.2.
|
13
|
+
italian-ruby (0.2.6)
|
14
14
|
ruby2ruby (~> 2.4)
|
15
15
|
mongo (2.11.4)
|
16
16
|
bson (>= 4.4.2, < 5.0.0)
|
@@ -86,8 +86,23 @@ modulo Mangusta
|
|
86
86
|
fine
|
87
87
|
|
88
88
|
definisci_metodo nome esegui
|
89
|
+
valore_relazione = ottieni_valore relazione.nome
|
90
|
+
ritorna valore_relazione se valore_relazione.esiste?
|
89
91
|
relazione.risolvi se_stesso
|
90
92
|
fine
|
93
|
+
|
94
|
+
definisci_metodo "#{nome}=" esegui |valore|
|
95
|
+
imposta_valore relazione.nome, valore
|
96
|
+
considera relazione.tipologia
|
97
|
+
quando :appartiene_a
|
98
|
+
ritorna a_meno_che valore.risponde_a? :_id
|
99
|
+
imposta_valore relazione.nome_campo, valore._id
|
100
|
+
quando :ha_e_appartiene_a_molti
|
101
|
+
ritorna a_meno_che valore.è_una? Lista
|
102
|
+
ritorna a_meno_che valore.tutti? { |singolo_valore| singolo_valore.risponde_a? :_id }
|
103
|
+
imposta_valore relazione.nome_campo, valore.mappa(&:_id)
|
104
|
+
fine
|
105
|
+
fine
|
91
106
|
fine
|
92
107
|
|
93
108
|
##
|
@@ -7,6 +7,7 @@ modulo Mangusta
|
|
7
7
|
accessore :nome_campo
|
8
8
|
accessore :nome_campo_relazionato
|
9
9
|
accessore :nome_ripostiglio
|
10
|
+
accessore :lista_documenti
|
10
11
|
|
11
12
|
definisci inizializzatore(tipologia, nome, **parametri)
|
12
13
|
se_stessa.nome = nome
|
@@ -15,11 +16,11 @@ modulo Mangusta
|
|
15
16
|
se_stessa.nome_campo = parametri.ottieni(:nome_campo, nullo)
|
16
17
|
se_stessa.nome_campo_relazionato = parametri.ottieni(:nome_campo_relazionato, nullo)
|
17
18
|
|
18
|
-
alza "È necessario specificare una chiave :ripostiglio per la relazione" se
|
19
|
+
alza NonValida, "È necessario specificare una chiave :ripostiglio per la relazione" se
|
19
20
|
nome_ripostiglio.nullo?
|
20
|
-
alza "È necessario specificare una chiave :nome_campo per la relazione" se
|
21
|
+
alza NonValida, "È necessario specificare una chiave :nome_campo per la relazione" se
|
21
22
|
nome_campo.nullo? e tipologia.in? [ :appartiene_a, :ha_e_appartiene_a_molti ]
|
22
|
-
alza "È necessario specificare una chiave :nome_campo_relazionato per la relazione" se
|
23
|
+
alza NonValida, "È necessario specificare una chiave :nome_campo_relazionato per la relazione" se
|
23
24
|
nome_campo_relazionato.nullo? e tipologia.in? [ :ha_molti, :ha_e_appartiene_a_molti ]
|
24
25
|
fine
|
25
26
|
|
@@ -31,7 +32,7 @@ modulo Mangusta
|
|
31
32
|
quando :appartiene_a allora _risolvi_appartiene_a(documento)
|
32
33
|
quando :ha_e_appartiene_a_molti allora _risolvi_ha_e_appartiene_a_molti(documento)
|
33
34
|
altrimenti
|
34
|
-
alza "La relazione `#{tipologia}` non è supportata"
|
35
|
+
alza NonValida, "La relazione `#{tipologia}` non è supportata"
|
35
36
|
fine
|
36
37
|
fine
|
37
38
|
|
@@ -43,10 +44,16 @@ modulo Mangusta
|
|
43
44
|
quando :appartiene_a allora ritorna
|
44
45
|
quando :ha_e_appartiene_a_molti allora _propaga_ha_e_appartiene_a_molti(documento, valore)
|
45
46
|
altrimenti
|
46
|
-
alza "La relazione `#{tipologia}` non è supportata"
|
47
|
+
alza NonValida, "La relazione `#{tipologia}` non è supportata"
|
47
48
|
fine
|
48
49
|
fine
|
49
50
|
|
51
|
+
##
|
52
|
+
# Carica tutti i documenti in memoria.
|
53
|
+
definisci carica_documenti
|
54
|
+
@documenti_in_memoria = _ripostiglio.prendi_tutti.lista
|
55
|
+
fine
|
56
|
+
|
50
57
|
privati
|
51
58
|
|
52
59
|
##
|
@@ -58,7 +65,13 @@ modulo Mangusta
|
|
58
65
|
##
|
59
66
|
# Risolve la relazione di `ha molti`.
|
60
67
|
definisci _risolvi_ha_molti(documento)
|
61
|
-
|
68
|
+
se @documenti_in_memoria.esiste?
|
69
|
+
@documenti_in_memoria.seleziona esegui |documento_relazionato|
|
70
|
+
documento_relazionato.nome_campo_relazionato == documento._id
|
71
|
+
fine
|
72
|
+
altrimenti
|
73
|
+
_ripostiglio.cerca(nome_campo_relazionato => documento._id).lista
|
74
|
+
fine
|
62
75
|
fine
|
63
76
|
|
64
77
|
##
|
@@ -66,21 +79,38 @@ modulo Mangusta
|
|
66
79
|
definisci _risolvi_appartiene_a(documento)
|
67
80
|
id_documento_relazionato = documento.manda nome_campo
|
68
81
|
ritorna nullo se id_documento_relazionato.nullo?
|
69
|
-
|
82
|
+
|
83
|
+
se @documenti_in_memoria.esiste?
|
84
|
+
@documenti_in_memoria.trova esegui |documento_relazionato|
|
85
|
+
documento_relazionato._id == id_documento_relazionato
|
86
|
+
fine
|
87
|
+
altrimenti
|
88
|
+
_ripostiglio.cerca_per_id id_documento_relazionato
|
89
|
+
fine
|
70
90
|
fine
|
71
91
|
|
72
92
|
##
|
73
93
|
# Risolve la relazione di `ha e appartiene a molti`.
|
74
94
|
definisci _risolvi_ha_e_appartiene_a_molti(documento)
|
75
|
-
|
95
|
+
id_documenti_relazionati = documento.manda(nome_campo) || []
|
96
|
+
|
97
|
+
se @lista_documento.esiste?
|
98
|
+
ritorna [] se id_documenti_relazionati.vuoto?
|
99
|
+
@documenti_in_memoria.seleziona esegui |documento_relazionato|
|
100
|
+
documento_relazionato._id.in? id_documenti_relazionati
|
101
|
+
fine
|
102
|
+
altrimenti
|
103
|
+
_ripostiglio.cerca(_id: Mappa["$in": id_documenti_relazionati]).lista
|
104
|
+
fine
|
76
105
|
fine
|
77
106
|
|
78
107
|
##
|
79
108
|
# Aggiorna la relazione `ha e appartiene a molti`.
|
80
109
|
definisci _propaga_ha_e_appartiene_a_molti(documento, documenti_relazionati)
|
81
|
-
se
|
82
|
-
|
83
|
-
|
110
|
+
se documenti_relazionati.non_è_una? Lista o
|
111
|
+
documenti_relazionati.alcuni? { |documento_relazionato| documento_relazionato.non_è_un? BSON::ObjectId }
|
112
|
+
alza ErrorePropagazione, "Per propagare la relazione `ha_e_appartiene_a_molti` "\
|
113
|
+
"è necessario passare una Lista di elementi di classe BSON::ObjectId"
|
84
114
|
fine
|
85
115
|
|
86
116
|
collezione_relazionata = Mangusta.connessione[_ripostiglio._nome_collezione]
|
@@ -95,6 +125,12 @@ modulo Mangusta
|
|
95
125
|
fine
|
96
126
|
fine
|
97
127
|
|
128
|
+
##
|
129
|
+
# Errori per relazioni.
|
130
|
+
classe NonValida < Errore; fine
|
131
|
+
classe NonInclusa < Errore; fine
|
132
|
+
classe ErrorePropagazione < Errore; fine
|
133
|
+
|
98
134
|
fine
|
99
135
|
fine
|
100
136
|
fine
|
data/lib/mangusta/documento.ir
CHANGED
@@ -74,12 +74,12 @@ modulo Mangusta
|
|
74
74
|
##
|
75
75
|
# Ottiene la rappresentazione per stampa dell'oggetto.
|
76
76
|
definisci inspect
|
77
|
-
"#<#{se_stesso.classe} #{
|
77
|
+
"#<#{se_stesso.classe} #{se_stesso.esponi}>"
|
78
78
|
fine
|
79
79
|
definisci ai(opzioni = Mappa.nuova)
|
80
80
|
se definito? AwesomePrint
|
81
|
-
ap = AwesomePrint::Inspector.nuovo opzioni
|
82
|
-
ap.awesome
|
81
|
+
ap = AwesomePrint::Inspector.nuovo opzioni.fondi(indent: 2, ruby19_syntax: si)
|
82
|
+
"#<#{se_stesso.classe} #{ap.awesome se_stesso.esponi}>"
|
83
83
|
altrimenti
|
84
84
|
inspect
|
85
85
|
fine
|
@@ -87,20 +87,46 @@ modulo Mangusta
|
|
87
87
|
|
88
88
|
##
|
89
89
|
# Ottiene la rappresentazione in Mappa dei campi del documento.
|
90
|
-
definisci esponi(*
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
90
|
+
definisci esponi(*chiavi_richieste, **relazioni_richieste)
|
91
|
+
campi_richiesti = chiavi_richieste
|
92
|
+
.seleziona { |chiave| chiave.in? campi.mappa(&:nome) }
|
93
|
+
relazioni_dirette = chiavi_richieste
|
94
|
+
.seleziona { |chiave| chiave.in? relazioni.mappa(&:nome) }
|
95
|
+
relazioni_annidate = relazioni_richieste.chiavi
|
96
|
+
relazioni_da_convertire = relazioni_dirette + relazioni_annidate
|
97
|
+
|
98
|
+
risultato_conversione = Mangusta::Utilità.converti_in_json se_stesso, *relazioni_da_convertire
|
99
|
+
ritorna risultato_conversione se campi_richiesti.nessuno?
|
100
|
+
conversione_filtrata = Mappa.nuova
|
101
|
+
|
102
|
+
campi_richiesti.per_ognuno esegui |campo_richiesto|
|
103
|
+
prossimo se campo_richiesto.non_è_un? Simbolo
|
104
|
+
conversione_filtrata.deposita campo_richiesto, risultato_conversione.ottieni(campo_richiesto, nullo)
|
105
|
+
fine
|
106
|
+
|
107
|
+
relazioni_dirette.per_ognuna esegui |relazione_richiesta|
|
108
|
+
alza Relazione::NonInclusa, "per poter esporre la relazione `#{relazione_richiesta}` è necessario prima includerla" se
|
109
|
+
relazione_richiesta.non_è_un? Simbolo o risultato_conversione.non_ha_chiave? relazione_richiesta
|
110
|
+
conversione_filtrata.deposita relazione_richiesta, risultato_conversione.ottieni(relazione_richiesta)
|
96
111
|
fine
|
97
112
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
113
|
+
relazioni_richieste.per_ognuna esegui |nome_relazione, campi_relazione_richiesti|
|
114
|
+
prossima se campi_relazione_richiesti.non_è_una? Lista
|
115
|
+
valore_relazione = risultato_conversione.ottieni nome_relazione, nulla
|
116
|
+
se valore_relazione.è_una? Mappa
|
117
|
+
conversione_filtrata.deposita nome_relazione, valore_relazione
|
118
|
+
.seleziona { |chiave, valore| chiave.in? campi_relazione_richiesti }
|
119
|
+
altrimenti_se valore_relazione.è_una? Lista
|
120
|
+
valori_filtrati = valore_relazione.mappa esegui |singolo_valore_relazione|
|
121
|
+
prossima se singolo_valore_relazione.non_è_una? Mappa
|
122
|
+
singolo_valore_relazione.seleziona { |chiave, valore| chiave.in? campi_relazione_richiesti }
|
123
|
+
fine
|
124
|
+
conversione_filtrata.deposita nome_relazione, valori_filtrati.compatta
|
125
|
+
altrimenti
|
126
|
+
prossima
|
127
|
+
fine
|
102
128
|
fine
|
103
|
-
|
129
|
+
conversione_filtrata
|
104
130
|
fine
|
105
131
|
|
106
132
|
##
|
@@ -10,11 +10,13 @@ modulo Mangusta
|
|
10
10
|
@classe_documento = classe_documento
|
11
11
|
@parametri_ricerca = parametri
|
12
12
|
@ordinamento_ricerca = ordinamento
|
13
|
+
@relazioni_incluse = []
|
13
14
|
fine
|
14
15
|
|
15
16
|
##
|
16
17
|
# Prende il primo elemento trovato.
|
17
18
|
definisci primo
|
19
|
+
_carica_relazioni_incluse
|
18
20
|
documento_in_json = @collezione.cerca(@parametri_ricerca, @ordinamento_ricerca).primo
|
19
21
|
_converti documento_in_json
|
20
22
|
fine
|
@@ -23,13 +25,16 @@ modulo Mangusta
|
|
23
25
|
##
|
24
26
|
# Prende l'ultimo elemento trovato.
|
25
27
|
definisci ultimo
|
26
|
-
|
28
|
+
_carica_relazioni_incluse
|
29
|
+
ordinamento_inverso = @ordinamento_ricerca.fondi _id: -1
|
30
|
+
documento_in_json = @collezione.cerca(@parametri_ricerca, ordinamento_inverso).primo
|
27
31
|
fine
|
28
32
|
alias :ultima :ultimo
|
29
33
|
|
30
34
|
##
|
31
35
|
# Ritorna l'oggetto ricerca come Lista documenti.
|
32
36
|
definisci lista
|
37
|
+
_carica_relazioni_incluse
|
33
38
|
@collezione.cerca(@parametri_ricerca, @ordinamento_ricerca).lista.mappa esegui |documento_in_json|
|
34
39
|
_converti documento_in_json
|
35
40
|
fine
|
@@ -67,7 +72,21 @@ modulo Mangusta
|
|
67
72
|
##
|
68
73
|
# Converte in documento.
|
69
74
|
definisci _converti(mappa)
|
70
|
-
Mangusta::Utilità.converti_in_documento mappa, @classe_documento
|
75
|
+
documento = Mangusta::Utilità.converti_in_documento mappa, @classe_documento
|
76
|
+
|
77
|
+
@relazioni_incluse.per_ognuna esegui |relazione_inclusa|
|
78
|
+
documento.manda "#{relazione_inclusa.nome}=", relazione_inclusa.risolvi(documento)
|
79
|
+
fine
|
80
|
+
|
81
|
+
documento
|
82
|
+
fine
|
83
|
+
|
84
|
+
##
|
85
|
+
# Carica relazioni incluse in memoria, se presenti.
|
86
|
+
definisci _carica_relazioni_incluse
|
87
|
+
@relazioni_incluse.per_ognuna esegui |relazione_inclusa|
|
88
|
+
relazione_inclusa.carica_documenti
|
89
|
+
fine
|
71
90
|
fine
|
72
91
|
|
73
92
|
fine
|
data/lib/mangusta/ripostiglio.ir
CHANGED
@@ -71,6 +71,15 @@ modulo Mangusta
|
|
71
71
|
alias :primo_per :primo
|
72
72
|
alias :prima_per :primo
|
73
73
|
|
74
|
+
##
|
75
|
+
# Ritorna l'ultimo documento del ripostiglio.
|
76
|
+
definisci ultimo(parametri = Mappa.nuova, ordinamento = Mappa.nuova)
|
77
|
+
_risultato_ricerca(parametri, ordinamento).primo
|
78
|
+
fine
|
79
|
+
alias :ultima :ultimo
|
80
|
+
alias :ultimo_per :ultimo
|
81
|
+
alias :ultima_per :ultimo
|
82
|
+
|
74
83
|
##
|
75
84
|
# Cerca senza filtri, su tutti i documenti della collezione.
|
76
85
|
definisci prendi_tutti
|
@@ -3,7 +3,7 @@ modulo Mangusta
|
|
3
3
|
|
4
4
|
##
|
5
5
|
# Converte un documento in json.
|
6
|
-
definisci se_stessa.converti_in_json(documento)
|
6
|
+
definisci se_stessa.converti_in_json(documento, *relazioni_richieste)
|
7
7
|
ritorna documento se documento.è_una? Mappa
|
8
8
|
alza "L'oggetto passato non include Mangusta::Documento" a_meno_che
|
9
9
|
documento.classe.moduli_inclusi.include? Mangusta::Documento
|
@@ -13,21 +13,32 @@ modulo Mangusta
|
|
13
13
|
documento.campi.per_ognuno esegui |campo|
|
14
14
|
valore_campo = documento.ottieni_valore campo.nome
|
15
15
|
prossimo se valore_campo.nullo?
|
16
|
+
se campo.nome.in? documento.relazioni.mappa(&:nome_campo)
|
17
|
+
inizia
|
18
|
+
valore_campo = BSON::ObjectId valore_campo se valore_campo.è_una? Stringa
|
19
|
+
valore_campo = valore_campo.mappa { |singolo_valore| BSON::ObjectId singolo_valore } se valore_campo.è_una? Lista
|
20
|
+
recupera BSON::ObjectId::Invalid
|
21
|
+
fine
|
22
|
+
fine
|
16
23
|
documento_convertito.deposita campo.nome, valore_campo
|
17
24
|
fine
|
18
25
|
|
19
|
-
documento.relazioni.per_ognuna esegui |relazione|
|
20
|
-
relazione_convertita = converti_documento_relazionato_in_json documento, relazione
|
21
|
-
prossimo se relazione_convertita.nulla?
|
22
|
-
documento_convertito.deposita relazione.nome, relazione_convertita
|
23
|
-
fine
|
24
|
-
|
25
26
|
documento.documenti_incorporati.per_ognuno esegui |documento_incorporato|
|
26
27
|
documento_incorporato_convertito = converti_documento_incorporato_in_json documento, documento_incorporato
|
27
28
|
prossimo se documento_incorporato_convertito.nullo?
|
28
29
|
documento_convertito.deposita documento_incorporato.nome, documento_incorporato_convertito
|
29
30
|
fine
|
30
31
|
|
32
|
+
se relazioni_richieste.almeno_una?
|
33
|
+
relazioni_richieste.per_ognuna esegui |nome_relazione, campi_richiesti|
|
34
|
+
relazione = documento.relazioni.trova { |relazione| relazione.nome == nome_relazione }
|
35
|
+
prossima se relazione.nulla?
|
36
|
+
relazione_convertita = converti_documento_relazionato_in_json documento, relazione
|
37
|
+
prossimo se relazione_convertita.nulla?
|
38
|
+
documento_convertito.deposita relazione.nome, relazione_convertita
|
39
|
+
fine
|
40
|
+
fine
|
41
|
+
|
31
42
|
documento_convertito
|
32
43
|
fine
|
33
44
|
|
data/lib/mangusta/versione.ir
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mangusta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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-
|
11
|
+
date: 2020-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: italian-ruby
|