mongoid_monkey 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: 56af6b17c89f409a9fa4995c2bcdf09bead1960b
4
- data.tar.gz: f62b1170ba699b56cbd3eb9ea08019b447fbb176
3
+ metadata.gz: 713cd432161aff92379202903badf76643f5c345
4
+ data.tar.gz: 2a6da7db3fd0fdb03a8828bd761fd93dac98500b
5
5
  SHA512:
6
- metadata.gz: e78fc8da08082c3fd0b123614ee7c296d0aebf133523ebe5acf088ec9f9fb84951bac88a867dfa9fcc4af90b51e8d9138ce86094ce58f097ed3a708db41fe8de
7
- data.tar.gz: cc43215fe1cf22059156da5a002ebac8815aeeaf4997f8a053d48dcf1ceac97df04def42acdd666081ca33eecd4488594b6c5c58e6ac8df0f7af1401075a642e
6
+ metadata.gz: 417de743fe275b6dc78d88eec28ef8120505972e08e5096810f973cf862d9d2df9d150eb308f81c50041643fd4290fe90eae133ef47099a529a0c345cd6b6ca0
7
+ data.tar.gz: 3cbddb3acdd988d96c61a1ed1557057895520288cee81f29fce9ad657bb4e973bae50174ca4f3c0c9fe5db8d6a82ed8b909f8a3f929539e054724834bb250852
@@ -20,8 +20,7 @@ module Moped
20
20
  class Indexes
21
21
 
22
22
  def [](key)
23
- result = database.command(listIndexes: collection_name)
24
- result["cursor"]["firstBatch"].detect do |index|
23
+ list_indexes_command.detect do |index|
25
24
  (index['name'] == key) || (index['key'] == normalize_keys(key))
26
25
  end
27
26
  end
@@ -32,8 +31,16 @@ module Moped
32
31
  database.command(createIndexes: collection_name, indexes: [spec])
33
32
  end
34
33
 
34
+ def each(&block)
35
+ list_indexes_command.each(&block)
36
+ end
37
+
35
38
  protected
36
39
 
40
+ def list_indexes_command
41
+ database.command(listIndexes: collection_name)["cursor"]["firstBatch"]
42
+ end
43
+
37
44
  def normalize_keys(spec)
38
45
  return false if spec.is_a?(String)
39
46
  spec.reduce({}) do |transformed, (key, value)|
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MongoidMonkey
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -84,6 +84,11 @@ if defined?(Moped)
84
84
  it "creates an index with no options" do
85
85
  indexes.create name: 1
86
86
  indexes[name: 1].should_not eq nil
87
+ keys = []
88
+ indexes.each do |idx|
89
+ keys << idx['key']
90
+ end
91
+ keys.should eq([{"_id" => 1}, {"name" => 1}])
87
92
  end
88
93
  end
89
94
 
@@ -113,9 +118,12 @@ if defined?(Moped)
113
118
  describe "#drop" do
114
119
 
115
120
  context "when provided a key" do
121
+ before { session.drop }
116
122
 
117
123
  it "drops the index" do
118
- indexes.create name: 1
124
+ indexes.create(name: 1)["numIndexesAfter"].should eq 2
125
+ indexes.drop(name: 1).should eq true
126
+ indexes.create({name: 1}, {unique: true})["numIndexesAfter"].should eq 2
119
127
  indexes.drop(name: 1).should eq true
120
128
  end
121
129
  end
@@ -132,4 +140,947 @@ if defined?(Moped)
132
140
  end
133
141
  end
134
142
  end
