mangusta 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|