mongo 2.1.2 → 2.2.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 (140) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +10 -3
  5. data/Rakefile +1 -7
  6. data/lib/csasl/csasl.bundle +0 -0
  7. data/lib/mongo/auth/user/view.rb +1 -1
  8. data/lib/mongo/bulk_write.rb +7 -1
  9. data/lib/mongo/client.rb +17 -15
  10. data/lib/mongo/cluster.rb +4 -2
  11. data/lib/mongo/collection.rb +36 -2
  12. data/lib/mongo/collection/view.rb +24 -21
  13. data/lib/mongo/collection/view/aggregation.rb +5 -42
  14. data/lib/mongo/collection/view/builder.rb +20 -0
  15. data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
  16. data/lib/mongo/collection/view/builder/find_command.rb +111 -0
  17. data/lib/mongo/collection/view/builder/flags.rb +62 -0
  18. data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
  19. data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
  20. data/lib/mongo/collection/view/builder/op_query.rb +83 -0
  21. data/lib/mongo/collection/view/explainable.rb +15 -0
  22. data/lib/mongo/collection/view/immutable.rb +5 -12
  23. data/lib/mongo/collection/view/iterable.rb +24 -2
  24. data/lib/mongo/collection/view/map_reduce.rb +18 -27
  25. data/lib/mongo/collection/view/readable.rb +70 -112
  26. data/lib/mongo/collection/view/writable.rb +23 -7
  27. data/lib/mongo/cursor.rb +76 -25
  28. data/lib/mongo/cursor/builder.rb +18 -0
  29. data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
  30. data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
  31. data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
  32. data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
  33. data/lib/mongo/database.rb +2 -2
  34. data/lib/mongo/database/view.rb +9 -5
  35. data/lib/mongo/dbref.rb +3 -3
  36. data/lib/mongo/error.rb +1 -0
  37. data/lib/mongo/error/invalid_write_concern.rb +35 -0
  38. data/lib/mongo/grid/file/chunk.rb +2 -2
  39. data/lib/mongo/index/view.rb +5 -2
  40. data/lib/mongo/operation.rb +1 -0
  41. data/lib/mongo/operation/commands.rb +2 -0
  42. data/lib/mongo/operation/commands/aggregate.rb +39 -45
  43. data/lib/mongo/operation/commands/aggregate/result.rb +54 -68
  44. data/lib/mongo/operation/commands/collections_info.rb +38 -36
  45. data/lib/mongo/operation/commands/collections_info/result.rb +17 -15
  46. data/lib/mongo/operation/commands/command.rb +24 -22
  47. data/lib/mongo/operation/commands/find.rb +27 -0
  48. data/lib/mongo/operation/commands/find/result.rb +62 -0
  49. data/lib/mongo/operation/commands/get_more.rb +27 -0
  50. data/lib/mongo/operation/commands/get_more/result.rb +62 -0
  51. data/lib/mongo/operation/commands/indexes.rb +41 -39
  52. data/lib/mongo/operation/commands/list_collections.rb +25 -31
  53. data/lib/mongo/operation/commands/list_collections/result.rb +63 -81
  54. data/lib/mongo/operation/commands/list_indexes.rb +27 -35
  55. data/lib/mongo/operation/commands/list_indexes/result.rb +67 -85
  56. data/lib/mongo/operation/commands/map_reduce.rb +29 -37
  57. data/lib/mongo/operation/commands/map_reduce/result.rb +85 -88
  58. data/lib/mongo/operation/commands/parallel_scan.rb +29 -33
  59. data/lib/mongo/operation/commands/parallel_scan/result.rb +34 -42
  60. data/lib/mongo/operation/commands/user_query.rb +40 -38
  61. data/lib/mongo/operation/commands/users_info.rb +24 -29
  62. data/lib/mongo/operation/commands/users_info/result.rb +13 -11
  63. data/lib/mongo/operation/object_id_generator.rb +36 -0
  64. data/lib/mongo/operation/result.rb +30 -0
  65. data/lib/mongo/operation/specifiable.rb +35 -1
  66. data/lib/mongo/operation/write/bulk/bulkable.rb +4 -3
  67. data/lib/mongo/operation/write/bulk/delete/result.rb +18 -25
  68. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +2 -2
  69. data/lib/mongo/operation/write/command/delete.rb +3 -2
  70. data/lib/mongo/operation/write/command/insert.rb +4 -2
  71. data/lib/mongo/operation/write/command/update.rb +6 -3
  72. data/lib/mongo/operation/write/gle.rb +2 -1
  73. data/lib/mongo/operation/write/idable.rb +19 -2
  74. data/lib/mongo/options/mapper.rb +22 -0
  75. data/lib/mongo/protocol/bit_vector.rb +3 -3
  76. data/lib/mongo/protocol/delete.rb +15 -5
  77. data/lib/mongo/protocol/get_more.rb +10 -5
  78. data/lib/mongo/protocol/insert.rb +1 -6
  79. data/lib/mongo/protocol/kill_cursors.rb +14 -1
  80. data/lib/mongo/protocol/message.rb +32 -8
  81. data/lib/mongo/protocol/serializers.rb +15 -16
  82. data/lib/mongo/protocol/update.rb +35 -12
  83. data/lib/mongo/server/connectable.rb +3 -1
  84. data/lib/mongo/server/connection.rb +5 -5
  85. data/lib/mongo/server/description.rb +8 -2
  86. data/lib/mongo/server/description/features.rb +2 -1
  87. data/lib/mongo/server/monitor.rb +1 -12
  88. data/lib/mongo/server/monitor/connection.rb +30 -26
  89. data/lib/mongo/server_selector/selectable.rb +21 -4
  90. data/lib/mongo/uri.rb +2 -0
  91. data/lib/mongo/version.rb +1 -1
  92. data/lib/mongo/write_concern.rb +21 -6
  93. data/mongo.gemspec +1 -2
  94. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +13 -0
  95. data/spec/mongo/bulk_write_spec.rb +58 -0
  96. data/spec/mongo/client_spec.rb +6 -4
  97. data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
  98. data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
  99. data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
  100. data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
  101. data/spec/mongo/collection/view/explainable_spec.rb +1 -2
  102. data/spec/mongo/collection/view/immutable_spec.rb +3 -52
  103. data/spec/mongo/collection/view/map_reduce_spec.rb +12 -12
  104. data/spec/mongo/collection/view/readable_spec.rb +86 -80
  105. data/spec/mongo/collection/view_spec.rb +109 -703
  106. data/spec/mongo/collection_spec.rb +594 -11
  107. data/spec/mongo/command_monitoring_spec.rb +40 -27
  108. data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
  109. data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
  110. data/spec/mongo/cursor_spec.rb +10 -60
  111. data/spec/mongo/database_spec.rb +24 -3
  112. data/spec/mongo/dbref_spec.rb +4 -4
  113. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  114. data/spec/mongo/grid/fs_bucket_spec.rb +3 -3
  115. data/spec/mongo/index/view_spec.rb +41 -0
  116. data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
  117. data/spec/mongo/operation/commands/aggregate_spec.rb +1 -1
  118. data/spec/mongo/operation/commands/collections_info_spec.rb +1 -1
  119. data/spec/mongo/operation/commands/command_spec.rb +1 -1
  120. data/spec/mongo/operation/commands/indexes_spec.rb +1 -1
  121. data/spec/mongo/operation/commands/map_reduce_spec.rb +1 -1
  122. data/spec/mongo/operation/write/command/delete_spec.rb +25 -0
  123. data/spec/mongo/operation/write/command/insert_spec.rb +25 -0
  124. data/spec/mongo/operation/write/command/update_spec.rb +25 -0
  125. data/spec/mongo/protocol/delete_spec.rb +4 -4
  126. data/spec/mongo/protocol/get_more_spec.rb +4 -4
  127. data/spec/mongo/protocol/insert_spec.rb +3 -3
  128. data/spec/mongo/protocol/kill_cursors_spec.rb +3 -3
  129. data/spec/mongo/protocol/query_spec.rb +7 -7
  130. data/spec/mongo/protocol/update_spec.rb +5 -5
  131. data/spec/mongo/server/description/features_spec.rb +25 -0
  132. data/spec/mongo/write_concern_spec.rb +126 -0
  133. data/spec/spec_helper.rb +9 -19
  134. data/spec/support/command_monitoring.rb +8 -0
  135. data/spec/support/command_monitoring/find.yml +53 -4
  136. data/spec/support/matchers.rb +1 -1
  137. data/spec/support/shared/protocol.rb +5 -5
  138. data/spec/support/travis.rb +1 -1
  139. metadata +43 -10
  140. metadata.gz.sig +0 -0
