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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09d564450907b6774ea0b1fda744c47ea00659f10a0d471784d004aad1a9c311'
4
- data.tar.gz: ea402f39d8f41120c2624bfefbe3e62a944bfedf623c72d1ba18872916fc8f7f
3
+ metadata.gz: defaeaa7bbc87855a9dd60cd900a75bbe9096d04e213ec946aedc180178dc1d4
4
+ data.tar.gz: 8c5368a5e8329580a0e30fce688168d753cab531e2f1d6d7a7716e6d1f11d1a0
5
5
  SHA512:
6
- metadata.gz: da20cb51a9d1867aeaff19b8a616da0f54a1e83a91296dd4bc55e60b880a4b065b118f9fc4240e78588a59eb4de6f592dba39ff5d9ae5818f7742b901c717f0e
7
- data.tar.gz: ff2ed81f3dd89a05d99ef28c35d780c590d99a7ebec5b6a56adca0a69d6a6f7dfc48b849045a5fb166fb3dfd68e576ac4af6706d0ef0970099e1b775ec9c9bf5
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.1)
5
- italian-ruby (~> 0.1.3)
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.4)
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 :nome_chiave
7
+ accessore :nome_campo
8
+ accessore :nome_campo_relazionato
8
9
  accessore :nome_ripostiglio
9
10
 
10
11
  definisci inizializzatore(tipologia, nome, **parametri)
11
- alza "È necessario specificare una chiave :ripostiglio per la relazione" se
12
- parametri.ottieni(:ripostiglio, nullo).nullo?
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
- se_stesso.nome = nome
15
- se_stesso.tipologia = tipologia
16
- se_stesso.nome_ripostiglio = parametri.ottieni(:ripostiglio)
17
- se_stesso.nome_chiave = parametri.ottieni(:nome_chiave) || "id_#{nome}".in_simbolo
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 :appartiene_a allora _risolvi_appartiene_a(documento)
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(se_stesso.nome_ripostiglio)
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 appartenenza.
65
+ # Risolve la relazione di `appartiene a`.
40
66
  definisci _risolvi_appartiene_a(documento)
41
- id_documento_relazionato = documento.manda se_stesso.nome_chiave
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
@@ -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.nome_chiave
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
@@ -62,7 +62,7 @@ modulo Mangusta
62
62
 
63
63
  ##
64
64
  # Ritorna il primo documento del ripostiglio.
65
- def primo
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
- def cancella(documento)
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
- def cancella_molti(documenti)
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[se_stesso._nome_collezione]
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
- se_stesso._collezione, se_stesso._classe_documento, **parametri)
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.classe == Mappa
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 nullo se documento_in_json.nullo?
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
@@ -1,3 +1,3 @@
1
1
  modulo Mangusta
2
- VERSIONE = "0.1.3"
2
+ VERSIONE = "0.1.4"
3
3
  fine
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.3
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-03-31 00:00:00.000000000 Z
11
+ date: 2020-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: italian-ruby