mongo 2.1.0.beta → 2.1.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 (253) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +2 -2
  5. data/lib/mongo.rb +2 -3
  6. data/lib/mongo/address.rb +7 -5
  7. data/lib/mongo/address/unix.rb +2 -2
  8. data/lib/mongo/auth/ldap/conversation.rb +6 -2
  9. data/lib/mongo/auth/scram/conversation.rb +8 -2
  10. data/lib/mongo/auth/user/view.rb +21 -0
  11. data/lib/mongo/bulk_write.rb +155 -23
  12. data/lib/mongo/bulk_write/combineable.rb +51 -0
  13. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  14. data/lib/mongo/bulk_write/result.rb +61 -8
  15. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  16. data/lib/mongo/bulk_write/transformable.rb +117 -0
  17. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  18. data/lib/mongo/bulk_write/validatable.rb +62 -0
  19. data/lib/mongo/client.rb +7 -3
  20. data/lib/mongo/cluster.rb +3 -3
  21. data/lib/mongo/cluster/topology/replica_set.rb +8 -6
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/collection.rb +75 -4
  24. data/lib/mongo/collection/view.rb +1 -2
  25. data/lib/mongo/collection/view/aggregation.rb +13 -8
  26. data/lib/mongo/collection/view/immutable.rb +6 -6
  27. data/lib/mongo/collection/view/iterable.rb +13 -4
  28. data/lib/mongo/collection/view/map_reduce.rb +22 -17
  29. data/lib/mongo/collection/view/readable.rb +121 -70
  30. data/lib/mongo/cursor.rb +5 -1
  31. data/lib/mongo/database.rb +3 -3
  32. data/lib/mongo/database/view.rb +1 -1
  33. data/lib/mongo/error.rb +7 -0
  34. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
  35. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
  36. data/lib/mongo/error/file_not_found.rb +37 -0
  37. data/lib/mongo/error/invalid_file.rb +2 -2
  38. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  39. data/lib/mongo/error/invalid_uri.rb +5 -4
  40. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  41. data/lib/mongo/error/operation_failure.rb +1 -1
  42. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  43. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  44. data/lib/mongo/grid.rb +2 -1
  45. data/lib/mongo/grid/file.rb +12 -9
  46. data/lib/mongo/grid/file/chunk.rb +6 -6
  47. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  48. data/lib/mongo/grid/fs_bucket.rb +441 -0
  49. data/lib/mongo/grid/stream.rb +64 -0
  50. data/lib/mongo/grid/stream/read.rb +208 -0
  51. data/lib/mongo/grid/stream/write.rb +187 -0
  52. data/lib/mongo/index/view.rb +1 -1
  53. data/lib/mongo/loggable.rb +34 -57
  54. data/lib/mongo/logger.rb +16 -78
  55. data/lib/mongo/monitoring.rb +1 -5
  56. data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
  57. data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
  58. data/lib/mongo/monitoring/publishable.rb +22 -12
  59. data/lib/mongo/operation.rb +3 -6
  60. data/lib/mongo/operation/commands.rb +24 -0
  61. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  62. data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
  63. data/lib/mongo/operation/commands/collections_info.rb +66 -0
  64. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  65. data/lib/mongo/operation/commands/indexes.rb +70 -0
  66. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  67. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  68. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  69. data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
  70. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  71. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
  72. data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
  73. data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
  74. data/lib/mongo/operation/commands/user_query.rb +69 -0
  75. data/lib/mongo/operation/commands/users_info.rb +53 -0
  76. data/lib/mongo/operation/commands/users_info/result.rb +36 -0
  77. data/lib/mongo/operation/executable.rb +4 -68
  78. data/lib/mongo/operation/kill_cursors.rb +3 -3
  79. data/lib/mongo/operation/read.rb +0 -4
  80. data/lib/mongo/operation/read/get_more.rb +2 -22
  81. data/lib/mongo/operation/read/query.rb +2 -21
  82. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  83. data/lib/mongo/operation/specifiable.rb +24 -0
  84. data/lib/mongo/operation/write.rb +2 -0
  85. data/lib/mongo/operation/write/bulk.rb +6 -3
  86. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  87. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  88. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  89. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  90. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  91. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  92. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  93. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  94. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  95. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  96. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  97. data/lib/mongo/operation/write/command/delete.rb +0 -1
  98. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  99. data/lib/mongo/operation/write/command/insert.rb +0 -1
  100. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  101. data/lib/mongo/operation/write/command/update.rb +0 -1
  102. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  103. data/lib/mongo/operation/write/command/writable.rb +13 -18
  104. data/lib/mongo/operation/write/create_index.rb +4 -27
  105. data/lib/mongo/operation/write/create_user.rb +4 -30
  106. data/lib/mongo/operation/write/delete.rb +5 -28
  107. data/lib/mongo/operation/write/drop_index.rb +3 -3
  108. data/lib/mongo/operation/write/gle.rb +48 -0
  109. data/lib/mongo/operation/write/idable.rb +5 -0
  110. data/lib/mongo/operation/write/insert.rb +2 -24
  111. data/lib/mongo/operation/write/remove_user.rb +4 -27
  112. data/lib/mongo/operation/write/update.rb +4 -32
  113. data/lib/mongo/operation/write/update_user.rb +4 -30
  114. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  115. data/lib/mongo/options/mapper.rb +4 -2
  116. data/lib/mongo/protocol/delete.rb +68 -3
  117. data/lib/mongo/protocol/get_more.rb +54 -2
  118. data/lib/mongo/protocol/insert.rb +59 -1
  119. data/lib/mongo/protocol/kill_cursors.rb +53 -4
  120. data/lib/mongo/protocol/message.rb +12 -12
  121. data/lib/mongo/protocol/query.rb +139 -65
  122. data/lib/mongo/protocol/reply.rb +69 -1
  123. data/lib/mongo/protocol/update.rb +70 -1
  124. data/lib/mongo/server/connection.rb +11 -3
  125. data/lib/mongo/server/description.rb +29 -0
  126. data/lib/mongo/server/description/features.rb +2 -1
  127. data/lib/mongo/server/monitor.rb +2 -2
  128. data/lib/mongo/server_selector.rb +14 -10
  129. data/lib/mongo/server_selector/selectable.rb +24 -22
  130. data/lib/mongo/socket.rb +6 -3
  131. data/lib/mongo/socket/tcp.rb +2 -2
  132. data/lib/mongo/socket/unix.rb +5 -8
  133. data/lib/mongo/uri.rb +243 -139
  134. data/lib/mongo/version.rb +1 -1
  135. data/spec/mongo/address/unix_spec.rb +1 -1
  136. data/spec/mongo/address_spec.rb +25 -0
  137. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  138. data/spec/mongo/auth/user/view_spec.rb +26 -1
  139. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  140. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  141. data/spec/mongo/bulk_write_spec.rb +332 -166
  142. data/spec/mongo/client_spec.rb +25 -0
  143. data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
  144. data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
  145. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  146. data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
  147. data/spec/mongo/collection/view/readable_spec.rb +17 -30
  148. data/spec/mongo/collection/view_spec.rb +233 -7
  149. data/spec/mongo/collection_spec.rb +360 -18
  150. data/spec/mongo/command_monitoring_spec.rb +51 -0
  151. data/spec/mongo/connection_string_spec.rb +137 -0
  152. data/spec/mongo/database_spec.rb +27 -11
  153. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  154. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  155. data/spec/mongo/grid/file_spec.rb +8 -8
  156. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  157. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  158. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  159. data/spec/mongo/grid/stream_spec.rb +48 -0
  160. data/spec/mongo/gridfs_spec.rb +50 -0
  161. data/spec/mongo/logger_spec.rb +0 -40
  162. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  163. data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
  164. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  165. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
  166. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  167. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
  168. data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
  169. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  170. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
  171. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
  172. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
  173. data/spec/mongo/operation/write/insert_spec.rb +0 -11
  174. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  175. data/spec/mongo/server/description_spec.rb +42 -0
  176. data/spec/mongo/server/monitor_spec.rb +21 -0
  177. data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
  178. data/spec/mongo/server_selection_spec.rb +3 -3
  179. data/spec/mongo/server_selector/nearest_spec.rb +34 -27
  180. data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
  181. data/spec/mongo/server_selector/primary_spec.rb +14 -13
  182. data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
  183. data/spec/mongo/server_selector/secondary_spec.rb +23 -22
  184. data/spec/mongo/server_selector_spec.rb +87 -24
  185. data/spec/mongo/socket/unix_spec.rb +52 -0
  186. data/spec/mongo/uri_spec.rb +251 -39
  187. data/spec/spec_helper.rb +11 -4
  188. data/spec/support/authorization.rb +4 -5
  189. data/spec/support/command_monitoring.rb +365 -0
  190. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  191. data/spec/support/command_monitoring/command.yml +42 -0
  192. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  193. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  194. data/spec/support/command_monitoring/find.yml +219 -0
  195. data/spec/support/command_monitoring/insertMany.yml +81 -0
  196. data/spec/support/command_monitoring/insertOne.yml +51 -0
  197. data/spec/support/command_monitoring/updateMany.yml +67 -0
  198. data/spec/support/command_monitoring/updateOne.yml +95 -0
  199. data/spec/support/connection_string.rb +228 -0
  200. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  201. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  202. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  203. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  204. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  205. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  206. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  207. data/spec/support/crud.rb +3 -1
  208. data/spec/support/crud/read.rb +14 -10
  209. data/spec/support/crud/write.rb +36 -9
  210. data/spec/support/gridfs.rb +637 -0
  211. data/spec/support/gridfs_tests/delete.yml +157 -0
  212. data/spec/support/gridfs_tests/download.yml +210 -0
  213. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  214. data/spec/support/gridfs_tests/upload.yml +158 -0
  215. data/spec/support/sdam/rs/equal_electionids.yml +1 -2
  216. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
  217. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  218. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  219. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  220. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  221. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  222. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  223. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  224. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  225. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  226. data/spec/support/server_discovery_and_monitoring.rb +3 -1
  227. data/spec/support/server_selection.rb +3 -1
  228. data/spec/support/shared/bulk_write.rb +192 -0
  229. data/spec/support/shared/server_selector.rb +21 -12
  230. metadata +147 -57
  231. metadata.gz.sig +0 -0
  232. data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
  233. data/lib/mongo/bulk_write/deletable.rb +0 -57
  234. data/lib/mongo/bulk_write/insertable.rb +0 -49
  235. data/lib/mongo/bulk_write/replacable.rb +0 -58
  236. data/lib/mongo/bulk_write/updatable.rb +0 -69
  237. data/lib/mongo/grid/fs.rb +0 -146
  238. data/lib/mongo/operation/list_collections/result.rb +0 -114
  239. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  240. data/lib/mongo/operation/read/collections_info.rb +0 -68
  241. data/lib/mongo/operation/read/indexes.rb +0 -69
  242. data/lib/mongo/operation/read/list_collections.rb +0 -76
  243. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  244. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  245. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  246. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  247. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  248. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  249. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  250. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
  251. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  252. data/spec/mongo/grid/fs_spec.rb +0 -160
  253. data/spec/mongo/loggable_spec.rb +0 -63
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ def runnable?(file)
4
+ !write_command_enabled? && (file.include?('bulkWrite') || file.include?('insert'))
5
+ end
6
+
7
+ describe 'Command Monitoring Events' do
8
+
9
+ COMMAND_MONITORING_TESTS.each do |file|
10
+
11
+ spec = Mongo::CommandMonitoring::Spec.new(file)
12
+
13
+ spec.tests.each do |test|
14
+
15
+ context(test.description) do
16
+
17
+ let(:subscriber) do
18
+ Mongo::CommandMonitoring::TestSubscriber.new
19
+ end
20
+
21
+ let(:monitoring) do
22
+ authorized_client.instance_variable_get(:@monitoring)
23
+ end
24
+
25
+ before do
26
+ authorized_collection.find.delete_many
27
+ authorized_client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
28
+ end
29
+
30
+ after do
31
+ monitoring.subscribers[Mongo::Monitoring::COMMAND].delete(subscriber)
32
+ authorized_collection.find.delete_many
33
+ end
34
+
35
+ test.expectations.each do |expectation|
36
+
37
+ it "generates a #{expectation.event_name} for #{expectation.command_name}", unless: runnable?(file) do
38
+ begin
39
+ test.run(authorized_collection)
40
+ event = subscriber.send(expectation.event_type)[expectation.command_name]
41
+ expect(event).to send(expectation.matcher, expectation)
42
+ rescue Mongo::Error::OperationFailure, Mongo::Error::BulkWriteError => e
43
+ event = subscriber.send(expectation.event_type)[expectation.command_name]
44
+ expect(event).to send(expectation.matcher, expectation)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ConnectionString' do
4
+ include Mongo::ConnectionString
5
+
6
+ CONNECTION_STRING_TESTS.each do |file|
7
+
8
+ spec = Mongo::ConnectionString::Spec.new(file)
9
+
10
+ context(spec.description) do
11
+
12
+ before(:all) do
13
+
14
+ class Mongo::Address
15
+
16
+ private
17
+
18
+ def initialize_resolver!(timeout, ssl_options)
19
+ family = (host == 'localhost') ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
20
+ info = ::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM)
21
+ FAMILY_MAP[info.first[4]].new(info[3], port, host)
22
+ end
23
+ end
24
+
25
+ class Mongo::Server
26
+
27
+ # The constructor keeps the same API, but does not instantiate a
28
+ # monitor and run it.
29
+ def initialize(address, cluster, monitoring, event_listeners, options = {})
30
+ @address = address
31
+ @cluster = cluster
32
+ @monitoring = monitoring
33
+ @options = options.freeze
34
+ @monitor = Monitor.new(address, event_listeners, options)
35
+ end
36
+
37
+ # Disconnect simply needs to return true since we have no monitor and
38
+ # no connection.
39
+ def disconnect!; true; end
40
+ end
41
+ end
42
+
43
+ after(:all) do
44
+
45
+ # Return the server implementation to its original for the other
46
+ # tests in the suite.
47
+ class Mongo::Server
48
+
49
+ # Returns the constructor to its original implementation.
50
+ def initialize(address, cluster, monitoring, event_listeners, options = {})
51
+ @address = address
52
+ @cluster = cluster
53
+ @monitoring = monitoring
54
+ @options = options.freeze
55
+ @monitor = Monitor.new(address, event_listeners, options)
56
+ @monitor.scan!
57
+ @monitor.run!
58
+ end
59
+
60
+ # Returns disconnect! to its original implementation.
61
+ def disconnect!
62
+ context.with_connection do |connection|
63
+ connection.disconnect!
64
+ end
65
+ @monitor.stop! and true
66
+ end
67
+ end
68
+
69
+ class Mongo::Address
70
+
71
+ private
72
+
73
+ def initialize_resolver!(timeout, ssl_options)
74
+ family = (host == 'localhost') ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
75
+ error = nil
76
+ ::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).each do |info|
77
+ begin
78
+ res = FAMILY_MAP[info[4]].new(info[3], port, host)
79
+ res.socket(timeout, ssl_options).connect!.close
80
+ return res
81
+ rescue IOError, SystemCallError, Error::SocketError => e
82
+ error = e
83
+ end
84
+ end
85
+ raise error
86
+ end
87
+ end
88
+ end
89
+
90
+ spec.tests.each_with_index do |test, index|
91
+
92
+ context "when a #{test.description} is provided" do
93
+
94
+
95
+ context 'when the uri is invalid', unless: test.valid? do
96
+
97
+ it 'raises an error' do
98
+ expect{
99
+ test.uri
100
+ }.to raise_exception(Mongo::Error::InvalidURI)
101
+ end
102
+ end
103
+
104
+ context 'when the uri should warn', if: test.warn? do
105
+
106
+ before do
107
+ expect(Mongo::Logger.logger).to receive(:warn)
108
+ end
109
+
110
+ it 'warns' do
111
+ expect(test.client).to be_a(Mongo::Client)
112
+ end
113
+ end
114
+
115
+ context 'when the uri is valid', if: test.valid? do
116
+
117
+ it 'does not raise an exception' do
118
+ expect(test.uri).to be_a(Mongo::URI)
119
+ end
120
+
121
+ it 'creates a client with the correct hosts' do
122
+ expect(test.client).to have_hosts(test)
123
+ end
124
+
125
+ it 'creates a client with the correct authentication properties' do
126
+ expect(test.client).to match_auth(test)
127
+ end
128
+
129
+ it 'creates a client with the correct options' do
130
+ expect(test.client).to match_options(test)
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -195,7 +195,7 @@ describe Mongo::Database do
195
195
  end
