mongo 2.3.1 → 2.4.0.rc0

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.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -3
  4. data/lib/mongo/bulk_write.rb +8 -7
  5. data/lib/mongo/bulk_write/combineable.rb +4 -0
  6. data/lib/mongo/bulk_write/transformable.rb +17 -5
  7. data/lib/mongo/bulk_write/validatable.rb +1 -0
  8. data/lib/mongo/client.rb +3 -0
  9. data/lib/mongo/cluster.rb +8 -0
  10. data/lib/mongo/cluster/app_metadata.rb +135 -0
  11. data/lib/mongo/collection.rb +42 -10
  12. data/lib/mongo/collection/view.rb +15 -1
  13. data/lib/mongo/collection/view/aggregation.rb +5 -0
  14. data/lib/mongo/collection/view/builder/aggregation.rb +13 -3
  15. data/lib/mongo/collection/view/builder/find_command.rb +7 -21
  16. data/lib/mongo/collection/view/builder/map_reduce.rb +22 -5
  17. data/lib/mongo/collection/view/iterable.rb +1 -0
  18. data/lib/mongo/collection/view/map_reduce.rb +5 -0
  19. data/lib/mongo/collection/view/readable.rb +35 -14
  20. data/lib/mongo/collection/view/writable.rb +54 -23
  21. data/lib/mongo/cursor/builder/get_more_command.rb +2 -3
  22. data/lib/mongo/database.rb +10 -2
  23. data/lib/mongo/error.rb +2 -0
  24. data/lib/mongo/error/invalid_application_name.rb +38 -0
  25. data/lib/mongo/error/invalid_server_preference.rb +24 -3
  26. data/lib/mongo/error/unsupported_collation.rb +51 -0
  27. data/lib/mongo/index/view.rb +28 -15
  28. data/lib/mongo/operation.rb +6 -0
  29. data/lib/mongo/operation/commands.rb +3 -0
  30. data/lib/mongo/operation/commands/aggregate.rb +10 -10
  31. data/lib/mongo/operation/commands/create.rb +45 -0
  32. data/lib/mongo/operation/commands/drop.rb +45 -0
  33. data/lib/mongo/operation/commands/drop_database.rb +45 -0
  34. data/lib/mongo/operation/commands/map_reduce.rb +12 -1
  35. data/lib/mongo/operation/commands/parallel_scan.rb +1 -0
  36. data/lib/mongo/operation/read_preference.rb +9 -9
  37. data/lib/mongo/operation/specifiable.rb +34 -0
  38. data/lib/mongo/operation/takes_write_concern.rb +35 -0
  39. data/lib/mongo/operation/write/bulk/bulkable.rb +1 -1
  40. data/lib/mongo/operation/write/command/create_index.rb +6 -0
  41. data/lib/mongo/operation/write/command/drop_index.rb +6 -0
  42. data/lib/mongo/operation/write/command/insert.rb +1 -1
  43. data/lib/mongo/operation/write/command/update.rb +1 -0
  44. data/lib/mongo/operation/write/command/writable.rb +2 -2
  45. data/lib/mongo/operation/write/create_index.rb +2 -2
  46. data/lib/mongo/operation/write/create_user.rb +1 -1
  47. data/lib/mongo/operation/write/delete.rb +5 -1
  48. data/lib/mongo/operation/write/gle.rb +1 -1
  49. data/lib/mongo/operation/write/insert.rb +2 -2
  50. data/lib/mongo/operation/write/remove_user.rb +1 -1
  51. data/lib/mongo/operation/write/update.rb +5 -1
  52. data/lib/mongo/operation/write/update_user.rb +1 -1
  53. data/lib/mongo/operation/write/write_command_enabled.rb +10 -2
  54. data/lib/mongo/protocol/insert.rb +1 -2
  55. data/lib/mongo/protocol/query.rb +3 -7
  56. data/lib/mongo/server.rb +8 -3
  57. data/lib/mongo/server/connection.rb +17 -11
  58. data/lib/mongo/server/description.rb +22 -0
  59. data/lib/mongo/server/description/features.rb +2 -0
  60. data/lib/mongo/server/monitor.rb +5 -0
  61. data/lib/mongo/server/monitor/connection.rb +11 -0
  62. data/lib/mongo/server_selector/nearest.rb +9 -6
  63. data/lib/mongo/server_selector/primary.rb +4 -0
  64. data/lib/mongo/server_selector/primary_preferred.rb +7 -1
  65. data/lib/mongo/server_selector/secondary.rb +5 -0
  66. data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
  67. data/lib/mongo/server_selector/selectable.rb +57 -10
  68. data/lib/mongo/socket/ssl.rb +1 -0
  69. data/lib/mongo/uri.rb +4 -0
  70. data/lib/mongo/version.rb +1 -1
  71. data/lib/mongo/write_concern.rb +1 -0
  72. data/mongo.gemspec +1 -1
  73. data/spec/mongo/auth/cr_spec.rb +7 -1
  74. data/spec/mongo/auth/ldap_spec.rb +7 -1
  75. data/spec/mongo/auth/scram_spec.rb +7 -1
  76. data/spec/mongo/auth/x509_spec.rb +7 -1
  77. data/spec/mongo/bulk_write_spec.rb +598 -5
  78. data/spec/mongo/client_spec.rb +47 -1
  79. data/spec/mongo/cluster/app_metadata_spec.rb +104 -0
  80. data/spec/mongo/cluster/topology/replica_set_spec.rb +14 -8
  81. data/spec/mongo/cluster/topology/sharded_spec.rb +9 -3
  82. data/spec/mongo/cluster/topology/single_spec.rb +10 -4
  83. data/spec/mongo/cluster_spec.rb +29 -0
  84. data/spec/mongo/collection/view/aggregation_spec.rb +139 -0
  85. data/spec/mongo/collection/view/builder/find_command_spec.rb +6 -243
  86. data/spec/mongo/collection/view/map_reduce_spec.rb +104 -0
  87. data/spec/mongo/collection/view/readable_spec.rb +83 -0
  88. data/spec/mongo/collection/view/writable_spec.rb +447 -1
  89. data/spec/mongo/collection/view_spec.rb +57 -0
  90. data/spec/mongo/collection_spec.rb +926 -101
  91. data/spec/mongo/crud_spec.rb +4 -5
  92. data/spec/mongo/database_spec.rb +99 -1
  93. data/spec/mongo/index/view_spec.rb +360 -31
  94. data/spec/mongo/max_staleness_spec.rb +108 -0
  95. data/spec/mongo/operation/read_preference_spec.rb +8 -8
  96. data/spec/mongo/operation/write/command/delete_spec.rb +1 -1
  97. data/spec/mongo/operation/write/command/insert_spec.rb +1 -1
  98. data/spec/mongo/operation/write/command/update_spec.rb +1 -1
  99. data/spec/mongo/server/connection_pool_spec.rb +3 -1
  100. data/spec/mongo/server/connection_spec.rb +17 -7
  101. data/spec/mongo/server/description/features_spec.rb +50 -0
  102. data/spec/mongo/server/description_spec.rb +9 -3
  103. data/spec/mongo/server_selection_spec.rb +5 -3
  104. data/spec/mongo/server_selector/nearest_spec.rb +73 -0
  105. data/spec/mongo/server_selector/primary_preferred_spec.rb +73 -0
  106. data/spec/mongo/server_selector/primary_spec.rb +36 -0
  107. data/spec/mongo/server_selector/secondary_preferred_spec.rb +73 -0
  108. data/spec/mongo/server_selector/secondary_spec.rb +73 -0
  109. data/spec/mongo/server_selector_spec.rb +53 -0
  110. data/spec/mongo/server_spec.rb +3 -1
  111. data/spec/mongo/uri_spec.rb +54 -0
  112. data/spec/mongo/write_concern_spec.rb +18 -0
  113. data/spec/spec_helper.rb +10 -0
  114. data/spec/support/authorization.rb +8 -1
  115. data/spec/support/crud.rb +15 -0
  116. data/spec/support/crud/read.rb +27 -19
  117. data/spec/support/crud/write.rb +28 -3
  118. data/spec/support/crud_tests/read/aggregate.yml +15 -3
  119. data/spec/support/crud_tests/read/count.yml +14 -3
  120. data/spec/support/crud_tests/read/distinct.yml +13 -1
  121. data/spec/support/crud_tests/read/find.yml +12 -2
  122. data/spec/support/crud_tests/write/deleteMany.yml +22 -1
  123. data/spec/support/crud_tests/write/deleteOne.yml +20 -1
  124. data/spec/support/crud_tests/write/findOneAndDelete.yml +27 -2
  125. data/spec/support/crud_tests/write/findOneAndReplace.yml +43 -14
  126. data/spec/support/crud_tests/write/findOneAndUpdate.yml +50 -8
  127. data/spec/support/crud_tests/write/replaceOne.yml +34 -10
  128. data/spec/support/crud_tests/write/updateMany.yml +42 -11
  129. data/spec/support/crud_tests/write/updateOne.yml +32 -7
  130. data/spec/support/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +26 -0
  131. data/spec/support/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +25 -0
  132. data/spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +33 -0
  133. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml +33 -0
  134. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +33 -0
  135. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +27 -0
  136. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +36 -0
  137. data/spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml +51 -0
  138. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +26 -0
  139. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +51 -0
  140. data/spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +26 -0
  141. data/spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +25 -0
  142. data/spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +35 -0
  143. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +25 -0
  144. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +23 -0
  145. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml +33 -0
  146. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +33 -0
  147. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +36 -0
  148. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +27 -0
  149. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +27 -0
  150. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +26 -0
  151. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +59 -0
  152. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +43 -0
  153. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +59 -0
  154. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +43 -0
  155. data/spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml +29 -0
  156. data/spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml +29 -0
  157. data/spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +27 -0
  158. data/spec/support/max_staleness/Sharded/Incompatible.yml +25 -0
  159. data/spec/support/max_staleness/Sharded/SmallMaxStaleness.yml +20 -0
  160. data/spec/support/max_staleness/Single/Incompatible.yml +18 -0
  161. data/spec/support/max_staleness/Single/SmallMaxStaleness.yml +20 -0
  162. data/spec/support/server_selection.rb +25 -0
  163. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +27 -0
  164. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +31 -0
  165. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +31 -0
  166. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +34 -0
  167. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +28 -0
  168. data/spec/support/shared/server_selector.rb +4 -3
  169. metadata +91 -6
  170. metadata.gz.sig +0 -0
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::Nearest do
13
13
  it_behaves_like 'a server selector accepting tag sets'
