mangusta 0.1.9 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e5ccca4627ba78909bda3316957a8590139ece2e2a28d85f49f6bafa04c25c8
4
- data.tar.gz: d73fde5f9abe2a592548605082c415da339476714922fb9c412aa5ae2ea3ce6c
3
+ metadata.gz: 2a0fa35ac6faebe5106dc0b0dfbe55a548fe16d5e646e42da76cf557590bec93
4
+ data.tar.gz: c7dea251e454cede550cb90bfc76d9a22181a8111bc00b36fa3025f76a0ad2f6
5
5
  SHA512:
6
- metadata.gz: d091dfc894066b6ebc74a0a6599304e5b878490028004711d2caa049c9a1604f913ba1421311d441f150c8b94791cc05938109ed4b8a72b4c811ab206826fbc9
7
- data.tar.gz: 2059790ab31eb918f38157f55bd9f03825ca70dc473428247b05e9825889ba375487beb8c2044a49993def8adc98ba6f138d355e2a51df86b7e52b904ae2c993
6
+ metadata.gz: 92c6343f701b28c6ab222490d05fae6871226ef616d5b4ed535aa2b143cbe8e7bae7e03548ebf02d0ae34d75aaa5ac138a0462fb7645207fc9f90f7c07734ad9
7
+ data.tar.gz: b4723b823c3502df1f83fce6d8478728174bf910d018e6975efa236abf9fdad1a44ebb9bfb6bfe837a8be0b87c0fbd46f2c4c99ea4828f8c7552e102447cd574
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mangusta (0.1.4)
4
+ mangusta (0.1.9)
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.1.7)
13
+ italian-ruby (0.2.2)
14
14
  ruby2ruby (~> 2.4)
15
15
  mongo (2.11.4)
16
16
  bson (>= 4.4.2, < 5.0.0)
@@ -7,6 +7,7 @@ module Mongo
7
7
  alias :aggiorna_molti :update_many
8
8
  alias :cancella_uno :delete_one
9
9
  alias :cancella_molti :delete_many
10
+ alias :cancella :drop
10
11
 
11
12
  class View
12
13
  alias :primo :first