196
196
 
197
197
  let(:client) do
198
- authorized_client.with(server_selection_timeout: 2)
198
+ authorized_client.with(server_selection_timeout: 0.1)
199
199
  end
200
200
 
201
201
  let(:database) do
@@ -278,7 +278,7 @@ describe Mongo::Database do
278
278
  shared_context 'a GridFS database' do
279
279
 
280
280
  it 'returns a Grid::FS for the db' do
281
- expect(fs).to be_a(Mongo::Grid::FS)
281
+ expect(fs).to be_a(Mongo::Grid::FSBucket)
282
282
  end
283
283
 
284
284
  context 'when operating on the fs' do
@@ -292,8 +292,8 @@ describe Mongo::Database do
292
292
  end
293
293
 
294
294
  after do
295
- fs.files_collection.find.delete_many
296
- fs.chunks_collection.find.delete_many
295
+ fs.files_collection.delete_many
296
+ fs.chunks_collection.delete_many
297
297
  end
298
298
 
299
299
  let(:from_db) do
@@ -301,7 +301,7 @@ describe Mongo::Database do
301
301
  end
302
302
 
303
303
  it 'returns the assembled file from the db' do
304
- expect(from_db.filename).to eq(file.metadata.filename)
304
+ expect(from_db.filename).to eq(file.info.filename)
305
305
  end
