mongous 0.1.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +216 -44
  3. data/README.ja.adoc +217 -45
  4. data/lib/mongous/base.rb +30 -0
  5. data/lib/mongous/document.rb +75 -32
  6. data/lib/mongous/extention.rb +55 -46
  7. data/lib/mongous/filter.rb +82 -60
  8. data/lib/mongous/version.rb +1 -1
  9. data/sample/connect_auto_2.rb +2 -1
  10. data/sample/connect_default_2.rb +2 -1
  11. data/sample/connect_environ_2.rb +2 -1
  12. data/sample/connect_loadfile_2.rb +2 -1
  13. data/sample/declare_compact_1.rb +7 -7
  14. data/sample/declare_label_1.rb +10 -6
  15. data/sample/declare_ndex_1.rb +9 -5
  16. data/sample/declare_ndex_2.rb +10 -6
  17. data/sample/declare_strict_1.rb +14 -10
  18. data/sample/declare_strict_2.rb +5 -3
  19. data/sample/{multi_docs_1.rb → multi_collection_1.rb} +0 -0
  20. data/sample/multi_collection_2.rb +63 -0
  21. data/sample/multi_collection_3.rb +26 -0
  22. data/sample/query_basic_1.rb +3 -1
  23. data/sample/query_basic_2.rb +5 -3
  24. data/sample/query_basic_3.rb +2 -3
  25. data/sample/query_basic_4.rb +3 -4
  26. data/sample/query_basic_5.rb +2 -3
  27. data/sample/query_detail_1.rb +3 -1
  28. data/sample/query_detail_2.rb +3 -1
  29. data/sample/query_detail_3.rb +5 -3
  30. data/sample/{query_basic_6.rb → query_filter_1.rb} +8 -5
  31. data/sample/query_filter_2.rb +50 -0
  32. data/sample/{query_super_1.rb → query_find_1.rb} +0 -1
  33. data/sample/query_projection_1.rb +5 -8
  34. data/sample/query_skip_limit_1.rb +47 -0
  35. data/sample/query_skip_limit_2.rb +49 -0
  36. data/sample/query_sort_order_1.rb +46 -0
  37. data/sample/save_basic_1.rb +1 -2
  38. data/sample/save_basic_2.rb +1 -2
  39. data/sample/save_basic_3.rb +1 -2
  40. data/sample/save_detail_1.rb +7 -4
  41. data/sample/save_detail_2.rb +7 -4
  42. data/sample/save_detail_3.rb +11 -8
  43. data/sample/save_verify_1.rb +7 -4
  44. data/sample/save_verify_3.rb +1 -1
  45. data/sample/save_verify_5.rb +3 -3
  46. data/sample/save_verify_6.rb +3 -3
  47. data/sample/save_verify_7.rb +23 -0
  48. data/sample/update_basic_1.rb +13 -0
  49. data/sample/zap_basic_2.rb +2 -2
  50. data/sample/zap_basic_3.rb +2 -2
  51. data/sample/zbenchmark_search_1.rb +110 -0
  52. data/sample/zbenchmark_search_2.rb +110 -0
  53. metadata +15 -10
  54. data/sample/multi_docs_2.rb +0 -58
  55. data/sample/query_limit_1.rb +0 -44
  56. data/sample/query_order_1.rb +0 -49
  57. data/sample/template_article.rb +0 -5
  58. data/sample/template_person.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6616ba889ba858cb82f877ba24bb755ec8e205aa9b8c70738864ce855d5ebb52
4
- data.tar.gz: d733c6a2bcaeec6725f51f2e7638f8fd9cd99c7decfe568fcf0b80ee98cd3ebb
3
+ metadata.gz: e316aaf87661c4fe27054cdbaef39ba7f21f24432b3752ffb1cb308894de5272
4
+ data.tar.gz: 5597f0a55efc8d1afa45e6bf9ee93ea77653d7161d12e776bc979a6543b2c94a
5
5
  SHA512:
6
- metadata.gz: 7ae43077eadf5806fe60e766050a58dfb926de35ebe50f7af0e2f7a37b3b9675112cdd3a80ca95837c93513b0286154caab863f125b3f33d0e4958ed14b6237a
7
- data.tar.gz: 2e21b03862a403e6839ca2c6e569879c06e3c6f3f5e6fb63409ee6799a0257443a8e2c6612bf4a35956aa4cd931f108c2c3640c8a71c8749fa90b8913b7ac98d
6
+ metadata.gz: 4dc7ea514d20c8fc9ed8eaed86b4feb293df3e713a1db3acb60eb46abd61f28f0dbeeb9a68b9ac1442b6b690b3e4b12653bce102d007d912e6c08a700bd964ef
7
+ data.tar.gz: 44cfdfa61226dbfcaa40d846bfa2f00a76137b297141cbf4ea7318abdcc999271cddafd9e65bc5ea5d69745674da87aa719c2b34968d40968762d3f9e0855ced
@@ -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
- * Item default value can be described in the block.
9
- * Item constraints can be described by Array, Range, and Proc.
10
- * Checks that constraints are met when saving and setting values.
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
 
@@ -37,10 +39,7 @@ Or install it yourself as:
37
39
  require "mongous"
38
40
 
39
41
  Mongous.connect!
40
-
41
- class Book
42
- include Mongous::Document
43
- end
42
+ Mongous.attach! :Book
44
43
  ----
45
44
 
46
45
  === Detail declaration
@@ -54,15 +53,19 @@ Mongous.connect! ["localhost:27017"], database: "test"
54
53
  class Book
55
54
  include Mongous::Document
56
55
 
57
- field :title, String, :must
56
+ field :title, String, :must
58
57
  field :author, String
59
58
  field :publisher, String
60
- field :style, String, ["A4","B5","A5","B6"]
61
- field :price, Integer, (0..1_000_000)
62
- field :page, Integer, proc{ page % 4 == 0 }
63
- field :publish_at, Date, &proc{ Date.today }
64
- field :isbn, String, proc{ isbn? }
65
- field :lang, String, &proc{ "ja" }
59
+ field :style, String, %w[hardcover, softcover, paperback]
60
+ field :size, String, /[AB]\d/
61
+ field :price, Integer, (0..1_000_000)
62
+ field :page, Integer, proc{ page % 4 == 0 }
63
+ field :isbn, String, proc{ isbn? }
64
+ field :lang, String, default: "en"
65
+ field :created_at, Time, create: proc{ Time.now }
66
+ field :updated_at, Time, update: proc{ Time.now }
67
+
68
+ filter :foobar, {title: /foobar/}
66
69
 
67
70
  verify :strict
68
71
  verify do
@@ -84,13 +87,13 @@ end
84
87
  book = Book.new
85
88
  book.title = "title 1"
86
89
  book.price = 1000
87
- book.style = "A4"
90
+ book.size = "A4"
88
91
  book.save
89
92
 
90
- book = Book.new( title: "title 2", price: 2000, style: "A5" )
93
+ book = Book.new( title: "title 2", price: 2000, size: "A5" )
91
94
  book.save
92
95
 
93
- doc = { title: "title 3", price: 3000, style: "A6" }
96
+ doc = { title: "title 3", price: 3000, size: "A6" }
94
97
  Book.create( **doc )
95
98
  ----
96
99
 
@@ -100,44 +103,48 @@ Book.create( **doc )
100
103
  ----
101
104
  pp books = Book.all
102
105
 
103
- p book = Book.filter( title: "title 1" ).first
106
+ p book = Book.where( title: "title 1" ).first
104
107
 
105
- books = Book.filter( title: /title/ ).all
108
+ books = Book.where( title: /title/ ).all
106
109
  books.each do |book|
107
110
  p book
108
111
  end
109
112
 