@@ -0,0 +1,110 @@
1
+ modulo Mangusta
2
+ modulo Documento
3
+ ##
4
+ # Gestisce un documento incorporato.
5
+ classe Incorporato
6
+
7
+ accessore :nome
8
+ accessore :tipologia
9
+ accessore :nome_classe
10
+
11
+ ##
12
+ # Imposta nome e valore iniziale.
13
+ definisci inizializzatore(nome, **parametri)
14
+ se_stesso.nome = nome
15
+ se_stesso.tipologia = parametri.ottieni(:tipologia)
16
+ se_stesso.nome_classe = parametri.ottieni(:nome_classe)
17
+ fine
18
+
19
+ ##
20
+ # Ottiene il valore per questo documento incorporato.
21
+ definisci ottieni(padre)
22
+ valore_originale = padre.ottieni_valore_campo nome
23
+ ritorna _inizializza_documento_incorporato(padre) se valore_originale.non_esiste?
24
+
25
+ considera tipologia
26
+ quando :singolo
27
+ ritorna _inizializza_documento_incorporato(padre, valore_originale) se valore_originale.è_una? Mappa
28
+ quando :multiplo
29
+ se valore_originale.è_una? Lista e valore_originale.tutti? { |singolo_valore| singolo_valore.è_una? Mappa }
30
+ ritorna _inizializza_documento_incorporato(padre, valore_originale)
31
+ fine
32
+ fine
33
+
34
+ padre.ottieni_valore_campo nome
35
+ fine
36
+
37
+ ##
38
+ # Salva il documento incorporato.
39
+ definisci deposita(valore, padre)
40
+ considera tipologia
41
+ quando :singolo
42
+ alza NonValido, "L'argomento passato deve essere un #{nome_classe} o una Mappa" se
43
+ valore.non_è_un? _classe_documento e valore.non_è_una? Mappa
44
+
45
+ se valore.è_una? Mappa
46
+ documento_incorporato = Mangusta::Utilità
47
+ .converti_in_documento valore.fondi(_padre: padre), _classe_documento
48
+ altrimenti
49
+ documento_incorporato = valore
50
+ documento_incorporato.imposta_valore_campo :_padre, padre
51
+ fine
52
+
53
+ padre.imposta_valore_campo nome, documento_incorporato
54
+ documento_incorporato
55
+ quando :multiplo
56
+ alza NonValido, "L'argomento passato deve essere una Lista" se valore.non_è_una? Lista
57
+
58
+ lista_di_documenti = valore.tutti? { |singolo_valore| singolo_valore.è_un? _classe_documento }
59
+ lista_di_mappe = valore.tutti? { |singolo_valore| singolo_valore.è_una? Mappa }
60
+ alza NonValido, "L'argomento deve essere una Lista di #{_classe_documento}, o Mappa" se
61
+ lista_di_documenti == no e lista_di_mappe == no
62
+
63
+ se lista_di_mappe
64
+ documenti_incorporati = valore.mappa esegui |singolo_valore|
65
+ Mangusta::Utilità.converti_in_documento singolo_valore.fondi(_padre: padre), _classe_documento
66
+ fine
67
+ altrimenti
68
+ documenti_incorporati = valore
69
+ documenti_incorporati.per_ognuno esegui |documento_incorporato|
70
+ documento_incorporato.imposta_valore_campo :_padre, padre
71
+ fine
72
+ fine
73
+
74
+ padre.imposta_valore_campo nome, documenti_incorporati
75
+ documenti_incorporati
76
+ fine
77
+ fine
78
+
79
+ privati
80
+
81
+ ##
82
+ # Classe del documento incorporato.
83
+ definisci _classe_documento
84
+ Oggetto.ottieni_costante nome_classe
85
+ fine
86
+
87
+ ##
88
+ # Inizializza documento incorporato.
89
+ definisci _inizializza_documento_incorporato(padre, valore = Mappa.nuova)
90
+ considera tipologia
91
+ quando :singolo
92
+ documento_incorporato = _classe_documento.nuovo valore.fondi(_padre: padre)
93
+ padre.imposta_valore_campo nome, documento_incorporato
94
+ documento_incorporato
95
+ quando :multiplo
96
+ documenti_incorporati = valore.mappa esegui |singolo_valore|
97
+ _classe_documento.nuovo valore.fondi(_padre: padre)
98
+ fine
99
+ padre.imposta_valore_campo nome, documenti_incorporati
100
+ documenti_incorporati
101
+ fine
102
+ fine
103
+
104
+ ##
105
+ # Errori per documenti incorporati.
106
+ classe NonValido < Errore; fine
107
+
108
+ fine
109
+ fine
110
+ fine
@@ -0,0 +1,110 @@
1
+ modulo Mangusta
2
+ modulo Documento
3
+ modulo MetodiDiClasse
4
+
5
+ ##
6
+ # Aggiunge un metodo di classe `campo` per creare nuovi campi.
7
+ definisci campo(nome, **parametri)
8
+ _memorizza_campo nome, **parametri
9
+ fine
10
+
11
+ ##
12
+ # Aggiunge un metodo di classe `ha_molti` per generare relazioni
13
+ # di possedimento.
14
+ definisci ha_molti(nome, **parametri)
15
+ _memorizza_relazione :ha_molti, nome, **parametri
16
+ fine
17
+ alias :ha_molte :ha_molti
18
+
19
+ ##
20
+ # Aggiunge un metodo di classe `appartiene_a` per generare relazioni
21
+ # di appartenenza.
22
+ definisci appartiene_a(nome, **parametri)
23
+ _memorizza_relazione :appartiene_a, nome, **parametri
24
+ fine
25
+
26
+ ##
27
+ # Aggiunge un metodo di classe `ha_e_appartiene_a_molti` per generare relazioni
28
+ # di possedimento e appartenenza.
29
+ definisci ha_e_appartiene_a_molti(nome, **parametri)
30
+ _memorizza_relazione :ha_e_appartiene_a_molti, nome, **parametri
31
+ fine
32
+ alias :ha_e_appartiene_a_molte :ha_e_appartiene_a_molti
33
+
34
+ ##
35
+ # Aggiunge un metodo di classe `incorpora_un` per creare documenti
36
+ # incorporati.
37
+ definisci incorpora_un(nome_documento_incorporato, **parametri)
38
+ _memorizza_documento_incorporato nome_documento_incorporato, **parametri.fondi(tipologia: :singolo)
39
+ fine
40
+ alias :incorpora_una :incorpora_un
41
+
42
+ ##
43
+ # Aggiunge un metodo di classe `incorpora_molti` per creare documenti
44
+ # incorporati.
45
+ definisci incorpora_molti(nome_documento_incorporato, **parametri)
46
+ _memorizza_documento_incorporato nome_documento_incorporato, **parametri.fondi(tipologia: :multiplo)
47
+ fine
48
+ alias :incorpora_molte :incorpora_molti
49
+
50
+ ##
51
+ # Aggiunge un metodo di classe `incorporato_in` per ottenere
52
+ # il documento padre di un documento incorporato.
53
+ definisci incorporato_in(nome_documento_padre, **parametri)
54
+
55
+ fine
56
+
57
+ privati
58
+
59
+ ##
60
+ # Memorizza un nuovo campo.
61
+ definisci _memorizza_campo(nome, **parametri)
62
+ se_stesso.campi << Mangusta::Documento::Campo.nuovo(nome, **parametri)
63
+
64
+ definisci_metodo nome esegui
65
+ ottieni_variabile_istanza "@#{nome}"
66
+ fine
67
+
68
+ definisci_metodo "#{nome}?" esegui
69
+ ottieni_variabile_istanza("@#{nome}") == vero
70
+ fine
71
+
72
+ definisci_metodo "#{nome}=" esegui |valore|
73
+ imposta_variabile_istanza "@#{nome}", valore
74
+ fine
75
+ fine
76
+
77
+ ##
78
+ # Memorizza una nuova relazione.
79
+ definisci _memorizza_relazione(tipologia, nome, **parametri)
80
+ relazione = Mangusta::Documento::Relazione.nuova(tipologia, nome, **parametri)
81
+ se_stesso.relazioni << relazione
82
+
83
+ considera tipologia
84
+ quando :appartiene_a, :ha_e_appartiene_a_molti
85
+ _memorizza_campo relazione.nome_campo
86
+ fine
87
+
88
+ definisci_metodo nome esegui
89
+ relazione.risolvi se_stesso
90
+ fine
91
+ fine
92
+
93
+ ##
94
+ # Memorizza un documento incorporato.
95
+ definisci _memorizza_documento_incorporato(nome, **parametri)
96
+ documento_incorporato = Mangusta::Documento::Incorporato.nuovo(nome, **parametri)
97
+ se_stesso.documenti_incorporati << documento_incorporato
98
+
99
+ definisci_metodo nome esegui
100
+ documento_incorporato.ottieni se_stesso
101
+ fine
102
+
103
+ definisci_metodo "#{nome}=" esegui |valore|
104
+ documento_incorporato.deposita valore, se_stesso
105
+ fine
106
+ fine
107
+
108
+ fine
109
+ fine
110
+ fine
@@ -37,6 +37,7 @@ modulo Mangusta
37
37
 