306
306
  end
307
307
  end
@@ -317,15 +317,31 @@ describe Mongo::Database do
317
317
 
318
318
  context 'when a custom prefix is provided' do
319
319
 
320
- let(:fs) do
321
- database.fs(:fs_name => 'grid')
322
- end
320
+ context 'when the option is fs_name' do
321
+
322
+ let(:fs) do
323
+ database.fs(:fs_name => 'grid')
324
+ end
323
325
 
324
- it 'sets the custom prefix' do
325
- expect(fs.prefix).to eq('grid')
326
+ it 'sets the custom prefix' do
327
+ expect(fs.prefix).to eq('grid')
328
+ end
329
+
330
+ it_behaves_like 'a GridFS database'
326
331
  end
327
332
 
328
- it_behaves_like 'a GridFS database'
333
+ context 'when the option is bucket_name' do
334
+
335
+ let(:fs) do
336
+ database.fs(:bucket_name => 'grid')
337
+ end
338
+
339
+ it 'sets the custom prefix' do
340
+ expect(fs.prefix).to eq('grid')
341
+ end
342
+
343
+ it_behaves_like 'a GridFS database'
344
+ end
329
345
  end
330
346
  end
331
347
  end
@@ -10,8 +10,8 @@ describe Mongo::Grid::File::Chunk do
10
10
  BSON::ObjectId.new
