mongo 2.1.2 → 2.2.0.rc0

Sign up to get free protection for your applications and to get access to all the features.
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'