110
- Book.filter( title: /title/ ).projection( _id: 0 ).each do |book|
113
+ Book.where( title: /title/ ).projection( _id: 0 ).each do |book|
111
114
  p book
112
115
  end
113
116
 
114
- Book.filter( price: (1..2000), style: ["A4","A5"] ).each do |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.filter( title: /title/ )
119
- filter2 = Book.filter( price: (1..2000) )
120
- filter3 = Book.filter( style: ["A4","A5"] )
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, filter2 ).each do |book|
129
+ Book.and( filter1, filter3 ).each do |book|
125
130
  p book
126
131
  end
127
- Book.or( filter1, filter3 ).each do |book|
132
+ Book.or( filter2, filter4 ).each do |book|
128
133
  p book
129
134
  end
130
135
 
131
- Book.find( {}, { projection: {_id: 0} } ).each do |book|
136
+ Book.find( { title: /title/ }, { projection: {_id: 0} } ).each do |book|
132
137
  p book
133
138
  end
139
+
140
+ pp Book.where( title: /title/ )[0, 5].all
134
141
  ----
135
142
 
136
143
  === Update document
137
144
 
138
145
  [source,ruby]
139
146
  ----
140
- book = Book.filter( title: "title 1" ).first
147
+ book = Book.where( title: "title 1" ).first
141
148
  book.title = "title 1 [update]"
142
149
  book.save
143
150
  ----
@@ -146,7 +153,7 @@ book.save
146
153
 
147
154
  [source,ruby]
148
155
  ----
149
- book = Book.filter( title: "title 1" ).first
156
+ book = Book.where( title: "title 1" ).first
150
157
  book.delete
151
158
  ----
152
159
 
@@ -156,7 +163,7 @@ book.delete
156
163
 
157
164
  [source,ruby]
158
165
  ----
159
- Mongous.connect!( hosts_or_uri = nil, **opts )
166
+ Mongous.connect!( hosts_or_uri = nil, **options )
160
167
  ----
161
168
 
162
169
  * Result:
@@ -164,56 +171,98 @@ Mongous.connect!( hosts_or_uri = nil, **opts )
164
171
 
165
172
  * Parameter:
166
173
  ** hosts_or_uri: Array of hosts, or URI (default: ["localhost:21017"])
167
- ** opts: Options.
174
+ ** options: Options.
168
175
  *** file: Path to database configuration file.
169
176
  *** mode: Execution mode. (default: "development")
170
177
  *** database: Database name. (default: "test")
171
- *** * Other optional arguments for Mongo::Client.new.
178
+ *** Other optional arguments for Mongo::Client.new.
172
179
 
173
180
  === Connect database.
174
181
 
175
182
  [source,ruby]
176
183
  ----
177
- Mongous.connect( hosts_or_uri = nil, **opts )
184
+ Mongous.connect( hosts_or_uri = nil, **options )
178
185
  ----
179
186
 
180
187
  * Result:
181
- ** Mongo::Client.
188
+ ** Mongo::Client instance.
189
+
190
+ === Define collection operate class with default settings.
191
+
192
+ [source,ruby]
193
+ ----
194
+ Mongous.attach!( *names )
195
+ ----
196
+
197
+ * Result:
198
+ ** nil.
182
199
 
183
- === Include document functions.
200
+ * Parameter:
201
+ ** names: Collection names. (String or Symbol)
202
+
203
+ === Include document functions into collection operate class.
184
204
 
185
205
  [source,ruby]
186
206
  ----
187
207
  include Mongous::Document
188
208
  ----
189
209
 
210
+ === Bind another database.
211
+
212
+ [source,ruby]
213
+ ----
214
+ self.client=( _client )
215
+ ----
216
+
217
+ * Result:
218
+ ** Mongo::Client instance.
219
+
220
+ * Parameter:
221
+ ** client: Mongo::Client instance.
222
+
223
+ === Bind another collection.
224
+
225
+ [source,ruby]
226
+ ----
227
+ self.collection_name=( _collection_name )
228
+ ----
229
+
230
+ * Result:
231
+ ** Collection name string.
232
+
233
+ * Parameter:
234
+ ** collection_name: Collection name.
235
+
190
236
  === Declare document structure.
