mangusta 0.1.0 → 0.1.1

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: a0d32d01d6f5191b3b692cfc4bba85867a5de70e1f06f78c196432b16d428871
4
- data.tar.gz: f2e5c89cc582a4ca05263759faea53435ab6aa259895410d030a34c7c3b79a16
3
+ metadata.gz: 52c51916f6df1afc0374cf53eb092e69424ba9a4366adecbd5d2202a786a090a
4
+ data.tar.gz: acf09a4c2242c6de2b817a01825d9dc967c4462e61740fb208e51c4c4674a93c
5
5
  SHA512:
6
- metadata.gz: f83fb4cc57ba6218819d7c8f581f4add317152742f71e98eb48d9d82e0b5f8f8d52338f90dd59dbb9f845e48ca4f75e6f514bc5f6e60e47a371a4ab85d2089b8
7
- data.tar.gz: 13a5cbb8e41ab092a79b810c3fc78edca8228392224d0007dd346e7f3ea9b6fdb607119d487c9ed63362fc80091b217d59db276386c7635ebe672f3ce08904e2
6
+ metadata.gz: b926b6f868da4ca9139a475adc3050f32167e22bdb0bc06754ecda4e54dd0be6098c8204cc6a2a57fd2f1502e9a8aeec52c7742c5bea2c6d1cd3c05625245714
7
+ data.tar.gz: 85368babdaab34a77cc10da793582115ece00c6fd2036c2b02a89a15d829c5214c5a0da6c7eb420cb5aae45d2ff15665ccaf0dd28a19967cc2b9168c29568dae
data/Gemfile CHANGED
@@ -6,4 +6,4 @@ gemspec
6
6
  gem "rake", "~> 12.0"
7
7
  gem "rspec", "~> 3.0"
8
8
  gem "mongo", "~> 2.11"
9
- gem "italian-ruby", "~> 0.1.3"
9
+ gem "italian-ruby", "~> 0.1.3"
@@ -9,9 +9,9 @@ modulo Mangusta
9
9
 
10
10
  ##
11
11
  # Imposta nome e valore iniziale.
12
- definisci inizializzatore(nome, **attributi)
12
+ definisci inizializzatore(nome, **parametri)
13
13
  se_stesso.nome = nome
14
- se_stesso.valore_iniziale = attributi.ottieni(:valore_iniziale, nullo)
14
+ se_stesso.valore_iniziale = parametri.ottieni(:valore_iniziale, nullo)
15
15
  fine
16
16
 
17
17
  ##
@@ -0,0 +1,48 @@
1
+ modulo Mangusta
2
+ modulo Documento
3
+ classe Relazione
4
+
5
+ accessore :nome
6
+ accessore :tipologia
7
+ accessore :nome_chiave
8
+ accessore :nome_ripostiglio
9
+
10
+ definisci inizializzatore(tipologia, nome, **parametri)
11
+ alza "È necessario specificare una chiave :ripostiglio per la relazione" se
12
+ parametri.ottieni(:ripostiglio, nullo).nullo?
13
+
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
+ fine
19
+
20
+ ##
21
+ # Risolve il documento o i documenti relazionati.
22
+ definisci risolvi(documento)
23
+ considera tipologia
24
+ quando :appartiene_a allora _risolvi_appartiene_a(documento)
25
+ altrimenti
26
+ alza "La relazione `#{tipologia}` non è supportata"
27
+ fine
28
+ fine
29
+
30
+ privati
31
+
32
+ ##
33
+ # Puntatore al ripostiglio dove risolvere la relazione.
34
+ definisci _ripostiglio
35
+ Oggetto.ottieni_costante(se_stesso.nome_ripostiglio)
36
+ fine
37
+
38
+ ##
39
+ # Risolve la relazione di appartenenza.
40
+ definisci _risolvi_appartiene_a(documento)
41
+ id_documento_relazionato = documento.manda se_stesso.nome_chiave
42
+ ritorna nullo se id_documento_relazionato.nullo?
43
+ _ripostiglio.cerca_per_id id_documento_relazionato
44
+ fine
45
+
46
+ fine
47
+ fine
48
+ fine
@@ -41,6 +41,7 @@ modulo Mangusta
41
41
  fine
42
42
 
43
43
  _genera_nuovo_id se ottieni_valore_campo(:_id).nullo?
44
+ _memorizza_attributi_originali **attributi
44
45
  fine
45
46
 
46
47
  ##
@@ -61,6 +62,13 @@ modulo Mangusta
61
62
  imposta_variabile_istanza "@#{nome_campo}", valore_campo
62
63
  fine
63
64
 
65
+ ##
66
+ # Accede al valore dell'attributo originale del documento,
67
+ # passando oltre gli accessori, per accedere a campi non modellati.
68
+ definisci [](attributo)
69
+ @_attributi_originali.ottieni attributo
70
+ fine
71
+
64
72
  privati
65
73
 
66
74
  ##