11
11
  end
12
12
 
13
- let(:metadata) do
14
- Mongo::Grid::File::Metadata.new(:files_id => file_id)
13
+ let(:file_info) do
14
+ Mongo::Grid::File::Info.new(:files_id => file_id)
15
15
  end
16
16
 
17
17
  describe '#==' do
@@ -72,7 +72,7 @@ describe Mongo::Grid::File::Chunk do
72
72
  end
73
73
 
74
74
  let(:chunks) do
75
- described_class.split(raw_data, metadata)
75
+ described_class.split(raw_data, file_info)
76
76
  end
77
77
 
78
78
  it 'returns the chunks assembled into the raw data' do
@@ -157,7 +157,7 @@ describe Mongo::Grid::File::Chunk do
157
157
  end
158
158
 
159
159
  let(:chunks) do
160
- described_class.split(raw_data, metadata)
160
+ described_class.split(raw_data, file_info)
161
161
  end
162
162
 
163
163
  let(:chunk) do
@@ -204,7 +204,7 @@ describe Mongo::Grid::File::Chunk do
204
204
  end
205
205
 
206
206
  let(:chunks) do
207
- described_class.split(raw_data, metadata)
207
+ described_class.split(raw_data, file_info)
208
208
  end
209
209
 
210
210
  it 'returns the correct number of chunks' do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Grid::File::Metadata do
