mangusta 0.1.3 → 0.1.4
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 +3 -3
- data/lib/mangusta/documento/relazione.ir +64 -12
- data/lib/mangusta/documento.ir +34 -7
- data/lib/mangusta/ripostiglio.ir +28 -6
- data/lib/mangusta/utilit/303/240/convertitori.ir +2 -2
- 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: defaeaa7bbc87855a9dd60cd900a75bbe9096d04e213ec946aedc180178dc1d4
|
4
|
+
data.tar.gz: 8c5368a5e8329580a0e30fce688168d753cab531e2f1d6d7a7716e6d1f11d1a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec38f6a15fc834029dbd17d2b6f8a5aca1e9a1ff93b65a2bfdf0f4c433f4159e067a8b68bbe058d64019ff09bc93a68d0d99f9f114dbb7dffa346651025cc50f
|
7
|
+
data.tar.gz: e1777bbd9c0880f6636a41ff58966181e4cf71ff8017832857f62107f28931611990ad0558a975097b097c3ea352678f5096350432eb3e148eebc099d38172f3
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mangusta (0.1.
|
5
|
-
italian-ruby (~> 0.1
|
4
|
+
mangusta (0.1.3)
|
5
|
+
italian-ruby (~> 0.1)
|
6
6
|
mongo (~> 2.11)
|
7
7
|
|
8
8
|
GEM
|
@@ -10,7 +10,7 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
bson (4.8.2)
|
12
12
|
diff-lcs (1.3)
|
13
|
-
italian-ruby (0.1.
|
13
|
+
italian-ruby (0.1.6)
|
14
14
|
ruby2ruby (~> 2.4)
|
15
15
|
mongo (2.11.4)
|
16
16
|
bson (>= 4.4.2, < 5.0.0)
|
@@ -4,24 +4,44 @@ modulo Mangusta
|
|
4
4
|
|
5
5
|
accessore :nome
|
6
6
|
accessore :tipologia
|
7
|
-
accessore :
|
7
|
+
accessore :nome_campo
|
8
|
+
accessore :nome_campo_relazionato
|
8
9
|
accessore :nome_ripostiglio
|
9
10
|
|
10
11
|
definisci inizializzatore(tipologia, nome, **parametri)
|
11
|
-
|
12
|
-
|
12
|
+
se_stessa.nome = nome
|
13
|
+
se_stessa.tipologia = tipologia
|
14
|
+
se_stessa.nome_ripostiglio = parametri.ottieni(:ripostiglio, nullo)
|
15
|
+
se_stessa.nome_campo = parametri.ottieni(:nome_campo, nullo)
|
16
|
+
se_stessa.nome_campo_relazionato = parametri.ottieni(:nome_campo_relazionato, nullo)
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
alza "È necessario specificare una chiave :ripostiglio per la relazione" se
|
19
|
+
nome_ripostiglio.nullo?
|
20
|
+
alza "È necessario specificare una chiave :nome_campo per la relazione" se
|
21
|
+
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
|
+
nome_campo_relazionato.nullo? e tipologia.in? [ :ha_molti, :ha_e_appartiene_a_molti ]
|
18
24
|
fine
|
19
25
|
|
20
26
|
##
|
21
27
|
# Risolve il documento o i documenti relazionati.
|
22
28
|
definisci risolvi(documento)
|
23
29
|
considera tipologia
|
24
|
-
quando :
|
30
|
+
quando :ha_molti allora _risolvi_ha_molti(documento)
|
31
|
+
quando :appartiene_a allora _risolvi_appartiene_a(documento)
|
32
|
+
quando :ha_e_appartiene_a_molti allora _risolvi_ha_e_appartiene_a_molti(documento)
|
33
|
+
altrimenti
|
34
|
+
alza "La relazione `#{tipologia}` non è supportata"
|
35
|
+
fine
|
36
|
+
fine
|
37
|
+
|
38
|
+
##
|
39
|
+
# Propaga la relazione con il valore passato.
|
40
|
+
definisci propaga(documento, valore)
|
41
|
+
considera tipologia
|
42
|
+
quando :ha_molti allora ritorna
|
43
|
+
quando :appartiene_a allora ritorna
|
44
|
+
quando :ha_e_appartiene_a_molti allora _propaga_ha_e_appartiene_a_molti(documento, valore)
|
25
45
|
altrimenti
|
26
46
|
alza "La relazione `#{tipologia}` non è supportata"
|
27
47
|
fine
|
@@ -30,19 +50,51 @@ modulo Mangusta
|
|
30
50
|
privati
|
31
51
|
|
32
52
|
##
|
33
|
-
# Puntatore al ripostiglio dove risolvere la relazione.
|
53
|
+
# Puntatore al ripostiglio dove risolvere o propagare la relazione.
|
34
54
|
definisci _ripostiglio
|
35
|
-
Oggetto.ottieni_costante
|
55
|
+
Oggetto.ottieni_costante nome_ripostiglio
|
56
|
+
fine
|
57
|
+
|
58
|
+
##
|
59
|
+
# Risolve la relazione di `ha molti`.
|
60
|
+
definisci _risolvi_ha_molti(documento)
|
61
|
+
_ripostiglio.cerca("#{nome_campo}" => documento._id)
|
36
62
|
fine
|
37
63
|
|
38
64
|
##
|
39
|
-
# Risolve la relazione di
|
65
|
+
# Risolve la relazione di `appartiene a`.
|
40
66
|
definisci _risolvi_appartiene_a(documento)
|
41
|
-
id_documento_relazionato = documento.manda
|
67
|
+
id_documento_relazionato = documento.manda nome_campo
|
42
68
|
ritorna nullo se id_documento_relazionato.nullo?
|
43
69
|
_ripostiglio.cerca_per_id id_documento_relazionato
|
44
70
|
fine
|
45
71
|
|
72
|
+
##
|
73
|
+
# Risolve la relazione di `ha e appartiene a molti`.
|
74
|
+
definisci _risolvi_ha_e_appartiene_a_molti(documento)
|
75
|
+
_ripostiglio.cerca _id: Mappa["$in": documento.manda(nome_campo) || []]
|
76
|
+
fine
|
77
|
+
|
78
|
+
##
|
79
|
+
# Aggiorna la relazione `ha e appartiene a molti`.
|
80
|
+
definisci _propaga_ha_e_appartiene_a_molti(documento, documenti_relazionati)
|
81
|
+
se documenti_relazionati.non_è_una? Lista o documenti_relazionati.alcuni? { |doc| doc.non_è_un? BSON::ObjectId }
|
82
|
+
alza "Per propagare la relazione `ha e appartiene a molti` è necessario passare una lista"\
|
83
|
+
"di elementi di tipo BSON::ObjectId"
|
84
|
+
fine
|
85
|
+
|
86
|
+
collezione_relazionata = Mangusta.connessione[_ripostiglio._nome_collezione]
|
87
|
+
ricerca_documenti_relazionati = Mappa[_id: Mappa["$in": documenti_relazionati]]
|
88
|
+
|
89
|
+
se documenti_relazionati.almeno_uno?
|
90
|
+
collezione_relazionata.aggiorna_molti ricerca_documenti_relazionati,
|
91
|
+
"$addToSet" => Mappa[nome_campo_relazionato => documento._id]
|
92
|
+
altrimenti
|
93
|
+
collezione_relazionata.aggiorna_molti Mappa.nuova,
|
94
|
+
"$pullAll" => Mappa[nome_campo_relazionato => [ documento._id ]]
|
95
|
+
fine
|
96
|
+
fine
|
97
|
+
|
46
98
|
fine
|
47
99
|
fine
|
48
100
|
fine
|
data/lib/mangusta/documento.ir
CHANGED
@@ -23,7 +23,6 @@ modulo Mangusta
|
|
23
23
|
#
|
24
24
|
# I metodi di classe `appartiene_a`, `ha_molte`, `ha_e_appartiene_a_molte` (gli ultimi
|
25
25
|
# due hanno alias `ha_molti` e `ha_e_appartiene_a_molti`) definiscono delle relazioni.
|
26
|
-
#
|
27
26
|
modulo Documento
|
28
27
|
|
29
28
|
##
|
@@ -50,6 +49,12 @@ modulo Mangusta
|
|
50
49
|
se_stesso.classe.campi || []
|
51
50
|
fine
|
52
51
|
|
52
|
+
##
|
53
|
+
# Recupera le relazioni definite.
|
54
|
+
definisci relazioni
|
55
|
+
se_stesso.classe.relazioni || []
|
56
|
+
fine
|
57
|
+
|
53
58
|
##
|
54
59
|
# Recupera il valore di un campo del documento.
|
55
60
|
definisci ottieni_valore_campo(nome_campo)
|
@@ -62,6 +67,18 @@ modulo Mangusta
|
|
62
67
|
imposta_variabile_istanza "@#{nome_campo}", valore_campo
|
63
68
|
fine
|
64
69
|
|
70
|
+
##
|
71
|
+
# Ottiene la rappresentazione in Mappa dei campi del documento.
|
72
|
+
definisci in_mappa
|
73
|
+
risultato = Mappa.nuova
|
74
|
+
campi.per_ognuno esegui |campo|
|
75
|
+
valore_campo = ottieni_valore_campo(campo.nome)
|
76
|
+
valore_campo = valore_campo.to_s se campo.nome == :_id
|
77
|
+
risultato.deposita campo.nome, valore_campo
|
78
|
+
fine
|
79
|
+
risultato
|
80
|
+
fine
|
81
|
+
|
65
82
|
##
|
66
83
|
# Accede al valore dell'attributo originale del documento,
|
67
84
|
# passando oltre gli accessori, per accedere a campi non modellati.
|
@@ -109,6 +126,13 @@ modulo Mangusta
|
|
109
126
|
_memorizza_campo nome, **parametri
|
110
127
|
fine
|
111
128
|
|
129
|
+
##
|
130
|
+
# Aggiunge un metodo di classe `ha_molti` per generare relazioni
|
131
|
+
# di possedimento.
|
132
|
+
definisci ha_molti(nome, **parametri)
|
133
|
+
_memorizza_relazione :ha_molti, nome, **parametri
|
134
|
+
fine
|
135
|
+
|
112
136
|
##
|
113
137
|
# Aggiunge un metodo di classe `appartiene_a` per generare relazioni
|
114
138
|
# di appartenenza.
|
@@ -116,6 +140,13 @@ modulo Mangusta
|
|
116
140
|
_memorizza_relazione :appartiene_a, nome, **parametri
|
117
141
|
fine
|
118
142
|
|
143
|
+
##
|
144
|
+
# Aggiunge un metodo di classe `ha_e_appartiene_a_molti` per generare relazioni
|
145
|
+
# di possedimento e appartenenza.
|
146
|
+
definisci ha_e_appartiene_a_molti(nome, **parametri)
|
147
|
+
_memorizza_relazione :ha_e_appartiene_a_molti, nome, **parametri
|
148
|
+
fine
|
149
|
+
|
119
150
|
privati
|
120
151
|
|
121
152
|
##
|
@@ -139,17 +170,13 @@ modulo Mangusta
|
|
139
170
|
se_stesso.relazioni << nuova_relazione
|
140
171
|
|
141
172
|
considera tipologia
|
142
|
-
quando :appartiene_a
|
143
|
-
_memorizza_campo nuova_relazione.
|
173
|
+
quando :appartiene_a, :ha_e_appartiene_a_molti
|
174
|
+
_memorizza_campo nuova_relazione.nome_campo
|
144
175
|
fine
|
145
176
|
|
146
177
|
definisci_metodo nome esegui
|
147
178
|
nuova_relazione.risolvi se_stesso
|
148
179
|
fine
|
149
|
-
|
150
|
-
definisci_metodo "#{nome}=" esegui |valore|
|
151
|
-
nuova_relazione.aggiorna se_stesso
|
152
|
-
fine
|
153
180
|
fine
|
154
181
|
|
155
182
|
fine
|
data/lib/mangusta/ripostiglio.ir
CHANGED
@@ -62,7 +62,7 @@ modulo Mangusta
|
|
62
62
|
|
63
63
|
##
|
64
64
|
# Ritorna il primo documento del ripostiglio.
|
65
|
-
|
65
|
+
definisci primo
|
66
66
|
_risultato_ricerca.primo
|
67
67
|
fine
|
68
68
|
|
@@ -77,7 +77,10 @@ modulo Mangusta
|
|
77
77
|
# Deposita un documento.
|
78
78
|
definisci inserisci(documento)
|
79
79
|
documento_in_json = Mangusta::Utilità.converti_in_json(documento)
|
80
|
+
documento_in_json.deposita :_id, BSON::ObjectId.new se documento_in_json.non_ha_chiave? :_id
|
80
81
|
_collezione.inserisci_uno documento_in_json
|
82
|
+
documento = Mangusta::Utilità.converti_in_documento documento, _classe_documento
|
83
|
+
_propaga_relazioni documento, documento_in_json
|
81
84
|
documento
|
82
85
|
fine
|
83
86
|
|
@@ -106,6 +109,8 @@ modulo Mangusta
|
|
106
109
|
##
|
107
110
|
# Aggiorna molti documenti.
|
108
111
|
definisci aggiorna_molti(ricerca = Mappa.nuova, **valori_da_aggiornare)
|
112
|
+
stampa "AGG MOLTI ---> RICERCA", ricerca
|
113
|
+
stampa "VALORI", valori_da_aggiornare, "^^^^^^^^^^^^"
|
109
114
|
alza "Il primo argomento deve essere una Mappa o una Lista di documenti" a_meno_che
|
110
115
|
ricerca.classe == Mappa o ricerca.risponde_a? :tutti?
|
111
116
|
|
@@ -126,9 +131,17 @@ modulo Mangusta
|
|
126
131
|
fine
|
127
132
|
alias :aggiorna_molte :aggiorna_molti
|
128
133
|
|
134
|
+
##
|
135
|
+
# Aggiorna tutti i documenti.
|
136
|
+
definisci aggiorna_tutti(**valori_da_aggiornare)
|
137
|
+
risultato_aggiornamento = _collezione.aggiorna_molti Mappa.nuova, Mappa["$set": valori_da_aggiornare]
|
138
|
+
risultato_aggiornamento.modified_count
|
139
|
+
fine
|
140
|
+
alias :aggiorna_tutte :aggiorna_tutti
|
141
|
+
|
129
142
|
##
|
130
143
|
# Cancella un documento.
|
131
|
-
|
144
|
+
definisci cancella(documento)
|
132
145
|
alza "Il primo argomento deve essere una stringa o un documento" a_meno_che
|
133
146
|
documento.classe == Stringa o documento.risponde_a? :_id
|
134
147
|
|
@@ -140,7 +153,7 @@ modulo Mangusta
|
|
140
153
|
|
141
154
|
##
|
142
155
|
# Cancella molti documenti.
|
143
|
-
|
156
|
+
definisci cancella_molti(documenti)
|
144
157
|
risultato_cancellazione = _collezione.cancella_uno Mappa[_id: id_documento]
|
145
158
|
risultato_cancellazione.deleted_count
|
146
159
|
fine
|
@@ -159,14 +172,23 @@ modulo Mangusta
|
|
159
172
|
# Connette alla collezione.
|
160
173
|
definisci _collezione
|
161
174
|
alza "Mangusta non è ancora stato connesso ad una base dati" se Mangusta.connessione.nulla?
|
162
|
-
Mangusta.connessione[
|
175
|
+
Mangusta.connessione[_nome_collezione]
|
163
176
|
fine
|
164
177
|
|
165
178
|
##
|
166
179
|
# Ritorna un risultato ricerca.
|
167
180
|
definisci _risultato_ricerca(**parametri)
|
168
|
-
Mangusta::Ripostiglio::RisultatoRicerca.nuovo(
|
169
|
-
|
181
|
+
Mangusta::Ripostiglio::RisultatoRicerca.nuovo(_collezione, _classe_documento, **parametri)
|
182
|
+
fine
|
183
|
+
|
184
|
+
##
|
185
|
+
# Propaga tutte le relazioni del documento.
|
186
|
+
definisci _propaga_relazioni(documento, documento_in_json)
|
187
|
+
Oggetto.ottieni_costante(_classe_documento).relazioni.per_ognuna esegui |relazione|
|
188
|
+
se documento_in_json.ha_chiave? relazione.nome_campo
|
189
|
+
relazione.propaga documento, documento_in_json.ottieni(relazione.nome_campo)
|
190
|
+
fine
|
191
|
+
fine
|
170
192
|
fine
|
171
193
|
|
172
194
|
fine
|
@@ -2,7 +2,7 @@ modulo Mangusta
|
|
2
2
|
modulo Utilità
|
3
3
|
|
4
4
|
definisci se_stessa.converti_in_json(documento)
|
5
|
-
ritorna documento se documento
|
5
|
+
ritorna documento se documento.è_una? Mappa
|
6
6
|
alza "L'oggetto passato non include Mangusta::Documento" a_meno_che documento.risponde_a? :campi
|
7
7
|
|
8
8
|
documento_convertito = Mappa.nuova
|
@@ -15,7 +15,7 @@ modulo Mangusta
|
|
15
15
|
fine
|
16
16
|
|
17
17
|
definisci se_stessa.converti_in_documento(documento_in_json, classe_documento)
|
18
|
-
ritorna
|
18
|
+
ritorna documento_in_json se documento_in_json.non_è_una? Mappa
|
19
19
|
classe_documento ||= "Oggetto"
|
20
20
|
|
21
21
|
Oggetto.ottieni_costante(classe_documento).nuovo **documento_in_json
|
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.1.
|
4
|
+
version: 0.1.4
|
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-
|
11
|
+
date: 2020-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: italian-ruby
|