38
38
  assegna **attributi
39
39
  _genera_nuovo_id se ottieni_valore_campo(:_id).nullo?
40
+ _genera_documento_padre **attributi se attributi.ha_chiave? :_padre
40
41
  _memorizza_attributi_originali **attributi
41
42
  fine
42
43
 
@@ -52,6 +53,12 @@ modulo Mangusta
52
53
  se_stesso.classe.relazioni || []
53
54
  fine
54
55
 
56
+ ##
57
+ # Recupera i documenti incorporati.
58
+ definisci documenti_incorporati
59
+ se_stesso.classe.documenti_incorporati || []
60
+ fine
61
+
55
62
  ##
56
63
  # Recupera il valore di un campo del documento.
57
64
  definisci ottieni_valore_campo(nome_campo)
@@ -66,9 +73,15 @@ modulo Mangusta
66
73
 
67
74
  ##
68
75
  # Ottiene la rappresentazione in Mappa dei campi del documento.
69
- definisci esponi
76
+ definisci esponi(*campi_richiesti)
70
77
  risultato = Mappa.nuova
71
- campi.per_ognuno esegui |campo|
78
+ se campi_richiesti.nullo? o campi_richiesti.vuoto?
79
+ campi_da_esporre = campi
80
+ altrimenti
81
+ campi_da_esporre = campi.seleziona { |campo| campo.nome.in? campi_richiesti }
82
+ fine
83
+
84
+ campi_da_esporre.per_ognuno esegui |campo|
72
85
  valore_campo = ottieni_valore_campo(campo.nome)
