mangusta 0.2.2 → 0.3.0
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 +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
|