@@ -79,6 +87,13 @@ modulo Mangusta
79
87
  imposta_valore_campo :_id, BSON::ObjectId.new
80
88
  fine
81
89
 
90
+ ##
91
+ # Memorizza gli attiributi originali del documento.
92
+ definisci _memorizza_attributi_originali(**attributi)
93
+ @_attributi_originali = attributi
94
+ fine
95
+
96
+
82
97
  ##
83
98
  # Codice da eseguire quando questo modulo verrà incluso.
84
99
  definisci se_stesso.included(classe_documento)
@@ -86,19 +101,27 @@ modulo Mangusta
86
101
  classe_documento.class_eval esegui
87
102
  classe << se_stesso
88
103
  accessore :campi
104
+ accessore :relazioni
89
105
 
90
106
  ##
91
107
  # Aggiunge metodo di classe `campo` per creare nuovi campi.
92
- definisci campo(nome, **attributi)
93
- _memorizza_campo nome, **attributi
108
+ definisci campo(nome, **parametri)
109
+ _memorizza_campo nome, **parametri
110
+ fine
111
+
112
+ ##
113
+ # Aggiunge un metodo di classe `appartiene_a` per generare relazioni
114
+ # di appartenenza.
115
+ definisci appartiene_a(nome, **parametri)
116
+ _memorizza_relazione :appartiene_a, nome, **parametri
94
117
  fine
95
118
 
96
119
  privati
97
120
 
98
121
  ##
99
122
  # Memorizza un nuovo campo.
100
- def _memorizza_campo(nome, **attributi)
101
- se_stesso.campi << Mangusta::Documento::Campo.nuovo(nome, **attributi)
123
+ def _memorizza_campo(nome, **parametri)
124
+ se_stesso.campi << Mangusta::Documento::Campo.nuovo(nome, **parametri)
102
125
 
103
126
  definisci_metodo nome esegui
104
127
  ottieni_variabile_istanza "@#{nome}"
@@ -109,12 +132,34 @@ modulo Mangusta
109
132
  fine
110
133
  fine
111
134
 
135
+ ##
136
+ # Memorizza una nuova relazione.
137
+ def _memorizza_relazione(tipologia, nome, **parametri)
138
+ nuova_relazione = Mangusta::Documento::Relazione.nuova(tipologia, nome, **parametri)
139
+ se_stesso.relazioni << nuova_relazione
140
+
141
+ considera tipologia
142
+ quando :appartiene_a
143
+ _memorizza_campo nuova_relazione.nome_chiave
144
+ fine
145
+
146
+ definisci_metodo nome esegui
147
+ nuova_relazione.risolvi se_stesso
148
+ fine
149
+
150
+ definisci_metodo "#{nome}=" esegui |valore|
151
+ nuova_relazione.aggiorna se_stesso
152
+ fine
153
+ fine
154
+
112
155
  fine
113
156
  fine
114
157
 
115
- # Aggiunge campo `id` e imposta campi a [].
158
+ # Aggiunge campo `id` e imposta campi e relazioni a [].
116
159
  classe_documento.class_eval esegui
117
- se_stesso.campi = []
160
+ se_stesso.campi = []
161
+ se_stesso.relazioni = []
162
+
118
163
  _memorizza_campo :_id
119
164
  fine
120
165
 
@@ -0,0 +1 @@
1
+ richiedi_relativo "../mangusta"
@@ -33,7 +33,6 @@ modulo Mangusta
33
33
  classe_documento.class_eval esegui
34
34
  classe << se_stesso
35
35
 
36
- accessore :_collezione
37
36
  accessore :_nome_collezione
38
37
  accessore :_classe_documento
39
38
 
@@ -41,7 +40,6 @@ modulo Mangusta
41
40
  # Metodo per definire su che collezione agire.
42
41
  definisci collezione(nome)
43
42
  se_stesso._nome_collezione = nome
44
- se_stesso._collezione = Mangusta.connessione[nome]
45
43
  fine
46
44
 
47
45
  ##
@@ -77,21 +75,21 @@ modulo Mangusta
77
75
 
78
76
  ##
79
77
  # Deposita un documento.
80
- definisci deposita(documento)
78
+ definisci inserisci(documento)
81
79
  documento_in_json = Mangusta::Utilità.converti_in_json(documento)
82
- se_stesso._collezione.inserisci_uno documento_in_json
80
+ _collezione.inserisci_uno documento_in_json
83
81
  documento
84
82
  fine
85
83
 
86
84
  ##
87
85
  # Deposita molti documenti.
88
- definisci deposita_molti(documenti)
86
+ definisci inserisci_molti(documenti)
89
87
  alza "L'argomento passato non è una lista" a_meno_che documenti.risponde_a? :mappa
90
88
  documenti_in_json = documenti.mappa { |documento| Mangusta::Utilità.converti_in_json(documento) }
91
- se_stesso._collezione.inserisci_molti documenti_in_json
89
+ _collezione.inserisci_molti documenti_in_json
92
90
  documenti
93
91
  fine