73
86
  valore_campo = valore_campo.to_s se valore_campo.è_un? BSON::ObjectId
74
87
  risultato.deposita campo.nome, valore_campo
@@ -94,6 +107,12 @@ modulo Mangusta
94
107
  @_attributi_originali.ottieni attributo
95
108
  fine
96
109
 
110
+ ##
111
+ # Accede al documento padre, se presente.
112
+ definisci _padre
113
+ @_padre
114
+ fine
115
+
97
116
  privati
98
117
 
99
118
  ##
@@ -112,6 +131,12 @@ modulo Mangusta
112
131
  imposta_valore_campo :_id, BSON::ObjectId.new
113
132
  fine
114
133
 
134
+ ##
135
+ # Genera il puntatore al documento padre.
136
+ definisci _genera_documento_padre(**attributi)
137
+ @_padre = attributi.ottieni :_padre
138
+ fine
139
+
115
140
  ##
116
141
  # Converte in BSON::ObjectId una stringa.
117
142
  # Se la conversione fallisce, ritorna la stringa iniziale.
@@ -131,85 +156,20 @@ modulo Mangusta
131
156
 
132
157
  ##
133
158
  # Codice da eseguire quando questo modulo verrà incluso.
134
- definisci se_stesso.included(classe_documento)
159
+ definisci se_stesso.quando_incluso(classe_documento)
160
+
161
+ classe_documento.apri_classe esegui
162
+ estendi Mangusta::Documento::MetodiDiClasse
135
163
 
136
- classe_documento.class_eval esegui
137
164
  classe << se_stesso
138
165
  accessore :campi
139
166
  accessore :relazioni
140
-
141
- ##
142
- # Aggiunge metodo di classe `campo` per creare nuovi campi.
143
- definisci campo(nome, **parametri)
144
- _memorizza_campo nome, **parametri
145
- fine
146
-
147
- ##
148
- # Aggiunge un metodo di classe `ha_molti` per generare relazioni
149
- # di possedimento.
150
- definisci ha_molti(nome, **parametri)
151
- _memorizza_relazione :ha_molti, nome, **parametri
152
- fine
153
- alias :ha_molte :ha_molti
154
-
155
- ##
156
- # Aggiunge un metodo di classe `appartiene_a` per generare relazioni
157
- # di appartenenza.
158
- definisci appartiene_a(nome, **parametri)
159
- _memorizza_relazione :appartiene_a, nome, **parametri
160
- fine
161
-
162
- ##
163
- # Aggiunge un metodo di classe `ha_e_appartiene_a_molti` per generare relazioni
164
- # di possedimento e appartenenza.
165
- definisci ha_e_appartiene_a_molti(nome, **parametri)
166
- _memorizza_relazione :ha_e_appartiene_a_molti, nome, **parametri
167
- fine
168
- alias :ha_e_appartiene_a_molte :ha_e_appartiene_a_molti
169
-
170
- privati
171
-
172
- ##
173
- # Memorizza un nuovo campo.
174
- def _memorizza_campo(nome, **parametri)
175
- se_stesso.campi << Mangusta::Documento::Campo.nuovo(nome, **parametri)
176
-
177
- definisci_metodo nome esegui
178
- ottieni_variabile_istanza "@#{nome}"
179
- fine
180
-
181
- definisci_metodo "#{nome}?" esegui
182
- ottieni_variabile_istanza("@#{nome}") == vero
183
- fine
184
-
185
- definisci_metodo "#{nome}=" esegui |valore|
186
- imposta_variabile_istanza "@#{nome}", valore
187
- fine
188
- fine
189
-
190
- ##
191
- # Memorizza una nuova relazione.
192
- def _memorizza_relazione(tipologia, nome, **parametri)
193
- nuova_relazione = Mangusta::Documento::Relazione.nuova(tipologia, nome, **parametri)
194
- se_stesso.relazioni << nuova_relazione
195
-
196
- considera tipologia
197
- quando :appartiene_a, :ha_e_appartiene_a_molti
198
- _memorizza_campo nuova_relazione.nome_campo
199
- fine
200
-
201
- definisci_metodo nome esegui
202
- nuova_relazione.risolvi se_stesso
203
- fine
204
- fine
205
-
167
+ accessore :documenti_incorporati
206
168
  fine