3
+ describe Mongo::Grid::File::Info do
4
4
 
5
5
  describe '#==' do
6
6
 
@@ -8,23 +8,23 @@ describe Mongo::Grid::File::Metadata do
8
8
  Time.now.utc
9
9
  end
10
10
 
11
- let(:metadata) do
11
+ let(:info) do
12
12
  described_class.new(:filename => 'test.txt', :length => 7, :uploadDate => upload_date)
13
13
  end
14
14
 
15
- context 'when the other is not metadata' do
15
+ context 'when the other is not a file info object' do
16
16
 
17
17
  it 'returns false' do
18
- expect(metadata).to_not eq('test')
18
+ expect(info).to_not eq('test')
19
19
  end
20
20
  end
21
21
 
22
- context 'when the other object is metadata' do
22
+ context 'when the other object is file info object' do
23
23
 
24
24
  context 'when the documents are equal' do
25
25
 
26
26
  it 'returns true' do
27
- expect(metadata).to eq(metadata)
27
+ expect(info).to eq(info)
28
28
  end
29
29
  end
30
30
 
@@ -35,7 +35,7 @@ describe Mongo::Grid::File::Metadata do
35
35
  end
36
36
 
37
37
  it 'returns false' do
38
- expect(metadata).to_not eq(other)
38
+ expect(info).to_not eq(other)
39
39
  end