143
+
144
+ class Person
145
+ include Mongoid::Document
146
+
147
+ index age: 1
148
+ index addresses: 1
149
+ index dob: 1
150
+ index name: 1
151
+ index title: 1
152
+ index({ ssn: 1 }, { unique: true })
153
+ end
154
+
155
+ if defined?(Mongoid::Indexes)
156
+
157
+ describe Mongoid::Indexes do
158
+
159
+ describe ".included" do
160
+
161
+ let(:klass) do
162
+ Class.new do
163
+ include Mongoid::Indexes
164
+ end
165
+ end
166
+
167
+ it "adds an index_options accessor" do
168
+ klass.should respond_to(:index_options)
169
+ end
170
+
171
+ it "defaults index_options to empty hash" do
172
+ klass.index_options.should eq({})
173
+ end
174
+ end
175
+
176
+ describe ".remove_indexes" do
177
+
178
+ context "when no database specific options exist" do
179
+
180
+ let(:klass) do
181
+ Person
182
+ end
183
+
184
+ let(:collection) do
185
+ klass.collection
186
+ end
187
+
188
+ before do
189
+ klass.create_indexes
190
+ klass.remove_indexes
191
+ end
192
+
193
+ it "removes the indexes" do
194
+ collection.indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
195
+ end
196
+ end
197
+
198
+ context "when database specific options exist" do
199
+
200
+ let(:klass) do
201
+ Class.new do
202
+ include Mongoid::Document
203
+ store_in collection: "test_db_remove"
204
+ index({ test: 1 }, { database: "mia_2" })
205
+ index({ name: 1 }, { background: true })
206
+ end
207
+ end
208
+
209
+ before do
210
+ klass.create_indexes
211
+ klass.remove_indexes
212
+ end
213
+
214
+ let(:indexes) do
215
+ klass.with(database: "mia_2").collection.indexes
216
+ end
217
+
218
+ it "creates the indexes" do
219
+ indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
220
+ end
221
+ end
222
+ end
223
+
224
+ describe ".create_indexes" do
225
+
226
+ context "when no database options are specified" do
227
+
228
+ let(:klass) do
229
+ Class.new do
230
+ include Mongoid::Document
231
+ store_in collection: "test_class"
232
+ index({ _type: 1 }, { unique: false, background: true })
233
+ end
234
+ end
235
+
236
+ before do
237
+ klass.create_indexes
238
+ end
239
+
240
+ it "creates the indexes" do
241
+ klass.collection.indexes[_type: 1].should_not be_nil
242
+ end
243
+ end
244
+
245
+ context "when database options are specified" do
246
+
247
+ let(:klass) do
248
+ Class.new do
249
+ include Mongoid::Document
250
+ store_in collection: "test_db_indexes"
251
+ index({ _type: 1 }, { database: "mia_1" })
252
+ end
253
+ end
254
+
255
+ before do
256
+ klass.create_indexes
257
+ end
258
+
259
+ let(:indexes) do
260
+ klass.with(database: "mia_1").collection.indexes
261
+ end
262
+
263
+ it "creates the indexes" do
264
+ indexes[_type: 1].should_not be_nil
265
+ end
266
+ end
267
+ end
268
+
269
+ describe ".add_indexes" do
270
+
271
+ context "when indexes have not been added" do
272
+
273
+ let(:klass) do
274
+ Class.new do
275
+ include Mongoid::Document
276
+ def self.hereditary?
277
+ true
278
+ end
279
+ end
280
+ end
281
+
282
+ before do
283
+ klass.add_indexes
284
+ end
285
+
286
+ it "adds the _type index" do
287
+ klass.index_options[_type: 1].should eq(
288
+ { unique: false, background: true }
289
+ )
290
+ end
291
+ end
292
+ end
293
+
294
+ describe ".index" do
295
+
296
+ let(:klass) do
297
+ Class.new do
298
+ include Mongoid::Document
299
+ field :a, as: :authentication_token
300
+ end
301
+ end
302
+
303
+ context "when indexing a field that is aliased" do
304
+
305
+ before do
306
+ klass.index({ authentication_token: 1 }, { unique: true })
307
+ end
308
+
309
+ let(:options) do
310
+ klass.index_options[a: 1]
311
+ end
312
+
313
+ it "sets the index with unique options" do
314
+ options.should eq(unique: true)
315
+ end
316
+ end
317
+
318
+ context "when providing unique options" do
319
+
320
+ before do
321
+ klass.index({ name: 1 }, { unique: true })
322
+ end
323
+
324
+ let(:options) do
325
+ klass.index_options[name: 1]
326
+ end
327
+
328
+ it "sets the index with unique options" do
329
+ options.should eq(unique: true)
330
+ end
331
+ end
332
+
333
+ context "when providing a drop_dups option" do
334
+
335
+ before do
336
+ klass.index({ name: 1 }, { drop_dups: true })
337
+ end
338
+
339
+ let(:options) do
340
+ klass.index_options[name: 1]
341
+ end
342
+
343
+ it "sets the index with dropDups options" do
344
+ options.should eq(dropDups: true)
345
+ end
346
+ end
347
+
348
+ context "when providing a sparse option" do
349
+
350
+ before do
351
+ klass.index({ name: 1 }, { sparse: true })
352
+ end
353
+
354
+ let(:options) do
355
+ klass.index_options[name: 1]
356
+ end
357
+
358
+ it "sets the index with sparse options" do
359
+ options.should eq(sparse: true)
360
+ end
361
+ end
362
+
363
+ context "when providing a name option" do
364
+
365
+ before do
366
+ klass.index({ name: 1 }, { name: "index_name" })
367
+ end
368
+
369
+ let(:options) do
370
+ klass.index_options[name: 1]
371
+ end
372
+
373
+ it "sets the index with name options" do
374
+ options.should eq(name: "index_name")
375
+ end
376
+ end
377
+
378
+ context "when providing database options" do
379
+
380
+ before do
381
+ klass.index({ name: 1 }, { database: "mongoid_index_alt" })
382
+ end
383
+
384
+ let(:options) do
385
+ klass.index_options[name: 1]
386
+ end
387
+
388
+ it "sets the index with background options" do
389
+ options.should eq(database: "mongoid_index_alt")
390
+ end
391
+ end
392
+
393
+ context "when providing a background option" do
394
+
395
+ before do
396
+ klass.index({ name: 1 }, { background: true })
397
+ end
398
+
399
+ let(:options) do
400
+ klass.index_options[name: 1]
401
+ end
402
+
403
+ it "sets the index with background options" do
404
+ options.should eq(background: true)
405
+ end
406
+ end
407
+
408
+ context "when providing a compound index" do
409
+
410
+ before do
411
+ klass.index({ name: 1, title: -1 })
412
+ end
413
+
414
+ let(:options) do
415
+ klass.index_options[name: 1, title: -1]
416
+ end
417
+
418
+ it "sets the compound key index" do
419
+ options.should be_empty
420
+ end
421
+ end
422
+
423
+ context "when providing a geospacial index" do
424
+
425
+ before do
426
+ klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
427
+ end
428
+
429
+ let(:options) do
430
+ klass.index_options[location: "2d"]
431
+ end
432
+
433
+ it "sets the geospacial index" do
434
+ options.should eq({ min: -200, max: 200, bits: 32 })
435
+ end
436
+ end
437
+
438
+ context "when providing a geo haystack index" do
439
+
440
+ before do
441
+ klass.index({ location: "geoHaystack" }, { min: -200, max: 200, bucket_size: 0.5 })
442
+ end
443
+
444
+ let(:options) do
445
+ klass.index_options[location: "geoHaystack"]
446
+ end
447
+
448
+ it "sets the geo haystack index" do
449
+ options.should eq({ min: -200, max: 200, bucketSize: 0.5 })
450
+ end
451
+ end
452
+
453
+ context "when providing a Spherical Geospatial index" do
454
+
455
+ before do
456
+ klass.index({ location: "2dsphere" })
457
+ end
458
+
459
+ let(:options) do
460
+ klass.index_options[location: "2dsphere"]
461
+ end
462
+
463
+ it "sets the spherical geospatial index" do
464
+ options.should be_empty
465
+ end
466
+ end
467
+
468
+ context "when providing a hashed index" do
469
+
470
+ before do
471
+ klass.index({ a: "hashed" })
472
+ end
473
+
474
+ let(:options) do
475
+ klass.index_options[a: "hashed"]
476
+ end
477
+
478
+ it "sets the hashed index" do
479
+ options.should be_empty
480
+ end
481
+ end
482
+
483
+ context "when providing a text index" do
484
+
485
+ before do
486
+ klass.index({ content: "text" })
487
+ end
488
+
489
+ let(:options) do
490
+ klass.index_options[content: "text"]
491
+ end
492
+
493
+ it "sets the text index" do
494
+ options.should be_empty
495
+ end
496
+ end
497
+
498
+ context "when providing a compound text index" do
499
+
500
+ before do
501
+ klass.index({ content: "text", title: "text" }, { weights: { content: 1, title: 2 } })
502
+ end
503
+
504
+ let(:options) do
505
+ klass.index_options[content: "text", title: "text"]
506
+ end
507
+
508
+ it "sets the compound text index" do
509
+ options.should eq(weights: { content: 1, title: 2 })
510
+ end
511
+ end
512
+
513
+ context "when providing an expire_after_seconds option" do
514
+
515
+ before do
516
+ klass.index({ name: 1 }, { expire_after_seconds: 3600 })
517
+ end
518
+
519
+ let(:options) do
520
+ klass.index_options[name: 1]
521
+ end
522
+
523
+ it "sets the index with sparse options" do
524
+ options.should eq(expireAfterSeconds: 3600)
525
+ end
526
+ end
527
+
528
+ context "when providing an invalid option" do
529
+
530
+ it "raises an error" do
531
+ expect {
532
+ klass.index({ name: 1 }, { invalid: true })
533
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
534
+ end
535
+ end
536
+
537
+ context "when providing an invalid spec" do
538
+
539
+ context "when the spec is not a hash" do
540
+
541
+ it "raises an error" do
542
+ expect {
543
+ klass.index(:name)
544
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
545
+ end
546
+ end
547
+
548
+ context "when the spec key is invalid" do
549
+
550
+ it "raises an error" do
551
+ expect {
552
+ klass.index({ name: "something" })
553
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
554
+ end
555
+ end
556
+ end
557
+ end
558
+ end
559
+ end
560
+
561
+ if defined?(Mongoid::Indexable)
562
+
563
+ describe Mongoid::Indexable do
564
+
565
+ describe ".included" do
566
+
567
+ let(:klass) do
568
+ Class.new do
569
+ include Mongoid::Indexable
570
+ end
571
+ end
572
+
573
+ it "adds an index_specifications accessor" do
574
+ expect(klass).to respond_to(:index_specifications)
575
+ end
576
+
577
+ it "defaults index_specifications to empty array" do
578
+ expect(klass.index_specifications).to be_empty
579
+ end
580
+ end
581
+
582
+ describe ".remove_indexes" do
583
+
584
+ context "when no database specific options exist" do
585
+
586
+ let(:klass) do
587
+ Person
588
+ end
589
+
590
+ let(:collection) do
591
+ klass.collection
592
+ end
593
+
594
+ before do
595
+ klass.create_indexes
596
+ klass.remove_indexes
597
+ end
598
+
599
+ it "removes the indexes" do
600
+ expect(collection.indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
601
+ end
602
+ end
603
+
604
+ context "when database specific options exist" do
605
+
606
+ let(:klass) do
607
+ Class.new do
608
+ include Mongoid::Document
609
+ store_in collection: "test_db_remove"
610
+ index({ test: 1 }, { database: "mia_2" })
611
+ index({ name: 1 }, { background: true })
612
+ end
613
+ end
614
+
615
+ before do
616
+ klass.create_indexes
617
+ klass.remove_indexes
618
+ end
619
+
620
+ let(:indexes) do
621
+ klass.with(database: "mia_2").collection.indexes
622
+ end
623
+
624
+ it "creates the indexes" do
625
+ expect(indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
626
+ end
627
+ end
628
+ end
629
+
630
+ describe ".create_indexes" do
631
+
632
+ context "when no database options are specified" do
633
+
634
+ let(:klass) do
635
+ Class.new do
636
+ include Mongoid::Document
637
+ store_in collection: "test_class"
638
+ index({ _type: 1 }, unique: false, background: true)
639
+ end
640
+ end
641
+
642
+ before do
643
+ klass.create_indexes
644
+ end
645
+
646
+ it "creates the indexes" do
647
+ expect(klass.collection.indexes[_type: 1]).to_not be_nil
648
+ end
649
+ end
650
+
651
+ context "when database options are specified" do
652
+
653
+ let(:klass) do
654
+ Class.new do
655
+ include Mongoid::Document
656
+ store_in collection: "test_db_indexes"
657
+ index({ _type: 1 }, { database: "mia_1" })
658
+ end
659
+ end
660
+
661
+ before do
662
+ klass.create_indexes
663
+ end
664
+
665
+ let(:indexes) do
666
+ klass.with(database: "mia_1").collection.indexes
667
+ end
668
+
669
+ it "creates the indexes" do
670
+ expect(indexes[_type: 1]).to_not be_nil
671
+ end
672
+ end
673
+ end
674
+
675
+ describe ".add_indexes" do
676
+
677
+ context "when indexes have not been added" do
678
+
679
+ let(:klass) do
680
+ Class.new do
681
+ include Mongoid::Document
682
+ def self.hereditary?
683
+ true
684
+ end
685
+ end
686
+ end
687
+
688
+ before do
689
+ klass.add_indexes
690
+ end
691
+
692
+ let(:spec) do
693
+ klass.index_specification(_type: 1)
694
+ end
695
+
696
+ it "adds the _type index" do
697
+ expect(spec.options).to eq(unique: false, background: true)
698
+ end
699
+ end
700
+ end
701
+
702
+ describe ".index" do
703
+
704
+ let(:klass) do
705
+ Class.new do
706
+ include Mongoid::Document
707
+ field :a, as: :authentication_token
708
+ end
709
+ end
710
+
711
+ context "when indexing a field that is aliased" do
712
+
713
+ before do
714
+ klass.index({ authentication_token: 1 }, unique: true)
715
+ end
716
+
717
+ let(:options) do
718
+ klass.index_specification(a: 1).options
719
+ end
720
+
721
+ it "sets the index with unique options" do
722
+ expect(options).to eq(unique: true)
723
+ end
724
+ end
725
+
726
+ context "when providing unique options" do
727
+
728
+ before do
729
+ klass.index({ name: 1 }, unique: true)
730
+ end
731
+
732
+ let(:options) do
733
+ klass.index_specification(name: 1).options
734
+ end
735
+
736
+ it "sets the index with unique options" do
737
+ expect(options).to eq(unique: true)
738
+ end
739
+ end
740
+
741
+ context "when providing a drop_dups option" do
742
+
743
+ before do
744
+ klass.index({ name: 1 }, drop_dups: true)
745
+ end
746
+
747
+ let(:options) do
748
+ klass.index_specification(name: 1).options
749
+ end
750
+
751
+ it "sets the index with dropDups options" do
752
+ expect(options).to eq(dropDups: true)
753
+ end
754
+ end
755
+
756
+ context "when providing a sparse option" do
757
+
758
+ before do
759
+ klass.index({ name: 1 }, sparse: true)
760
+ end
761
+
762
+ let(:options) do
763
+ klass.index_specification(name: 1).options
764
+ end
765
+
766
+ it "sets the index with sparse options" do
767
+ expect(options).to eq(sparse: true)
768
+ end
769
+ end
770
+
771
+ context "when providing a name option" do
772
+
773
+ before do
774
+ klass.index({ name: 1 }, name: "index_name")
775
+ end
776
+
777
+ let(:options) do
778
+ klass.index_specification(name: 1).options
779
+ end
780
+
781
+ it "sets the index with name options" do
782
+ expect(options).to eq(name: "index_name")
783
+ end
784
+ end
785
+
786
+ context "when providing database options" do
787
+
788
+ before do
789
+ klass.index({ name: 1 }, database: "mongoid_index_alt")
790
+ end
791
+
792
+ let(:options) do
793
+ klass.index_specification(name: 1).options
794
+ end
795
+
796
+ it "sets the index with background options" do
797
+ expect(options).to eq(database: "mongoid_index_alt")
798
+ end
799
+ end
800
+
801
+ context "when providing a background option" do
802
+
803
+ before do
804
+ klass.index({ name: 1 }, background: true)
805
+ end
806
+
807
+ let(:options) do
808
+ klass.index_specification(name: 1).options
809
+ end
810
+
811
+ it "sets the index with background options" do
812
+ expect(options).to eq(background: true)
813
+ end
814
+ end
815
+
816
+ context "when providing a compound index" do
817
+
818
+ before do
819
+ klass.index({ name: 1, title: -1 })
820
+ end
821
+
822
+ let(:options) do
823
+ klass.index_specification(name: 1, title: -1).options
824
+ end
825
+
826
+ it "sets the compound key index" do
827
+ expect(options).to be_empty
828
+ end
829
+ end
830
+
831
+ context "when providing multiple inverse compound indexes" do
832
+
833
+ before do
834
+ klass.index({ name: 1, title: -1 })
835
+ klass.index({ title: -1, name: 1 })
836
+ end
837
+
838
+ let(:first_spec) do
839
+ klass.index_specification(name: 1, title: -1)
840
+ end
841
+
842
+ let(:second_spec) do
843
+ klass.index_specification(title: -1, name: 1)
844
+ end
845
+
846
+ it "does not overwrite the index options" do
847
+ expect(first_spec).to_not eq(second_spec)
848
+ end
849
+ end
850
+
851
+ context "when providing multiple compound indexes with different order" do
852
+
853
+ before do
854
+ klass.index({ name: 1, title: -1 })
855
+ klass.index({ name: 1, title: 1 })
856
+ end
857
+
858
+ let(:first_spec) do
859
+ klass.index_specification(name: 1, title: -1)
860
+ end
861
+
862
+ let(:second_spec) do
863
+ klass.index_specification(name: 1, title: 1)
864
+ end
865
+
866
+ it "does not overwrite the index options" do
867
+ expect(first_spec).to_not eq(second_spec)
868
+ end
869
+ end
870
+
871
+ context "when providing a geospacial index" do
872
+
873
+ before do
874
+ klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
875
+ end
876
+
877
+ let(:options) do
878
+ klass.index_specification(location: "2d").options
879
+ end
880
+
881
+ it "sets the geospacial index" do
882
+ expect(options).to eq({ min: -200, max: 200, bits: 32 })
883
+ end
884
+ end
885
+
886
+ context "when providing a geo haystack index" do
887
+
888
+ before do
889
+ klass.index({ location: "geoHaystack" }, { min: -200, max: 200, bucket_size: 0.5 })
890
+ end
891
+
892
+ let(:options) do
893
+ klass.index_specification(location: "geoHaystack").options
894
+ end
895
+
896
+ it "sets the geo haystack index" do
897
+ expect(options).to eq({ min: -200, max: 200, bucketSize: 0.5 })
898
+ end
899
+ end
900
+
901
+ context "when providing a Spherical Geospatial index" do
902
+
903
+ before do
904
+ klass.index({ location: "2dsphere" })
905
+ end
906
+
907
+ let(:options) do
908
+ klass.index_specification(location: "2dsphere").options
909
+ end
910
+
911
+ it "sets the spherical geospatial index" do
912
+ expect(options).to be_empty
913
+ end
914
+ end
915
+
916
+ context "when providing a text index" do
917
+
918
+ context "when the index is a single field" do
919
+
920
+ before do
921
+ klass.index({ description: "text" })
922
+ end
923
+
924
+ let(:options) do
925
+ klass.index_specification(description: "text").options
926
+ end
927
+
928
+ it "allows the set of the text index" do
929
+ expect(options).to be_empty
930
+ end
931
+ end
932
+
933
+ context "when the index is multiple fields" do
934
+
935
+ before do
936
+ klass.index({ description: "text", name: "text" })
937
+ end
938
+
939
+ let(:options) do
940
+ klass.index_specification(description: "text", name: "text").options
941
+ end
942
+
943
+ it "allows the set of the text index" do
944
+ expect(options).to be_empty
945
+ end
946
+ end
947
+
948
+ context "when the index is all string fields" do
949
+
950
+ before do
951
+ klass.index({ "$**" => "text" })
952
+ end
953
+
954
+ let(:options) do
955
+ klass.index_specification(:"$**" => "text").options
956
+ end
957
+
958
+ it "allows the set of the text index" do
959
+ expect(options).to be_empty
960
+ end
961
+ end
962
+
963
+ context "when providing a default language" do
964
+
965
+ before do
966
+ klass.index({ description: "text" }, default_language: "english")
967
+ end
968
+
969
+ let(:options) do
970
+ klass.index_specification(description: "text").options
971
+ end
972
+
973
+ it "allows the set of the text index" do
974
+ expect(options).to eq(default_language: "english")
975
+ end
976
+ end
977
+
978
+ context "when providing a name" do
979
+
980
+ before do
981
+ klass.index({ description: "text" }, name: "text_index")
982
+ end
983
+
984
+ let(:options) do
985
+ klass.index_specification(description: "text").options
986
+ end
987
+
988
+ it "allows the set of the text index" do
989
+ expect(options).to eq(name: "text_index")
990
+ end
991
+ end
992
+ end
993
+
994
+ context "when providing a hashed index" do
995
+
996
+ before do
997
+ klass.index({ a: "hashed" })
998
+ end
999
+
1000
+ let(:options) do
1001
+ klass.index_specification(a: "hashed").options
1002
+ end
1003
+
1004
+ it "sets the hashed index" do
1005
+ expect(options).to be_empty
1006
+ end
1007
+ end
1008
+
1009
+ context "when providing a text index" do
1010
+
1011
+ before do
1012
+ klass.index({ content: "text" })
1013
+ end
1014
+
1015
+ let(:options) do
1016
+ klass.index_specification(content: "text").options
1017
+ end
1018
+
1019
+ it "sets the text index" do
1020
+ expect(options).to be_empty
1021
+ end
1022
+ end
1023
+
1024
+ context "when providing a compound text index" do
1025
+
1026
+ before do
1027
+ klass.index({ content: "text", title: "text" }, { weights: { content: 1, title: 2 } })
1028
+ end
1029
+
1030
+ let(:options) do
1031
+ klass.index_specification(content: "text", title: "text").options
1032
+ end
1033
+
1034
+ it "sets the compound text index" do
1035
+ expect(options).to eq(weights: { content: 1, title: 2 })
1036
+ end
1037
+ end
1038
+
1039
+ context "when providing an expire_after_seconds option" do
1040
+
1041
+ before do
1042
+ klass.index({ name: 1 }, { expire_after_seconds: 3600 })
1043
+ end
1044
+
1045
+ let(:options) do
1046
+ klass.index_specification(name: 1).options
1047
+ end
1048
+
1049
+ it "sets the index with sparse options" do
1050
+ expect(options).to eq(expireAfterSeconds: 3600)
1051
+ end
1052
+ end
1053
+
1054
+ context "when providing an invalid option" do
1055
+
1056
+ it "raises an error" do
1057
+ expect {
1058
+ klass.index({ name: 1 }, { invalid: true })
1059
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
1060
+ end
1061
+ end
1062
+
1063
+ context "when providing an invalid spec" do
1064
+
1065
+ context "when the spec is not a hash" do
1066
+
1067
+ it "raises an error" do
1068
+ expect {
1069
+ klass.index(:name)
1070
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
1071
+ end
1072
+ end
1073
+
1074
+ context "when the spec key is invalid" do
1075
+
1076
+ it "raises an error" do
1077
+ expect {
1078
+ klass.index({ name: "something" })
1079
+ }.to raise_error(Mongoid::Errors::InvalidIndex)
1080
+ end
1081
+ end
1082
+ end
1083
+ end
1084
+ end
1085
+ end
135
1086
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_monkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - johnnyshields