207
- fine
208
169
 
209
- # Aggiunge campo `id` e imposta campi e relazioni a [].
210
- classe_documento.class_eval esegui
211
- se_stesso.campi = []
212
- se_stesso.relazioni = []
170
+ se_stesso.campi = []
171
+ se_stesso.relazioni = []
172
+ se_stesso.documenti_incorporati = []
213
173
 
214
174
  _memorizza_campo :_id
215
175
  fine
@@ -30,7 +30,7 @@ modulo Mangusta
30
30
  ##
31
31
  # Codice da eseguire quando questo modulo verrà incluso.
32
32
  definisci se_stesso.included(classe_documento)
33
- classe_documento.class_eval esegui
33
+ classe_documento.apri_classe esegui
34
34
  classe << se_stesso
35
35
 
36
36
  accessore :_nome_collezione
@@ -11,6 +11,27 @@ modulo Mangusta
11
11
  prossimo se valore_campo.nullo?
12
12
  documento_convertito.deposita campo.nome, valore_campo
13
13
  fine
14
+
15
+ documento.documenti_incorporati.per_ognuno esegui |documento_incorporato|
16
+ valore_documento_incorporato = documento.ottieni_valore_campo(documento_incorporato.nome)
17
+ prossimo se valore_documento_incorporato.nullo?
18
+ considera documento_incorporato.tipologia
19
+ quando :singolo
20
+ valore_documento_incorporato = converti_in_json(valore_documento_incorporato) se
21
+ valore_documento_incorporato.non_è_una? Mappa
22
+ quando :multiplo
23
+ valore_documento_incorporato = valore_documento_incorporato.mappa esegui |singolo_valore|
24
+ se singolo_valore.non_è_una? Mappa
25
+ converti_in_json singolo_valore
26
+ altrimenti
27
+ singolo_valore
28
+ fine
29
+ fine
30
+ fine
31
+
32
+ documento_convertito.deposita documento_incorporato.nome, valore_documento_incorporato
33
+ fine
34
+
14
35
  documento_convertito
15
36
  fine
16
37
 
@@ -1,3 +1,3 @@
1
1
  modulo Mangusta
2
- VERSIONE = "0.1.9"
2
+ VERSIONE = "0.2.0"
3
3
  fine
data/lib/mangusta.ir CHANGED
@@ -4,6 +4,7 @@ richiedi_tutti "mangusta"
4
4
 
5
5
  modulo Mangusta
6
6
  classe << se_stessa
7
+
7
8
  accessore :connessione
8
9
  accessore :base_dati
9
10
  accessore :collezioni
@@ -14,12 +15,15 @@ modulo Mangusta
14
15
  alza "Passare le chiavi :indirizzo e :base_dati come argomenti." a_meno_che
15
16
  parametri.ha_chiave? :indirizzo e parametri.ha_chiave? :base_dati
16
17
 
17
- se_stessa.connessione ||= Mongo::Client.nuovo(
18
+ ritorna connessione se connessione.esiste?
19
+
20
+ se_stessa.connessione = Mongo::Client.nuovo(
18
21
  [ parametri.ottieni(:indirizzo) ],
19
22
  database: parametri.ottieni(:base_dati))
20
23
 
21
- se_stessa.base_dati = se_stessa.connessione.database
22
- se_stessa.collezioni = se_stessa.base_dati.collections
24
+ se_stessa.base_dati = connessione.database
25
+ se_stessa.collezioni = base_dati.collections
23
26
  fine
27
+
24
28
  fine
25
29
  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.9
4
+ version: 0.2.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-10 00:00:00.000000000 Z
11
+ date: 2020-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: italian-ruby
@@ -58,6 +58,8 @@ files:
58
58
  - lib/mangusta/core_ext/mongo.rb
59
59
  - lib/mangusta/documento.ir
60
60
  - lib/mangusta/documento/campo.ir
61
+ - lib/mangusta/documento/incorporato.ir
62
+ - lib/mangusta/documento/metodi_di_classe.ir
61
63
  - lib/mangusta/documento/relazione.ir
62
64
  - lib/mangusta/load.rb
63
65
  - lib/mangusta/ripostiglio.ir