191
237
 
192
238
  [source,ruby]
193
239
  ----
194
- field( label, *attrs, &block )
240
+ field( symbol, *attrs, **items )
195
241
  ----
196
242
 
197
243
  * Parameter:
198
- ** label: Field label symbol.
244
+ ** symbol: Field name.
199
245
  ** attrs: Field attributes.
200
246
  *** Class: Class for field verification.
201
247
  *** Proc: Proc for field verification.
202
248
  *** Range: Range for field verification.
203
249
  *** Array: Array for field verification.
204
- *** Symbol: Special delectives.
250
+ *** Symbol: Special directive symbol.
205
251
  **** must: Not nil nor empty.
206
- ** block: Returning default value.
252
+ ** items: Operation when saving.
253
+ *** default: Value or proc when undefined.
254
+ *** create: Value or proc when saving a new document.
255
+ *** update: Value or proc when saving update document.
207
256
 
208
257
  === Verify before save or assignment action.
209
258
 
210
259
  [source,ruby]
211
260
  ----
212
- verify( *syms, &block )
261
+ verify( *directives, &block )
213
262
  ----
214
263
 
215
264
  * Parameter:
216
- ** syms: Conditional symbols.
265
+ ** directives: Special directive symbol.
217
266
  *** strict: Verify that it is a defined item name.
218
267
  ** block: Describe the content that verifies each item value and returns the truth.
219
268
 
@@ -221,12 +270,12 @@ verify( *syms, &block )
221
270
 
222
271
  [source,ruby]
223
272
  ----
224
- index( *syms, **opts )
273
+ index( *symbols, **options )
225
274
  ----
226
275
 
227
276
  * Parameter:
228
- ** syms: Field label symbols.
229
- ** opts: Options for Mongo::Collection#indexes().
277
+ ** symbols: Field names.
278
+ ** options: Options for Mongo::Collection#indexes().
230
279
 
231
280
  === Verify field value is not nil nor empty.
232
281
 
@@ -241,6 +290,129 @@ having?( label )
241
290
  * Parameter:
242
291
  ** label: Field label for method call.
243
292
 
