mongous 0.1.8 → 0.4.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 +4 -4
- data/README.adoc +286 -48
- data/README.ja.adoc +288 -50
- data/lib/mongous/base.rb +45 -2
- data/lib/mongous/document.rb +75 -32
- data/lib/mongous/extention.rb +74 -55
- data/lib/mongous/filter.rb +316 -233
- data/lib/mongous/version.rb +1 -1
- data/mongous.gemspec +1 -1
- data/sample/connect_auto_0.rb +9 -0
- data/sample/declare_compact_1.rb +7 -9
- data/sample/declare_compact_2.rb +38 -0
- data/sample/declare_label_1.rb +10 -8
- data/sample/declare_ndex_1.rb +9 -7
- data/sample/declare_ndex_2.rb +10 -8
- data/sample/declare_strict_1.rb +14 -12
- data/sample/declare_strict_2.rb +5 -5
- data/sample/{multi_docs_1.rb → multi_collection_1.rb} +0 -2
- data/sample/multi_collection_2.rb +61 -0
- data/sample/multi_collection_3.rb +24 -0
- data/sample/query_basic_1.rb +8 -3
- data/sample/query_basic_2.rb +11 -6
- data/sample/query_basic_3.rb +2 -5
- data/sample/query_basic_4.rb +3 -6
- data/sample/query_basic_5.rb +2 -5
- data/sample/query_basic_6.rb +35 -22
- data/sample/query_detail_1.rb +3 -3
- data/sample/query_detail_2.rb +3 -3
- data/sample/query_detail_3.rb +5 -5
- data/sample/query_filter_1.rb +44 -0
- data/sample/query_filter_2.rb +48 -0
- data/sample/{query_super_1.rb → query_find_1.rb} +6 -6
- data/sample/query_select_1.rb +54 -0
- data/sample/query_skip_limit_1.rb +48 -0
- data/sample/query_skip_limit_2.rb +58 -0
- data/sample/query_sort_1.rb +43 -0
- data/sample/save_basic_1.rb +2 -7
- data/sample/save_basic_2.rb +2 -7
- data/sample/save_basic_3.rb +2 -7
- data/sample/save_detail_1.rb +7 -6
- data/sample/save_detail_2.rb +7 -6
- data/sample/save_detail_3.rb +11 -10
- data/sample/save_verify_1.rb +7 -6
- data/sample/save_verify_2.rb +0 -2
- data/sample/save_verify_3.rb +1 -3
- data/sample/save_verify_4.rb +0 -2
- data/sample/save_verify_5.rb +3 -5
- data/sample/save_verify_6.rb +3 -5
- data/sample/save_verify_7.rb +21 -0
- data/sample/update_basic_1.rb +9 -0
- data/sample/zap_basic_1.rb +1 -5
- data/sample/zap_basic_2.rb +2 -6
- data/sample/zap_basic_3.rb +2 -6
- data/sample/zbenchmark_search_1.rb +114 -0
- data/sample/zbenchmark_search_2.rb +114 -0
- data/sample/zbenchmark_search_3.rb +88 -0
- metadata +20 -12
- data/sample/multi_docs_2.rb +0 -58
- data/sample/query_basic_7.rb +0 -38
- data/sample/query_limit_1.rb +0 -44
- data/sample/query_order_1.rb +0 -49
- data/sample/query_projection_1.rb +0 -44
- data/sample/template_article.rb +0 -5
- data/sample/template_person.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b0a73aa23287619bdae717f683f04e266d582dca4a6d055b798cf32243c6566
|
4
|
+
data.tar.gz: 14e22dcbf25b3a0fa200023c9f770c549607060ddb03057b32c8c1ccee3b58c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b37766d78679cc2a6bee8bfe256da0a363344b6e349552f0491d5a0892fa1dfeb7cca90d4b2e326ac7687cdd2c3a0561fdfe9fca4ce71382029077d8c289e6de
|
7
|
+
data.tar.gz: b5e9fee3f8f9d4f34d5203b9b260559d8ee1ca86e659d85629ef9c1b700bcfcb450b7ffc0447b7f3fa8c4245634f2e968619f9ba451c9591016e13c07d23060f
|
data/README.adoc
CHANGED
@@ -5,9 +5,11 @@ Yet another mongo wrapper library.
|
|
5
5
|
== Features
|
6
6
|
|
7
7
|
* A light library that depends only on the mongo driver and bson, except for built-in and standard attachments.
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
8
|
+
* Document item constraints can be described in Array, Range, Regexp, Proc instances, or base classes.
|
9
|
+
* Check if the constraint conditions are met when saving the document.
|
10
|
+
* Check if the constraint condition is satisfied when setting the item value of the document.
|
11
|
+
* The contents of undefined items in the document can be described by value or Proc.
|
12
|
+
* Item contents at the time of document creation and update can be described by value or Proc.
|
11
13
|
|
12
14
|
== Installation
|
13
15
|
|
@@ -36,11 +38,7 @@ Or install it yourself as:
|
|
36
38
|
----
|
37
39
|
require "mongous"
|
38
40
|
|
39
|
-
Mongous.
|
40
|
-
|
41
|
-
class Book
|
42
|
-
include Mongous::Document
|
43
|
-
end
|
41
|
+
Mongous.document! :Book
|
44
42
|
----
|
45
43
|
|
46
44
|
=== Detail declaration
|
@@ -54,15 +52,19 @@ Mongous.connect! ["localhost:27017"], database: "test"
|
|
54
52
|
class Book
|
55
53
|
include Mongous::Document
|
56
54
|
|
57
|
-
field :title, String,
|
55
|
+
field :title, String, :must
|
58
56
|
field :author, String
|
59
57
|
field :publisher, String
|
60
|
-
field :style, String,
|
61
|
-
field :
|
62
|
-
field :
|
63
|
-
field :
|
64
|
-
field :isbn, String,
|
65
|
-
field :lang, String,
|
58
|
+
field :style, String, %w[hardcover, softcover, paperback]
|
59
|
+
field :size, String, /[AB]\d/
|
60
|
+
field :price, Integer, (0..1_000_000)
|
61
|
+
field :page, Integer, proc{ page % 4 == 0 }
|
62
|
+
field :isbn, String, proc{ isbn? }
|
63
|
+
field :lang, String, default: "en"
|
64
|
+
field :created_at, Time, create: proc{ Time.now }
|
65
|
+
field :updated_at, Time, update: proc{ Time.now }
|
66
|
+
|
67
|
+
filter :foobar, {title: /foobar/}
|
66
68
|
|
67
69
|
verify :strict
|
68
70
|
verify do
|
@@ -84,13 +86,13 @@ end
|
|
84
86
|
book = Book.new
|
85
87
|
book.title = "title 1"
|
86
88
|
book.price = 1000
|
87
|
-
book.
|
89
|
+
book.size = "A4"
|
88
90
|
book.save
|
89
91
|
|
90
|
-
book = Book.new( title: "title 2", price: 2000,
|
92
|
+
book = Book.new( title: "title 2", price: 2000, size: "A5" )
|
91
93
|
book.save
|
92
94
|
|
93
|
-
doc = { title: "title 3", price: 3000,
|
95
|
+
doc = { title: "title 3", price: 3000, size: "A6" }
|
94
96
|
Book.create( **doc )
|
95
97
|
----
|
96
98
|
|
@@ -100,31 +102,34 @@ Book.create( **doc )
|
|
100
102
|
----
|
101
103
|
pp books = Book.all
|
102
104
|
|
103
|
-
p book = Book.
|
105
|
+
p book = Book.where( title: /title/ ).first
|
106
|
+
p book = Book.where( title: /title/ ).last
|
104
107
|
|
105
|
-
books = Book.
|
108
|
+
books = Book.where( title: /title/ ).all
|
106
109
|
books.each do |book|
|
107
110
|
p book
|
108
111
|
end
|
109
112
|
|
110
|
-
Book.
|
113
|
+
Book.where( title: /title/ ).projection( _id: 0 ).each do |book|
|
111
114
|
p book
|
112
115
|
end
|
113
116
|
|
114
|
-
Book.
|
117
|
+
Book.where( price: (1..2000), size: ["A4","A5"] ).each do |book|
|
115
118
|
p book
|
116
119
|
end
|
117
120
|
|
118
|
-
filter1 = Book.
|
119
|
-
filter2 = Book.
|
120
|
-
filter3 = Book.
|
121
|
+
filter1 = Book.where( title: /title/ )
|
122
|
+
filter2 = Book.where( :foobar )
|
123
|
+
filter3 = Book.where( price: (1..2000) )
|
124
|
+
filter4 = Book.where( size: ["A4","A5"] )
|
125
|
+
|
121
126
|
Book.not( filter1 ).each do |book|
|
122
127
|
p book
|
123
128
|
end
|
124
|
-
Book.and( filter1,
|
129
|
+
Book.and( filter1, filter3 ).each do |book|
|
125
130
|
p book
|
126
131
|
end
|
127
|
-
Book.or(
|
132
|
+
Book.or( filter2, filter4 ).each do |book|
|
128
133
|
p book
|
129
134
|
end
|
130
135
|
|
@@ -132,14 +137,22 @@ Book.find( { title: /title/ }, { projection: {_id: 0} } ).each do |book|
|
|
132
137
|
p book
|
133
138
|
end
|
134
139
|
|
135
|
-
|
140
|
+
Book.where( title: /title/ ).select( _id: 0 ).each do |book|
|
141
|
+
p book
|
142
|
+
end
|
143
|
+
|
144
|
+
Book.select( _id: 0 )[0, 5].each do |book|
|
145
|
+
p book
|
146
|
+
end
|
147
|
+
|
148
|
+
pp Book.select( :title, :price, :size )[5, 5].all
|
136
149
|
----
|
137
150
|
|
138
151
|
=== Update document
|
139
152
|
|
140
153
|
[source,ruby]
|
141
154
|
----
|
142
|
-
book = Book.
|
155
|
+
book = Book.where( title: "title 1" ).first
|
143
156
|
book.title = "title 1 [update]"
|
144
157
|
book.save
|
145
158
|
----
|
@@ -148,7 +161,7 @@ book.save
|
|
148
161
|
|
149
162
|
[source,ruby]
|
150
163
|
----
|
151
|
-
book = Book.
|
164
|
+
book = Book.where( title: "title 1" ).first
|
152
165
|
book.delete
|
153
166
|
----
|
154
167
|
|
@@ -158,7 +171,7 @@ book.delete
|
|
158
171
|
|
159
172
|
[source,ruby]
|
160
173
|
----
|
161
|
-
Mongous.connect!( hosts_or_uri = nil, **
|
174
|
+
Mongous.connect!( hosts_or_uri = nil, **options )
|
162
175
|
----
|
163
176
|
|
164
177
|
* Result:
|
@@ -166,23 +179,38 @@ Mongous.connect!( hosts_or_uri = nil, **opts )
|
|
166
179
|
|
167
180
|
* Parameter:
|
168
181
|
** hosts_or_uri: Array of hosts, or URI (default: ["localhost:21017"])
|
169
|
-
**
|
182
|
+
** options: Options.
|
170
183
|
*** file: Path to database configuration file.
|
171
184
|
*** mode: Execution mode. (default: "development")
|
172
185
|
*** database: Database name. (default: "test")
|
173
|
-
***
|
186
|
+
*** Other optional arguments for Mongo::Client.new.
|
174
187
|
|
175
188
|
=== Connect database.
|
176
189
|
|
177
190
|
[source,ruby]
|
178
191
|
----
|
179
|
-
Mongous.connect( hosts_or_uri = nil, **
|
192
|
+
Mongous.connect( hosts_or_uri = nil, **options )
|
193
|
+
----
|
194
|
+
|
195
|
+
* Result:
|
196
|
+
** Mongo::Client instance.
|
197
|
+
|
198
|
+
=== Define collection operate class with default settings.
|
199
|
+
|
200
|
+
[source,ruby]
|
201
|
+
----
|
202
|
+
Mongous.document!( *names, **options )
|
180
203
|
----
|
181
204
|
|
182
205
|
* Result:
|
183
|
-
**
|
206
|
+
** nil.
|
184
207
|
|
185
|
-
|
208
|
+
* Parameter:
|
209
|
+
** names: Collection names. (String or Symbol)
|
210
|
+
** options: Options.
|
211
|
+
*** timestamp: If true then add fields :created_at, :updated_at.
|
212
|
+
|
213
|
+
=== Include document functions into collection operate class.
|
186
214
|
|
187
215
|
[source,ruby]
|
188
216
|
----
|
@@ -193,42 +221,97 @@ include Mongous::Document
|
|
193
221
|
|
194
222
|
[source,ruby]
|
195
223
|
----
|
196
|
-
|
224
|
+
self.client=( client )
|
197
225
|
----
|
198
226
|
|
199
227
|
* Result:
|
200
|
-
**
|
228
|
+
** Mongo::Client instance.
|
201
229
|
|
202
230
|
* Parameter:
|
203
231
|
** client: Mongo::Client instance.
|
204
232
|
|
233
|
+
=== Get binded database.
|
234
|
+
|
235
|
+
[source,ruby]
|
236
|
+
----
|
237
|
+
self.client
|
238
|
+
----
|
239
|
+
|
240
|
+
* Result:
|
241
|
+
** Mongo::Client instance.
|
242
|
+
|
243
|
+
* Parameter:
|
244
|
+
** None.
|
245
|
+
|
246
|
+
=== Bind another collection.
|
247
|
+
|
248
|
+
[source,ruby]
|
249
|
+
----
|
250
|
+
self.collection_name=( _collection_name )
|
251
|
+
----
|
252
|
+
|
253
|
+
* Result:
|
254
|
+
** Collection name string.
|
255
|
+
|
256
|
+
* Parameter:
|
257
|
+
** collection_name: Collection name.
|
258
|
+
|
259
|
+
=== Get binded collection name.
|
260
|
+
|
261
|
+
[source,ruby]
|
262
|
+
----
|
263
|
+
self.collection_name
|
264
|
+
----
|
265
|
+
|
266
|
+
* Result:
|
267
|
+
** Collection name string.
|
268
|
+
|
269
|
+
* Parameter:
|
270
|
+
** None.
|
271
|
+
|
272
|
+
=== Get collection.
|
273
|
+
|
274
|
+
[source,ruby]
|
275
|
+
----
|
276
|
+
self.collection( collection_name = nil )
|
277
|
+
----
|
278
|
+
|
279
|
+
* Result:
|
280
|
+
** Mongo::Collection instance.
|
281
|
+
|
282
|
+
* Parameter:
|
283
|
+
** collection_name: Tempolary collection name.
|
284
|
+
|
205
285
|
=== Declare document structure.
|
206
286
|
|
207
287
|
[source,ruby]
|
208
288
|
----
|
209
|
-
field(
|
289
|
+
self.field( symbol, *attrs, **items )
|
210
290
|
----
|
211
291
|
|
212
292
|
* Parameter:
|
213
|
-
**
|
293
|
+
** symbol: Field name.
|
214
294
|
** attrs: Field attributes.
|
215
295
|
*** Class: Class for field verification.
|
216
296
|
*** Proc: Proc for field verification.
|
217
297
|
*** Range: Range for field verification.
|
218
298
|
*** Array: Array for field verification.
|
219
|
-
*** Symbol: Special
|
299
|
+
*** Symbol: Special directive symbol.
|
220
300
|
**** must: Not nil nor empty.
|
221
|
-
**
|
301
|
+
** items: Operation when saving.
|
302
|
+
*** default: Value or proc when undefined.
|
303
|
+
*** create: Value or proc when saving a new document.
|
304
|
+
*** update: Value or proc when saving update document.
|
222
305
|
|
223
306
|
=== Verify before save or assignment action.
|
224
307
|
|
225
308
|
[source,ruby]
|
226
309
|
----
|
227
|
-
verify( *
|
310
|
+
self.verify( *directives, &block )
|
228
311
|
----
|
229
312
|
|
230
313
|
* Parameter:
|
231
|
-
**
|
314
|
+
** directives: Special directive symbol.
|
232
315
|
*** strict: Verify that it is a defined item name.
|
233
316
|
** block: Describe the content that verifies each item value and returns the truth.
|
234
317
|
|
@@ -236,18 +319,18 @@ verify( *syms, &block )
|
|
236
319
|
|
237
320
|
[source,ruby]
|
238
321
|
----
|
239
|
-
index( *
|
322
|
+
self.index( *symbols, **options )
|
240
323
|
----
|
241
324
|
|
242
325
|
* Parameter:
|
243
|
-
**
|
244
|
-
**
|
326
|
+
** symbols: Field names.
|
327
|
+
** options: Options for Mongo::Collection#indexes().
|
245
328
|
|
246
329
|
=== Verify field value is not nil nor empty.
|
247
330
|
|
248
331
|
[source,ruby]
|
249
332
|
----
|
250
|
-
having?( label )
|
333
|
+
self.having?( label )
|
251
334
|
----
|
252
335
|
|
253
336
|
* Result:
|
@@ -256,6 +339,161 @@ having?( label )
|
|
256
339
|
* Parameter:
|
257
340
|
** label: Field label for method call.
|
258
341
|
|
342
|
+
=== Name the search condition.
|
343
|
+
|
344
|
+
[source,ruby]
|
345
|
+
----
|
346
|
+
self.filter( symbol, filter_or_cond )
|
347
|
+
----
|
348
|
+
|
349
|
+
* Parameter:
|
350
|
+
** symbol: Filter name.
|
351
|
+
** filter_or_cond: Filter or search criteria.
|
352
|
+
|
353
|
+
=== Select output fields.
|
354
|
+
|
355
|
+
[source,ruby]
|
356
|
+
----
|
357
|
+
Mongous::Document.select( *keys, **kwargs )
|
358
|
+
Mongous::Filter#select( *keys, **kwargs )
|
359
|
+
----
|
360
|
+
|
361
|
+
* Result:
|
362
|
+
** Mongous::Filter instance.
|
363
|
+
|
364
|
+
* Parameter:
|
365
|
+
** keys: Field symbols.
|
366
|
+
** kwargs: Field symbols and values.
|
367
|
+
|
368
|
+
=== Search condition.
|
369
|
+
|
370
|
+
[source,ruby]
|
371
|
+
----
|
372
|
+
Mongous::Document.where( filter = nil, **conditions )
|
373
|
+
Mongous::Filter#where( filter = nil, **conditions )
|
374
|
+
----
|
375
|
+
|
376
|
+
* Result:
|
377
|
+
** Mongous::Filter instance.
|
378
|
+
|
379
|
+
* Parameter:
|
380
|
+
** filter: Filter name symbol, or filter instance.
|
381
|
+
** conditions: Search criteria.
|
382
|
+
|
383
|
+
=== NOT search condition.
|
384
|
+
|
385
|
+
[source,ruby]
|
386
|
+
----
|
387
|
+
Mongous::Document.not( filter = nil, **conditions )
|
388
|
+
Mongous::Filter#not( filter = nil, **conditions )
|
389
|
+
----
|
390
|
+
|
391
|
+
* Result:
|
392
|
+
** Mongous::Filter instance.
|
393
|
+
|
394
|
+
* Parameter:
|
395
|
+
** filter: Filter name symbol, or filter instance.
|
396
|
+
** conditions: Search criteria.
|
397
|
+
|
398
|
+
=== AND search condition.
|
399
|
+
|
400
|
+
[source,ruby]
|
401
|
+
----
|
402
|
+
Mongous::Document.and( *filters )
|
403
|
+
Mongous::Filter#and( *filters )
|
404
|
+
----
|
405
|
+
|
406
|
+
* Result:
|
407
|
+
** Mongous::Filter instance.
|
408
|
+
|
409
|
+
* Parameter:
|
410
|
+
** filters: Filter name symbol, or filter instance.
|
411
|
+
|
412
|
+
=== OR search condition.
|
413
|
+
|
414
|
+
[source,ruby]
|
415
|
+
----
|
416
|
+
Mongous::Document.or( *filters )
|
417
|
+
Mongous::Filter#or( *filters )
|
418
|
+
----
|
419
|
+
|
420
|
+
* Result:
|
421
|
+
** Mongous::Filter instance.
|
422
|
+
|
423
|
+
* Parameter:
|
424
|
+
** filters: Field name symbol, or filter instance.
|
425
|
+
|
426
|
+
=== Create document.
|
427
|
+
|
428
|
+
[source,ruby]
|
429
|
+
----
|
430
|
+
Mongous::Document.create( **doc )
|
431
|
+
----
|
432
|
+
|
433
|
+
* Result:
|
434
|
+
** nil.
|
435
|
+
|
436
|
+
* Parameter:
|
437
|
+
** doc: Keyword arguments.
|
438
|
+
|
439
|
+
=== Save document.
|
440
|
+
|
441
|
+
[source,ruby]
|
442
|
+
----
|
443
|
+
Mongous::Document#save
|
444
|
+
----
|
445
|
+
|
446
|
+
* Result:
|
447
|
+
** nil.
|
448
|
+
|
449
|
+
=== Convert document to Hash.
|
450
|
+
|
451
|
+
[source,ruby]
|
452
|
+
----
|
453
|
+
Mongous::Document#to_hash
|
454
|
+
----
|
455
|
+
|
456
|
+
* Result:
|
457
|
+
** Hash object.
|
458
|
+
|
459
|
+
=== Convert document to JSON.
|
460
|
+
|
461
|
+
[source,ruby]
|
462
|
+
----
|
463
|
+
Mongous::Document#to_json
|
464
|
+
----
|
465
|
+
|
466
|
+
* Result:
|
467
|
+
** JSON String.
|
468
|
+
|
469
|
+
=== Read document field.
|
470
|
+
|
471
|
+
[source,ruby]
|
472
|
+
----
|
473
|
+
Mongous::Document#[]( field_name )
|
474
|
+
Mongous::Document#field_name
|
475
|
+
----
|
476
|
+
|
477
|
+
* Result:
|
478
|
+
** field_value.
|
479
|
+
|
480
|
+
* Parameter:
|
481
|
+
** field_name: Field name.
|
482
|
+
|
483
|
+
=== Write document field.
|
484
|
+
|
485
|
+
[source,ruby]
|
486
|
+
----
|
487
|
+
Mongous::Document#[]=( field_name, field_value )
|
488
|
+
Mongous::Document#field_name = field_value
|
489
|
+
----
|
490
|
+
|
491
|
+
* Result:
|
492
|
+
** field_value.
|
493
|
+
|
494
|
+
* Parameter:
|
495
|
+
** field_name: Field name.
|
496
|
+
** field_value: Field value.
|
259
497
|
|
260
498
|
== Contributing
|
261
499
|
|