40
40
  end
41
41
  end
@@ -45,48 +45,60 @@ describe Mongo::Grid::File::Metadata do
45
45
 
46
46
  context 'when provided only a filename and length' do
47
47
 
48
- let(:metadata) do
48
+ let(:info) do
49
49
  described_class.new(:filename => 'test.txt', :length => 7)
50
50
  end
51
51
 
52
52
  it 'sets the default id' do
53
- expect(metadata.id).to be_a(BSON::ObjectId)
53
+ expect(info.id).to be_a(BSON::ObjectId)
54
54
  end
55
55
 
56
56
  it 'sets the upload date' do
57
- expect(metadata.upload_date).to be_a(Time)
57
+ expect(info.upload_date).to be_a(Time)
58
58
  end
59
59
 
60
60
  it 'sets the chunk size' do
61
- expect(metadata.chunk_size).to eq(Mongo::Grid::File::Chunk::DEFAULT_SIZE)
61
+ expect(info.chunk_size).to eq(Mongo::Grid::File::Chunk::DEFAULT_SIZE)
62
62
  end
63
63
 
64
64
  it 'sets the content type' do
65
- expect(metadata.content_type).to eq(Mongo::Grid::File::Metadata::DEFAULT_CONTENT_TYPE)
65
+ expect(info.content_type).to eq(Mongo::Grid::File::Info::DEFAULT_CONTENT_TYPE)
66
66
  end