293
+ === Name the search condition.
294
+
295
+ [source,ruby]
296
+ ----
297
+ filter( symbol, filter_or_cond )
298
+ ----
299
+
300
+ * Parameter:
301
+ ** symbol: Filter name.
302
+ ** filter_or_cond: Filter or search criteria.
303
+
304
+ === Search condition.
305
+
306
+ [source,ruby]
307
+ ----
308
+ Collection operate class #where( filter = nil, **conditions )
309
+ ----
310
+
311
+ * Result:
312
+ ** Filter instance.
313
+
314
+ * Parameter:
315
+ ** filter: Filter name symbol, or filter instance.
316
+ ** conditions: Search criteria.
317
+
318
+ === NOT search condition.
319
+
320
+ [source,ruby]
321
+ ----
322
+ Collection operate class #not( filter = nil, **conditions )
323
+ ----
324
+
325
+ * Result:
326
+ ** Filter instance.
327
+
328
+ * Parameter:
329
+ ** filter: Filter name symbol, or filter instance.
330
+ ** conditions: Search criteria.
331
+
332
+ === AND search condition.
333
+
334
+ [source,ruby]
335
+ ----
336
+ Collection operate class #and( *filters )
337
+ ----
338
+
339
+ * Result:
340
+ ** Filter instance.
341
+
342
+ * Parameter:
343
+ ** filters: Filter name symbol, or filter instance.
344
+
345
+ === OR search condition.
346
+
347
+ [source,ruby]
348
+ ----
349
+ Collection operate class #or( *filters )
350
+ ----
351
+
352
+ * Result:
353
+ ** Filter instance.
354
+
355
+ * Parameter:
356
+ ** filters: Field name symbol, or filter instance.
357
+
358
+ === Save document.
359
+
360
+ [source,ruby]
361
+ ----
362
+ Document operate object #save
363
+ ----
364
+
365
+ * Result:
366
+ ** nil.
367
+
368
+ === Convert document to Hash.
369
+
370
+ [source,ruby]
371
+ ----
372
+ Document operate object #to_hash
373
+ ----
374
+
375
+ * Result:
376
+ ** Hash object.
377
+
378
+ === Convert document to JSON.
379
+
380
+ [source,ruby]
381
+ ----
382
+ Document operate object #to_hash
383
+ ----
384
+
385
+ * Result:
386
+ ** JSON String.
387
+
388
+ === Read document field.
389
+
390
+ [source,ruby]
391
+ ----
392
+ Document operate object #[]( field_name )
393
+ Document operate object #field_name
394
+ ----
395
+
396
+ * Result:
397
+ ** field_value.
398
+
399
+ * Parameter:
400
+ ** field_name: Field name.
401
+
402
+ === Write document field.
403
+
404
+ [source,ruby]
405
+ ----
406
+ Document operate object #[]=( field_name, field_value )
407
+ Document operate object #field_name = field_value
408
+ ----
409
+
410
+ * Result:
411
+ ** field_value.
412
+
413
+ * Parameter:
414
+ ** field_name: Field name.
415
+ ** field_value: Field value.
244
416
 
245
417
  == Contributing
246
418
 
@@ -4,10 +4,12 @@
4
4
 
5
5
  == 特徴
6
6
 
7
- * 組込みと標準添付を除いて、mongo driver と bson のみに依存する軽いライブラリである。
8
- * 項目デフォルト値をブロックで記述できる.
9
- * 項目制約条件を Array, Range, Proc で記述できる.
10
- * 保存時および値設定時に制約条件を満たすか検査する.
7
+ * 組込みと標準添付を除いて、mongo driver と bson のみに依存する軽いライブラリである.
8
+ * ドキュメント項目の制約条件を Array, Range, Regexp, Proc インスタンスまたは基本クラスで記述できる.
9
+ * ドキュメント保存時に制約条件を満たすか検査する.
10
+ * ドキュメントの項目値設定時に制約条件を満たすか検査する.
11
+ * ドキュメントの未定義項目の内容を値または Proc で記述できる.
12
+ * ドキュメント作成時および更新時の項目内容を値または Proc で記述できる.
11
13
 
12
14
  == 導入
13
15
 
@@ -30,17 +32,14 @@ gem 'mongous'
30
32
 
31
33
  == 使い方
32
34
 
33
- === 簡素な定義
35
+ === 簡潔な定義
34
36
 
35
37
  [source,ruby]
36
38
  ----
37
39
  require "mongous"
38
40
 
39
41
  Mongous.connect!
40
-
41
- class Book
42
- include Mongous::Document
43
- end
42
+ Mongous.attach! :Book
44
43
  ----
45
44
 
46
45
  === 詳細な定義
@@ -54,15 +53,19 @@ Mongous.connect! ["localhost:27017"], database: "test"
54
53
  class Book
55
54
  include Mongous::Document
56
55
 
57
- field :title, String, :must
56
+ field :title, String, :must
58
57
  field :author, String
59
58
  field :publisher, String
60
- field :style, String, ["A4","B5","A5","B6"]
61
- field :price, Integer, (0..1_000_000)
62
- field :page, Integer, proc{ page % 4 == 0 }
63
- field :publish_at, Date, &proc{ Date.today }
64
- field :isbn, String, proc{ isbn? }
65
- field :lang, String, &proc{ "ja" }
59
+ field :style, String, %w[hardcover, softcover, paperback]
60
+ field :size, String, /[AB]\d/
61
+ field :price, Integer, (0..1_000_000)
62
+ field :page, Integer, proc{ page % 4 == 0 }
63
+ field :isbn, String, proc{ isbn? }
64
+ field :lang, String, default: "en"
65
+ field :created_at, Time, create: proc{ Time.now }
66
+ field :updated_at, Time, update: proc{ Time.now }
67
+
68
+ filter :foobar, {title: /foobar/}
66
69
 