14
14
  it_behaves_like 'a server selector with sensitive data in its options'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag set not provided' do
@@ -38,6 +85,32 @@ describe Mongo::ServerSelector::Nearest do
38
85
  )
39
86
  end
40
87
  end
88
+
89
+ context 'max staleness not provided' do
90
+
91
+ let(:expected) do
92
+ { :mode => 'nearest' }
93
+ end
94
+
95
+ it 'returns a read preference formatted for mongos' do
96
+ expect(selector.to_mongos).to eq(expected)
97
+ end
98
+ end
99
+
100
+ context 'max staleness provided' do
101
+
102
+ let(:max_staleness) do
103
+ 60
104
+ end
105
+
106
+ let(:expected) do
107
+ { :mode => 'nearest', maxStalenessMS: 60000 }
108
+ end
109
+
110
+ it 'returns a read preference formatted for mongos' do
111
+ expect(selector.to_mongos).to eq(expected)
112
+ end
113
+ end
41
114
  end
42
115
 
43
116
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::PrimaryPreferred do
13
13
  it_behaves_like 'a server selector accepting tag sets'
14
14
  it_behaves_like 'a server selector with sensitive data in its options'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag sets not provided' do
@@ -31,6 +78,32 @@ describe Mongo::ServerSelector::PrimaryPreferred do
31
78
  )
