mangusta 0.1.0 → 0.1.1

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