@@ -14,24 +14,26 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
- class CollectionsInfo
17
+ module Commands
18
+ class CollectionsInfo
18
19
 
19
- # Defines custom behaviour of results when query the system.namespaces
20
- # collection.
21
- #
22
- # @since 2.1.0
23
- class Result < Operation::Result
24
-
25
- # Get the namespace for the cursor.
26
- #
27
- # @example Get the namespace.
28
- # result.namespace
29
- #
30
- # @return [ String ] The namespace.
20
+ # Defines custom behaviour of results when query the system.namespaces
21
+ # collection.
31
22
  #
32
23
  # @since 2.1.0
33
- def namespace
34
- Database::NAMESPACES
24
+ class Result < Operation::Result
25
+
26
+ # Get the namespace for the cursor.
27
+ #
28
+ # @example Get the namespace.
29
+ # result.namespace
30
+ #
31
+ # @return [ String ] The namespace.
32
+ #
33
+ # @since 2.1.0
34
+ def namespace
35
+ Database::NAMESPACES
36
+ end
35
37
  end
36
38
  end
37
39
  end
@@ -14,31 +14,33 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
+ module Commands
17
18
 
18
- # A MongoDB command operation.
19
- #
20
- # @example Create the command operation.
21
- # Mongo::Operation::Command.new({ :selector => { :isMaster => 1 } })
22
- #
23
- # Initialization:
24
- # param [ Hash ] spec The specifications for the command.
25
- #
26
- # option spec :selector [ Hash ] The command selector.
27
- # option spec :db_name [ String ] The name of the database on which
28
- # the command should be executed.
29
- # option spec :options [ Hash ] Options for the command.
30
- #
31
- # @since 2.0.0
32
- class Command
33
- include Specifiable
34
- include Limited
35
- include ReadPreference
36
- include Executable
19
+ # A MongoDB command operation.
20
+ #
21
+ # @example Create the command operation.
22
+ # Mongo::Operation::Command.new({ :selector => { :isMaster => 1 } })
23
+ #
24
+ # Initialization:
25
+ # param [ Hash ] spec The specifications for the command.
26
+ #
27
+ # option spec :selector [ Hash ] The command selector.
28
+ # option spec :db_name [ String ] The name of the database on which
29
+ # the command should be executed.
30
+ # option spec :options [ Hash ] Options for the command.
31
+ #
32
+ # @since 2.0.0
33
+ class Command
34
+ include Specifiable
35
+ include Limited
36
+ include ReadPreference
37
+ include Executable
37
38
 