32
79
  end
33
80
  end
81
+
82
+ context 'max staleness not provided' do
83
+
84
+ let(:expected) do
85
+ { :mode => 'primaryPreferred' }
86
+ end
87
+
88
+ it 'returns a read preference formatted for mongos' do
89
+ expect(selector.to_mongos).to eq(expected)
90
+ end
91
+ end
92
+
93
+ context 'max staleness provided' do
94
+
95
+ let(:max_staleness) do
96
+ 60
97
+ end
98
+
99
+ let(:expected) do
100
+ { :mode => 'primaryPreferred', maxStalenessMS: 60000 }
101
+ end
102
+
103
+ it 'returns a read preference formatted for mongos' do
104
+ expect(selector.to_mongos).to eq(expected)
105
+ end
106
+ end
34
107
  end
35
108
 
36
109
  describe '#select' do
@@ -11,6 +11,22 @@ describe Mongo::ServerSelector::Primary do
11
11
  end
12
12
  it_behaves_like 'a server selector with sensitive data in its options'
13
13
 
14
+ describe '#initialize' do
15
+
16
+ context 'when max_staleness is provided' do
17
+
18
+ let(:options) do
19
+ { max_staleness: 60 }
20
+ end
21
+
22
+ it 'raises an exception' do
23
+ expect {
24
+ selector
25
+ }.to raise_exception(Mongo::Error::InvalidServerPreference)
26
+ end
27
+ end
28
+ end
29
+
14
30
  describe '#tag_sets' do
15
31
 
16
32
  context 'tags not provided' do