67
70
  verify :strict
68
71
  verify do
@@ -84,13 +87,13 @@ end
84
87
  book = Book.new
85
88
  book.title = "title 1"
86
89
  book.price = 1000
87
- book.style = "A4"
90
+ book.size = "A4"
88
91
  book.save
89
92
 
90
- book = Book.new( title: "title 2", price: 2000, style: "A5" )
93
+ book = Book.new( title: "title 2", price: 2000, size: "A5" )
91
94
  book.save
92
95
 
93
- doc = { title: "title 3", price: 3000, style: "A6" }
96
+ doc = { title: "title 3", price: 3000, size: "A6" }
94
97
  Book.create( **doc )
95
98
  ----
96
99
 
@@ -100,44 +103,48 @@ Book.create( **doc )
100
103
  ----
101
104
  pp books = Book.all
102
105
 
103
- p book = Book.filter( title: "title 1" ).first
106
+ p book = Book.where( title: "title 1" ).first
104
107
 
105
- books = Book.filter( title: /title/ ).all
108
+ books = Book.where( title: /title/ ).all
106
109
  books.each do |book|
107
110
  p book
108
111
  end
109
112
 
110
- Book.filter( title: /title/ ).projection( _id: 0 ).each do |book|
113
+ Book.where( title: /title/ ).projection( _id: 0 ).each do |book|
111
114
  p book
112
115
  end
113
116
 
114
- Book.filter( price: (1..2000), style: ["A4","A5"] ).each do |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.filter( title: /title/ )
119
- filter2 = Book.filter( price: (1..2000) )
120
- filter3 = Book.filter( style: ["A4","A5"] )
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, filter2 ).each do |book|
129
+ Book.and( filter1, filter3 ).each do |book|
125
130
  p book
126
131
  end
127
- Book.or( filter1, filter3 ).each do |book|
132
+ Book.or( filter2, filter4 ).each do |book|
128
133
  p book
129
134
  end
130
135
 
131
- Book.find( {}, { projection: {_id: 0} } ).each do |book|
136
+ Book.find( { title: /title/ }, { projection: {_id: 0} } ).each do |book|
132
137
  p book
133
138
  end
139
+
140
+ pp Book.where( title: /title/ )[0, 5].all
134
141
  ----
135
142
 
136
143
  === ドキュメント更新
137
144
 
138
145
  [source,ruby]
139
146
  ----
140
- book = Book.filter( title: "title 1" ).first
147
+ book = Book.where( title: "title 1" ).first
141
148
  book.title = "title 1 [update]"
142
149
  book.save
143
150
  ----
@@ -146,7 +153,7 @@ book.save
146
153
 
147
154
  [source,ruby]
148
155
  ----
149
- book = Book.filter( title: "title 1" ).first
156
+ book = Book.where( title: "title 1" ).first
150
157
  book.delete
151
158
  ----
152
159
 
@@ -156,7 +163,7 @@ book.delete
156
163
 
157
164
  [source,ruby]
158
165
  ----
159
- Mongous.connect!( hosts_or_uri = nil, **opts )
166
+ Mongous.connect!( hosts_or_uri = nil, **options )
160
167
  ----
161
168
 
162
169
  * Result:
@@ -164,38 +171,77 @@ Mongous.connect!( hosts_or_uri = nil, **opts )
164
171
 
165
172
  * Parameter:
166
173
  ** hosts_or_uri: ホスト配列または URI (default: ["localhost:21017"])