38
- private
39
+ private
39
40
 
40
- def query_coll
41
- Database::COMMAND
41
+ def query_coll
42
+ Database::COMMAND
43
+ end
42
44
  end
43
45
  end
44
46
  end
@@ -0,0 +1,27 @@
1
+ # Copyright (C) 2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Operation
17
+ module Commands
18
+
19
+ # Encapsulates behaviour for executing a find command.
20
+ #
21
+ # @since 2.2.0
22
+ class Find < Command; end
23
+ end
24
+ end
25
+ end
26
+
27
+ require 'mongo/operation/commands/find/result'
@@ -0,0 +1,62 @@
1
+ # Copyright (C) 2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Operation
17
+ module Commands
18
+ class Find
19
+
20
+ # Defines custom behaviour of results in find command.
21
+ #
22
+ # @since 2.2.0
23
+ class Result < Operation::Result
24
+
25
+ # Get the cursor id.
26
+ #
27
+ # @example Get the cursor id.
28
+ # result.cursor_id
29
+ #
30
+ # @return [ Integer ] The cursor id.
31
+ #
32
+ # @since 2.2.0
33
+ def cursor_id
34
+ cursor_document ? cursor_document[CURSOR_ID] : super
35
+ end
36
+
37
+ # Get the documents in the result.
38
+ #
39
+ # @example Get the documents.
40
+ # result.documents
41
+ #
42
+ # @return [ Array<BSON::Document> ] The documents.
43
+ #
44
+ # @since 2.2.0
45
+ def documents
46
+ cursor_document[FIRST_BATCH]
47
+ end
48
+
49
+ private
50
+
51
+ def cursor_document
52
+ @cursor_document ||= reply.documents[0][CURSOR]
53
+ end
54
+
55
+ def first_document
56
+ @first_document ||= reply.documents[0]
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,27 @@
1
+ # Copyright (C) 2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Operation
17
+ module Commands
18
+
19
+ # Encapsulates behaviour for executing a getmore command.
20
+ #
21
+ # @since 2.2.0
22
+ class GetMore < Command; end
23
+ end
24
+ end
25
+ end
26
+
27
+ require 'mongo/operation/commands/get_more/result'
@@ -0,0 +1,62 @@
1
+ # Copyright (C) 2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Operation
17
+ module Commands
18
+ class GetMore
19
+
20
+ # Defines custom behaviour of results for the get more command.
21
+ #
22
+ # @since 2.2.0
23
+ class Result < Operation::Result
24
+
25
+ # Get the cursor id.
26
+ #
27
+ # @example Get the cursor id.
28
+ # result.cursor_id
29
+ #
30
+ # @return [ Integer ] The cursor id.
31
+ #
32
+ # @since 2.2.0
33
+ def cursor_id
34
+ cursor_document ? cursor_document[CURSOR_ID] : super
35
+ end
36
+
37
+ # Get the documents in the result.
38
+ #
39
+ # @example Get the documents.
40
+ # result.documents
41
+ #
42
+ # @return [ Array<BSON::Document> ] The documents.
43
+ #
44
+ # @since 2.2.0
45
+ def documents
46
+ cursor_document[NEXT_BATCH]
47
+ end
48
+
49
+ private
50
+
51
+ def cursor_document
52
+ @cursor_document ||= reply.documents[0][CURSOR]
53
+ end
54
+
55
+ def first_document
56
+ @first_document ||= reply.documents[0]
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -14,56 +14,58 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
+ module Commands
17
18
 
