mangusta 0.1.9 → 0.2.0

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: 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