167
- ** opts: オプション
174
+ ** options: オプション
168
175
  *** file: データベース構成定義ファイルへのパス
169
176
  *** mode: 実行モード (default: "development")
170
177
  *** database: データベース名 (default: "test")
171
- *** * Mongo::Client.new のその他オプション引数
178
+ *** Mongo::Client.new のその他オプション引数
172
179
 
173
180
  === データベースに接続する
174
181
 
175
182
  [source,ruby]
176
183
  ----
177
- Mongous.connect( hosts_or_uri = nil, **opts )
184
+ Mongous.connect( hosts_or_uri = nil, **options )
178
185
  ----
179
186
 
180
187
  * Result:
181
- ** Mongo::Client.
188
+ ** Mongo::Client インスタンス.
189
+
190
+ === コレクション操作クラスをデフォルト設定で定義する.
191
+
192
+ [source,ruby]
193
+ ----
194
+ Mongous.attach!( *names )
195
+ ----
196
+
197
+ * Result:
198
+ ** nil.
182
199
 
183
- === ドキュメントの機能を取り入れる.
200
+ * Parameter:
201
+ ** names: コレクション名. (String または Symbol)
202
+
203
+ === コレクション操作クラスにドキュメントの機能を取り入れる.
184
204
 
185
205
  [source,ruby]
186
206
  ----
187
207
  include Mongous::Document
188
208
  ----
189
209
 
210
+ === 別のデータベースを割り当てる.
211
+
212
+ [source,ruby]
213
+ ----
214
+ self.client=( client )
215
+ ----
216
+
217
+ * Result:
218
+ ** Mongo::Client インスタンス.
219
+
220
+ * Parameter:
221
+ ** client: Mongo::Client インスタンス.
222
+
223
+ === 別のコレクションを割り当てる.
224
+
225
+ [source,ruby]
226
+ ----
227
+ self.collection_name=( collection_name )
228
+ ----
229
+
230
+ * Result:
231
+ ** Collection name 文字列.
232
+
233
+ * Parameter:
234
+ ** collection_name: コレクション名.
235
+
190
236
  === ドキュメントの要素を定義する.
191
237
 
192
238
  [source,ruby]
193
239
  ----
194
- field( label, *attrs, &block )
240
+ field( symbol, *attrs, **items )
195
241
  ----
196
242
 
197
243
  * Parameter:
198
- ** label: 項目名シンボル
244
+ ** symbol: 項目名
199
245
  ** attrs: 項目属性
200
246
  *** Class: 項目検証用 Class
201
247
  *** Proc: 項目検証用 Proc
@@ -203,17 +249,20 @@ field( label, *attrs, &block )
203
249
  *** Array: 項目検証用配列
204
250
  *** Symbol: 特別な指示子
205
251
  **** must: ナル値でも空文字列でもない
206
- ** block: デフォルト値を返す
252
+ ** items: 保存時の操作.
253
+ *** default: 未定義のときの値または Proc.
254
+ *** create: ドキュメントを新規保存するときの値または Proc.
255
+ *** update: ドキュメントを更新するときの値または Proc.
207
256
 
208
257
  === 保存や代入の前にドキュメントの要素を検証する.
209
258
 
210
259
  [source,ruby]
211
260
  ----
212
- verify( *syms, &block )
261
+ verify( *directives, &block )
213
262
  ----
214
263
 
215
264
  * Parameter:
216
- ** syms: 条件シンボル
265
+ ** directives: 条件シンボル
217
266
  *** strict: 定義済み項目名であることを検証する.
218
267
  ** block: 各項目値を検証して真偽を返す内容を記述する.
219
268
 
@@ -221,12 +270,12 @@ verify( *syms, &block )
221
270
 
222
271
  [source,ruby]
223
272
  ----
224
- index( *syms, **opts )
273
+ index( *symbols, **options )
225
274
  ----
226
275
 
227
276
  * Parameter:
228
- ** syms: 項目名シンボル
229
- ** opts: Mongo::Collection#indexes() のオプション.
277
+ ** symbols: 項目名
278
+ ** options: Mongo::Collection#indexes() のオプション.
230
279
 
231
280
  === 項目値がナル値でも空文字列でもないことを検証する.
232
281
 
@@ -241,6 +290,129 @@ having?( label )
241
290
  * Parameter:
242
291
  ** label: メソッド呼び出しする項目名.
243
292
 
293
+ === 検索条件に名前をつける.
294
+
295
+ [source,ruby]
296
+ ----
297
+ filter( symbol, filter_or_cond )
298
+ ----
299
+
300
+ * Parameter:
301
+ ** symbol: 項目名
302
+ ** filter_or_cond: フィルタまたは検索条件
303
+
304
+ === 検索条件.
305
+
306
+ [source,ruby]
307
+ ----
308
+ コレクション操作クラス #where( filter = nil, **conditions )
309
+ ----
310
+
311
+ * Result:
312
+ ** Filter instance.
313
+
314
+ * Parameter:
315
+ ** filter: 項目名またはフィルタインスタンス
316
+ ** conditions: 検索条件
317
+
318
+ === 否定検索条件.
319
+
320
+ [source,ruby]
321
+ ----
322
+ コレクション操作クラス #not( filter = nil, **conditions )
323
+ ----
324
+
325
+ * Result:
326
+ ** Filter instance.
327
+
328
+ * Parameter:
329
+ ** filter: 項目名またはフィルタインスタンス
330
+ ** conditions: 検索条件
331
+
332
+ === 論理積検索条件.
333
+
334
+ [source,ruby]
335
+ ----
336
+ コレクション操作クラス #and( *filters )
337
+ ----
338
+
339
+ * Result:
340
+ ** Filter instance.
341
+
342
+ * Parameter:
343
+ ** filters: 項目名またはフィルタインスタンス
344
+
345
+ === 論理和検索条件.
346
+
347
+ [source,ruby]
348
+ ----
349
+ コレクション操作クラス #or( *filters )
350
+ ----
351
+
352
+ * Result:
353
+ ** Filter instance.
354
+
355
+ * Parameter:
356
+ ** filters: 項目名またはフィルタインスタンス
357
+
358
+ === ドキュメントを保存.
359
+
360
+ [source,ruby]
361
+ ----
362
+ ドキュメント操作オブジェクト #save
363
+ ----
364
+
365
+ * Result:
366
+ ** nil.
367
+
368
+ === ドキュメントをHashに変換.
369
+
370
+ [source,ruby]
371
+ ----
372
+ ドキュメント操作オブジェクト #to_hash
373
+ ----
374
+
375
+ * Result:
376
+ ** Hash object.
377
+
378
+ === ドキュメントをJSONに変換.
379
+
380
+ [source,ruby]
381
+ ----
382
+ ドキュメント操作オブジェクト #to_hash
383
+ ----
384
+
385
+ * Result:
386
+ ** JSON String.
387
+
388
+ === ドキュメントの項目値を読む.
389
+
390
+ [source,ruby]
391
+ ----
392
+ ドキュメント操作オブジェクト #[]( field_name )
393
+ ドキュメント操作オブジェクト #field_name
394
+ ----
395
+
396
+ * Result:
397
+ ** 項目値.
398
+
399
+ * Parameter:
400
+ ** field_name: 項目名.
401
+
402
+ === ドキュメントの項目値を書く.
403
+
404
+ [source,ruby]
405
+ ----
406
+ ドキュメント操作オブジェクト #[]=( field_name, field_value )
407
+ ドキュメント操作オブジェクト #field_name = field_value
408
+ ----
409
+
410
+ * Result:
411
+ ** 項目値.
412
+
413
+ * Parameter:
414
+ ** field_name: 項目名.
415
+ ** field_value: 項目値.
244
416
 
245
417
  == 貢献
246
418