18
- # A MongoDB get indexes operation.
19
- #
20
- # Initialize the get indexes operation.
21
- #
22
- # @example Instantiate the operation.
23
- # Read::Indexes.new(:db_name => 'test', :coll_name => 'test_coll')
24
- #
25
- # Initialization:
26
- # param [ Hash ] spec The specifications for the insert.
27
- #
28
- # option spec :db_name [ String ] The name of the database.
29
- # option spec :coll_name [ String ] The name of the collection.
30
- #
31
- # @since 2.0.0
32
- class Indexes
33
- include Specifiable
34
- include ReadPreference
35
-
36
- # Execute the operation.
37
- # The context gets a connection on which the operation
38
- # is sent in the block.
19
+ # A MongoDB get indexes operation.
20
+ #
21
+ # Initialize the get indexes operation.
22
+ #
23
+ # @example Instantiate the operation.
24
+ # Read::Indexes.new(:db_name => 'test', :coll_name => 'test_coll')
39
25
  #
40
- # @param [ Mongo::Server::Context ] context The context for this operation.
26
+ # Initialization:
27
+ # param [ Hash ] spec The specifications for the insert.
41
28
  #
42
- # @return [ Result ] The indexes operation response.
29
+ # option spec :db_name [ String ] The name of the database.
30
+ # option spec :coll_name [ String ] The name of the collection.
43
31
  #