94
- alias :deposta_molte :deposita_molti
92
+ alias :inserisci_molte :inserisci_molti
95
93
 
96
94
  ##
97
95
  # Aggiorna un documento.
@@ -101,7 +99,7 @@ modulo Mangusta
101
99
 
102
100
  id_documento = documento.risponde_a?(:_id) ? documento._id : documento
103
101
  id_documento = BSON::ObjectId id_documento
104
- se_stesso._collezione.aggiorna_uno Mappa[_id: id_documento], Mappa["$set" => valori_da_aggiornare]
102
+ _collezione.aggiorna_uno Mappa[_id: id_documento], Mappa["$set" => valori_da_aggiornare]
105
103
  cerca_per_id(id_documento)
106
104
  fine
107
105
 
@@ -122,7 +120,7 @@ modulo Mangusta
122
120
  ricerca = Mappa[_id: filtro_lista_id_documenti]
123
121
  fine
124
122
 
125
- risultato_aggiornamento = se_stesso._collezione.aggiorna_molti ricerca,
123
+ risultato_aggiornamento = _collezione.aggiorna_molti ricerca,
126
124
  Mappa["$set": valori_da_aggiornare]
127
125
  risultato_aggiornamento.modified_count
128
126
  fine
@@ -136,14 +134,14 @@ modulo Mangusta
136
134
 
137
135
  id_documento = documento.risponde_a?(:_id) ? documento._id : documento
138
136
  id_documento = BSON::ObjectId id_documento
139
- risultato_cancellazione = se_stesso._collezione.cancella_uno Mappa[_id: id_documento]
137
+ risultato_cancellazione = _collezione.cancella_uno Mappa[_id: id_documento]
140
138
  risultato_cancellazione.deleted_count
141
139
  fine
142
140
 
143
141
  ##
144
142
  # Cancella molti documenti.
145
143
  def cancella_molti(documenti)
146
- risultato_cancellazione = se_stesso._collezione.cancella_uno Mappa[_id: id_documento]
144
+ risultato_cancellazione = _collezione.cancella_uno Mappa[_id: id_documento]
147
145
  risultato_cancellazione.deleted_count
148
146
  fine
149
147
  alias :cancella_molte :cancella_molti
@@ -151,12 +149,19 @@ modulo Mangusta
151
149
  ##
152
150
  # Cancella tutti i documenti.
153
151
  definisci cancella_tutti
154
- risultato_cancellazione = se_stesso._collezione.cancella_molti
152
+ risultato_cancellazione = _collezione.cancella_molti
155
153
  risultato_cancellazione.deleted_count
156
154
  fine
157
155
 
158
156
  privati
159
157
 
158
+ ##
159
+ # Connette alla collezione.
160
+ definisci _collezione
161
+ alza "Mangusta non è ancora stato connesso ad una base dati" se Mangusta.connessione.nulla?
162
+ Mangusta.connessione[se_stesso._nome_collezione]
163
+ fine
164
+
160
165
  ##
161
166
  # Ritorna un risultato ricerca.
162
167
  definisci _risultato_ricerca(**parametri)
@@ -7,14 +7,18 @@ modulo Mangusta
7
7
 
8
8
  documento_convertito = Mappa.nuova
9
9
  documento.campi.per_ognuno esegui |campo|
10
- documento_convertito.deposita campo.nome, documento.ottieni_valore_campo(campo.nome)
10
+ valore_campo = documento.ottieni_valore_campo(campo.nome)
11
+ prossimo se valore_campo.nullo?
12
+ documento_convertito.deposita campo.nome, valore_campo
11
13
  fine
12
14
  documento_convertito
13
15
  fine
14
16
 
15
17
  definisci se_stessa.converti_in_documento(documento_in_json, classe_documento)
16
18
  ritorna nullo se documento_in_json.nullo?
17
- Object.const_get(classe_documento).nuovo **documento_in_json
19
+ classe_documento ||= "Oggetto"
20
+
21
+ Oggetto.ottieni_costante(classe_documento).nuovo **documento_in_json
18
22
  fine
19
23
 
20
24
  fine
@@ -1,3 +1,3 @@
1
1
  modulo Mangusta
2
- VERSIONE = "0.1.0"
2
+ VERSIONE = "0.1.1"
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.0
4
+ version: 0.1.1
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-29 00:00:00.000000000 Z
11
+ date: 2020-03-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Simple MongoDB ODM. Yay!
14
14
  email:
@@ -30,6 +30,8 @@ files:
30
30
  - lib/mangusta/core_ext/mongo.rb
31
31
  - lib/mangusta/documento.ir
32
32
  - lib/mangusta/documento/campo.ir
33
+ - lib/mangusta/documento/relazione.ir
34
+ - lib/mangusta/load.rb
33
35
  - lib/mangusta/ripostiglio.ir
34
36
  - lib/mangusta/ripostiglio/risultato_ricerca.ir
35
37
  - lib/mangusta/utilità/convertitori.ir