@@ -39,6 +55,26 @@ describe Mongo::ServerSelector::Primary do
39
55
  it 'returns nil' do
40
56
  expect(selector.to_mongos).to be_nil
41
57
  end
58
+
59
+ context 'max staleness not provided' do
60
+
61
+ it 'returns nil' do
62
+ expect(selector.to_mongos).to be_nil
63
+ end
64
+ end
65
+
66
+ context 'max staleness provided' do
67
+
68
+ let(:max_staleness) do
69
+ 60
70
+ end
71
+
72
+ it 'raises an error' do
73
+ expect {
74
+ selector
75
+ }.to raise_exception(Mongo::Error::InvalidServerPreference)
76
+ end
77
+ end
42
78
  end
43
79
 
44
80
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::SecondaryPreferred do
13
13
 
14
14
  it_behaves_like 'a server selector accepting tag sets'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag sets provided' do
@@ -34,6 +81,32 @@ describe Mongo::ServerSelector::SecondaryPreferred do
34
81
  expect(selector.to_mongos).to be_nil
35
82
  end
36
83
  end
84
+
85
+ context 'max staleness not provided' do
86
+
87
+ let(:expected) do
88
+ { :mode => 'secondaryPreferred' }
89
+ end
90
+
91
+ it 'returns nil' do
92
+ expect(selector.to_mongos).to be_nil
93
+ end
94
+ end
95
+
96
+ context 'max staleness provided' do
97
+
98
+ let(:max_staleness) do
99
+ 60
100
+ end
101
+
102
+ let(:expected) do
103
+ { :mode => 'secondaryPreferred', maxStalenessMS: 60000 }
104
+ end
105
+
106
+ it 'returns a read preference formatted for mongos' do
107
+ expect(selector.to_mongos).to eq(expected)
108
+ end
109
+ end
37
110
  end
38
111
 
39
112
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::Secondary do
13
13
 
14
14
  it_behaves_like 'a server selector accepting tag sets'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  it 'returns read preference formatted for mongos' do
@@ -30,6 +77,32 @@ describe Mongo::ServerSelector::Secondary do
30
77
  )
31
78
  end
32
79
  end
80
+
81
+ context 'max staleness not provided' do
82
+
83
+ let(:expected) do
84
+ { :mode => 'secondary' }
85
+ end
86
+
87
+ it 'returns a read preference formatted for mongos' do
88
+ expect(selector.to_mongos).to eq(expected)
89
+ end
90
+ end
91
+
92
+ context 'max staleness provided' do
93
+
94
+ let(:max_staleness) do
95
+ 60
96
+ end
97
+
98
+ let(:expected) do
99
+ { :mode => 'secondary', maxStalenessMS: 60000 }
100
+ end
101
+
102
+ it 'returns a read preference formatted for mongos' do
103
+ expect(selector.to_mongos).to eq(expected)
104
+ end
105
+ end
33
106
  end
34
107
 
35
108
  describe '#select' do
@@ -291,4 +291,57 @@ describe Mongo::ServerSelector do
291
291
 
292
292
  it_behaves_like 'a ServerSelector'
293
293
  end
294
+
295
+ describe '#inspect' do
296
+
297
+ let(:options) do
298
+ {}
299
+ end
300
+
301
+ let(:read_pref) do
302
+ described_class.get({ mode: mode }.merge(options))
303
+ end
304
+
305
+ context 'when the mode is primary' do
306
+
307
+ let(:mode) do
308
+ :primary
309
+ end
310
+
311
+ it 'includes the mode in the inspect string' do
312
+ expect(read_pref.inspect).to match(/#{mode.to_s}/i)
313
+ end
314
+ end
315
+
316
+ context 'when there are tag sets' do
317
+
318
+ let(:mode) do
319
+ :secondary
320
+ end
321
+
322
+ let(:options) do
323
+ { tag_sets: [{ 'data_center' => 'nyc' }] }
324
+ end
325
+
326
+ it 'includes the tag sets in the inspect string' do
327
+ expect(read_pref.inspect).to include(options[:tag_sets].inspect)
328
+ end
329
+ end
330
+
331
+ context 'when there is a max staleness set' do
332
+
333
+ let(:mode) do
334
+ :secondary
335
+ end
336
+
337
+ let(:options) do
338
+ { max_staleness: 123 }
339
+ end
340
+
341
+ it 'includes the tag sets in the inspect string' do
342
+ expect(read_pref.inspect).to match(/max_staleness/i)
343
+ expect(read_pref.inspect).to match(/123/)
344
+ end
345
+ end
346
+ end
294
347
  end