44
32
  # @since 2.0.0
45
- def execute(context)
46
- if context.features.list_indexes_enabled?
47
- ListIndexes.new(spec).execute(context)
48
- else
49
- execute_message(context)
33
+ class Indexes
34
+ include Specifiable
35
+ include ReadPreference
36
+
37
+ # Execute the operation.
38
+ # The context gets a connection on which the operation
39
+ # is sent in the block.
40
+ #
41
+ # @param [ Mongo::Server::Context ] context The context for this operation.
42
+ #
43
+ # @return [ Result ] The indexes operation response.
44
+ #
45
+ # @since 2.0.0
46
+ def execute(context)
47
+ if context.features.list_indexes_enabled?
48
+ ListIndexes.new(spec).execute(context)
49
+ else
50
+ execute_message(context)
51
+ end
50
52
  end
51
- end
52
53
 
53
- private
54
+ private
54
55
 
55
- def execute_message(context)
56
- context.with_connection do |connection|
57
- Result.new(connection.dispatch([ message(context) ]))
56
+ def execute_message(context)
57
+ context.with_connection do |connection|
58
+ Result.new(connection.dispatch([ message(context) ]))
59
+ end
58
60
  end
59
- end
60
61
 
61
- def selector
62
- { ns: namespace }
63
- end
62
+ def selector
63
+ { ns: namespace }
64
+ end
64
65
 
65
- def query_coll
66
- Index::COLLECTION
66
+ def query_coll
67
+ Index::COLLECTION
68
+ end
67
69
  end
68
70
  end
69
71
  end
@@ -12,43 +12,37 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'mongo/operation/commands/list_collections/result'
16
-
17
15
  module Mongo
18
16
  module Operation
17
+ module Commands
19
18
 
20
- # A MongoDB listCollections command operation.
21
- #
22
- # @example Create the listCollections command operation.
23
- # Mongo::Operation::Read::ListCollections.new(db_name: 'test')
24
- #
25
- # @note A command is actually a query on the virtual '$cmd' collection.
26
- #
27
- # Initialization:
28
- # param [ Hash ] spec The specifications for the command.
29
- #
30
- # option spec :db_name [ String ] The name of the database whose list of
31
- # collection names is requested.
32
- # option spec :options [ Hash ] Options for the command.
33
- #
34
- # @since 2.0.0
35
- class ListCollections
36
- include Specifiable
37
- include Limited
38
- include Executable
39
- include ReadPreference
40
-
41
- private
19
+ # A MongoDB listCollections command operation.
20
+ #
21
+ # @example Create the listCollections command operation.
22
+ # Mongo::Operation::Read::ListCollections.new(db_name: 'test')
23
+ #
24
+ # @note A command is actually a query on the virtual '$cmd' collection.
25
+ #
26
+ # Initialization:
27
+ # param [ Hash ] spec The specifications for the command.
28
+ #
29
+ # option spec :db_name [ String ] The name of the database whose list of
30
+ # collection names is requested.
31
+ # option spec :options [ Hash ] Options for the command.
32
+ #
33
+ # @since 2.0.0
34
+ class ListCollections < Command
42
35
 
43
- def query_coll
44
- Database::COMMAND
45
- end
36
+ private
46
37
 
47
- def selector
48
- (spec[SELECTOR] || {}).merge(
49
- listCollections: 1, filter: { name: { '$not' => /system\.|\$/ }}
50
- )
38
+ def selector
39
+ (spec[SELECTOR] || {}).merge(
40
+ listCollections: 1, filter: { name: { '$not' => /system\.|\$/ }}
41
+ )
42
+ end
51
43
  end
52
44
  end
53
45
  end
54
46
  end
47
+
48
+ require 'mongo/operation/commands/list_collections/result'