67
67
  end
68
68
  end
69
69
 
70
70
  describe '#inspect' do
71
71
 
72
- let(:metadata) do
72
+ let(:info) do
73
73
  described_class.new(:filename => 'test.txt', :length => 7)
74
74
  end
75
75
 
76
76
  it 'includes the chunk size' do
77
- expect(metadata.inspect).to include(metadata.chunk_size.to_s)
77
+ expect(info.inspect).to include(info.chunk_size.to_s)
78
78
  end
79
79
 
80
80
  it 'includes the filename' do
81
- expect(metadata.inspect).to include(metadata.filename)
81
+ expect(info.inspect).to include(info.filename)
82
82
  end
83
83
 
84
84
  it 'includes the md5' do
85
- expect(metadata.inspect).to include(metadata.md5.to_s)
85
+ expect(info.inspect).to include(info.md5.to_s)
86
86
  end
87
87
 
88
88
  it 'includes the id' do
89
- expect(metadata.inspect).to include(metadata.id.to_s)
89
+ expect(info.inspect).to include(info.id.to_s)
90
+ end
91
+ end
92
+
93
+ context 'when there are extra options' do
94
+
95
+ let(:info) do
96
+ described_class.new(:filename => 'test.txt', :extra_field => 'extra')
97
+ end
98
+
99
+ it 'does not include them in the document written to the database' do
100
+ expect(info.document['extra_field']).to be_nil
101
+ expect(info.document[:extra_field]).to be_nil
90
102
  end
91
103
  end
92
104
  end
@@ -51,7 +51,7 @@ describe Mongo::Grid::File do
51
51
  (1..data_size).each{ |i| data << '1' }
52
52
  end
53
53
 
54
- context 'when provided data and metadata' do
54
+ context 'when provided data and file information' do
55
55
 
56
56
  let(:file) do
57
57
  described_class.new(data, :filename => 'test.txt')
@@ -118,31 +118,31 @@ describe Mongo::Grid::File do
118
118
  end
119
119
  end
120
120
 
121
- context 'when provided chunks and metadata' do
121
+ context 'when provided chunks and file information' do
122
122
 
123
123
  let(:file_id) do
124
124
  BSON::ObjectId.new
125
125
  end
126
126
 
127
- let(:metadata) do
127
+ let(:info) do
128
128
  BSON::Document.new(
129
129
  :_id => file_id,
130
130
  :uploadDate => Time.now.utc,
131
131
  :filename => 'test.txt',
132
132
  :chunkSize => Mongo::Grid::File::Chunk::DEFAULT_SIZE,
133
133
  :length => data.length,
134
- :contentType => Mongo::Grid::File::Metadata::DEFAULT_CONTENT_TYPE
134
+ :contentType => Mongo::Grid::File::Info::DEFAULT_CONTENT_TYPE
135
135
  )
136
136
  end
137
137
 
138
138
  let(:chunks) do
139
139
  Mongo::Grid::File::Chunk.split(
140
- data, Mongo::Grid::File::Metadata.new(metadata)
140
+ data, Mongo::Grid::File::Info.new(info)
141
141
  ).map{ |chunk| chunk.document }
142
142
  end
143
143
 
144
144
  let(:file) do
145
- described_class.new(chunks, metadata)
145
+ described_class.new(chunks, info)
146
146
  end
147
147
 
148
148
  it 'sets the chunks' do
@@ -153,8 +153,8 @@ describe Mongo::Grid::File do
153
153
  expect(file.data).to eq(data)
154
154
  end
155
155
 
156
- it 'sets the metadata' do
157
- expect(file.metadata.id).to eq(metadata[:_id])
156
+ it 'sets the file information' do
157
+ expect(file.info.id).to eq(info[:_id])
158
158
  end
159
159
  end
160
160
  end