mongoid 9.0.0 → 9.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/Rakefile +44 -21
  4. data/lib/config/locales/en.yml +20 -0
  5. data/lib/mongoid/association/accessors.rb +7 -2
  6. data/lib/mongoid/association/nested/one.rb +14 -1
  7. data/lib/mongoid/association/referenced/belongs_to/binding.rb +7 -1
  8. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  9. data/lib/mongoid/association/referenced/belongs_to.rb +15 -0
  10. data/lib/mongoid/association/referenced/has_many.rb +9 -8
  11. data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -8
  12. data/lib/mongoid/association/referenced/with_polymorphic_criteria.rb +41 -0
  13. data/lib/mongoid/atomic_update_preparer.rb +7 -6
  14. data/lib/mongoid/attributes/nested.rb +2 -1
  15. data/lib/mongoid/clients/sessions.rb +12 -15
  16. data/lib/mongoid/composable.rb +2 -0
  17. data/lib/mongoid/config.rb +9 -0
  18. data/lib/mongoid/contextual/aggregable/memory.rb +3 -2
  19. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -2
  20. data/lib/mongoid/criteria/findable.rb +2 -2
  21. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -1
  22. data/lib/mongoid/document.rb +2 -0
  23. data/lib/mongoid/errors/invalid_around_callback.rb +16 -0
  24. data/lib/mongoid/errors/unrecognized_model_alias.rb +53 -0
  25. data/lib/mongoid/errors/unrecognized_resolver.rb +27 -0
  26. data/lib/mongoid/errors/unregistered_class.rb +47 -0
  27. data/lib/mongoid/errors.rb +4 -0
  28. data/lib/mongoid/fields.rb +13 -7
  29. data/lib/mongoid/identifiable.rb +28 -0
  30. data/lib/mongoid/interceptable.rb +18 -13
  31. data/lib/mongoid/model_resolver.rb +154 -0
  32. data/lib/mongoid/persistence_context.rb +2 -1
  33. data/lib/mongoid/scopable.rb +7 -1
  34. data/lib/mongoid/touchable.rb +1 -7
  35. data/lib/mongoid/traversable.rb +5 -0
  36. data/lib/mongoid/version.rb +1 -1
  37. data/spec/integration/associations/belongs_to_spec.rb +129 -0
  38. data/spec/integration/persistence/collection_options_spec.rb +36 -0
  39. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -0
  40. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -0
  41. data/spec/mongoid/association/referenced/belongs_to_spec.rb +58 -21
  42. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +4 -0
  43. data/spec/mongoid/association_spec.rb +14 -0
  44. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  45. data/spec/mongoid/attributes_spec.rb +16 -0
  46. data/spec/mongoid/clients/transactions_spec.rb +2 -2
  47. data/spec/mongoid/contextual/aggregable/memory_spec.rb +11 -0
  48. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +11 -0
  49. data/spec/mongoid/contextual/mongo_spec.rb +72 -3
  50. data/spec/mongoid/fields_spec.rb +2 -2
  51. data/spec/mongoid/interceptable_spec.rb +31 -0
  52. data/spec/mongoid/model_resolver_spec.rb +167 -0
  53. data/spec/mongoid/monkey_patches_spec.rb +1 -1
  54. data/spec/mongoid/persistence_context_spec.rb +17 -4
  55. data/spec/mongoid/scopable_spec.rb +88 -85
  56. data/spec/mongoid/serializable_spec.rb +16 -9
  57. data/spec/mongoid/touchable_spec.rb +75 -0
  58. data/spec/mongoid/touchable_spec_models.rb +16 -0
  59. data/spec/support/models/band.rb +1 -0
  60. data/spec/support/models/lat_lng.rb +6 -0
  61. metadata +20 -82
  62. checksums.yaml.gz.sig +0 -1
  63. data/spec/shared/LICENSE +0 -20
  64. data/spec/shared/bin/get-mongodb-download-url +0 -17
  65. data/spec/shared/bin/s3-copy +0 -45
  66. data/spec/shared/bin/s3-upload +0 -69
  67. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  68. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  69. data/spec/shared/lib/mrss/constraints.rb +0 -378
  70. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  71. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  72. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  73. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  74. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  75. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  76. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  77. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  78. data/spec/shared/lib/mrss/utils.rb +0 -37
  79. data/spec/shared/share/Dockerfile.erb +0 -281
  80. data/spec/shared/share/haproxy-1.conf +0 -16
  81. data/spec/shared/share/haproxy-2.conf +0 -17
  82. data/spec/shared/shlib/config.sh +0 -27
  83. data/spec/shared/shlib/distro.sh +0 -74
  84. data/spec/shared/shlib/server.sh +0 -417
  85. data/spec/shared/shlib/set_env.sh +0 -146
  86. data.tar.gz.sig +0 -0
  87. metadata.gz.sig +0 -1
metadata CHANGED
@@ -1,41 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.0
4
+ version: 9.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - The MongoDB Ruby Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIEeDCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBBMREwDwYDVQQDDAhkYngt
14
- cnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZFgNj
15
- b20wHhcNMjQwMjA5MTc0NzIyWhcNMjUwMjA4MTc0NzIyWjBBMREwDwYDVQQDDAhk
16
- YngtcnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZ
17
- FgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC0/Veq9l47cTfX
18
- tQ+kHq2NOCwJuJGt1iXWQ/vH/yp7pZ/bLej7gPDl2CfIngAXRjM7r1FkR9ya7VAm
19
- IneBFcVU3HhpIXWi4ByXGjBOXFD1Dfbz4C4zedIWRk/hNzXa+rQY4KPwpOwG/hZg
20
- id+rSXWSbNlkyN97XfonweVh7JsIa9X/2JY9ADYjhCfEZF+b0+Wl7+jgwzLWb46I
21
- 0WH0bZBIZ0BbKAwUXIgvq5mQf9PzukmMVYCwnkJ/P4wrHO22HuwnbMyvJuGjVwqi
22
- j1NRp/2vjmKBFWxIfhlSXEIiqAmeEVNXzhPvTVeyo+rma+7R3Bo+4WHkcnPpXJJZ
23
- Jd63qXMvTB0GplEcMJPztWhrJOmcxIOVoQyigEPSQT8JpzFVXby4SGioizv2eT7l
24
- VYSiCHuc3yEDyq5M+98WGX2etbj6esYtzI3rDevpIAHPB6HQmtoJIA4dSl3gjFb+
25
- D+YQSuB2qYu021FI9zeY9sbZyWysEXBxhwrmTk+XUV0qz+OQZkMCAwEAAaN7MHkw
26
- CQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFH4nnr4tYlatU57RbExW
27
- jG86YM5nMB8GA1UdEQQYMBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMB8GA1UdEgQY
28
- MBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBKGtHA
29
- fpi3N/BL1J5O4CBsAjtF4jHDiw2r5MwK+66NzMh3uedjgPI7MoosemLy++SB+8BR
30
- SE8bDkb6gfDQQzrI6KSXXyqH2TbQXpY5Tac7/yqXRiu8G2qOrOj4czB/Hq7j09CV
31
- YoH88v6hL11i5jt6jPjFh8hXYG0hDQxhi3atRz5Wwd98tUf2DSbyJXJiRgCBeZjl
32
- rP7AnKsWMu0C+zPlL+nXtQr+nTFtkKXRWfUJMqePpBqtriQvgQ+Y1ItqYVTSLuiM
33
- iwUMcn/rGhdCMBSaKDXdFkIveCHQE2f2WBo2EdErrcTrgEKYYdNfzcb/43j7L1kx
34
- AUwyTtk+HFrviBynQbKN82rjbZE+5gukVea5c7idQPkqacPYsoU37DI+hTlUyJkV
35
- dcTtfEg44lLlfNukBslfiQf54r+uWbyB0m0rDUN/py7/Ghyzt5GLBU91uCO3dGoI
36
- 55uFRHMvEcJMTDeImC/nuucPCAiEGMHggr9+NPC0tqpxjGKTo7lS7GzUFjg=
37
- -----END CERTIFICATE-----
38
- date: 2024-05-01 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2024-09-20 00:00:00.000000000 Z
39
12
  dependencies:
40
13
  - !ruby/object:Gem::Dependency
41
14
  name: activemodel
@@ -46,7 +19,7 @@ dependencies:
46
19
  version: '5.1'
47
20
  - - "<"
48
21
  - !ruby/object:Gem::Version
49
- version: '7.2'
22
+ version: '7.3'
50
23
  - - "!="
51
24
  - !ruby/object:Gem::Version
52
25
  version: 7.0.0
@@ -59,7 +32,7 @@ dependencies:
59
32
  version: '5.1'
60
33
  - - "<"
61
34
  - !ruby/object:Gem::Version
62
- version: '7.2'
35
+ version: '7.3'
63
36
  - - "!="
64
37
  - !ruby/object:Gem::Version
65
38
  version: 7.0.0
@@ -195,6 +168,7 @@ files:
195
168
  - lib/mongoid/association/referenced/has_one/eager.rb
196
169
  - lib/mongoid/association/referenced/has_one/proxy.rb
197
170
  - lib/mongoid/association/referenced/syncable.rb
171
+ - lib/mongoid/association/referenced/with_polymorphic_criteria.rb
198
172
  - lib/mongoid/association/reflections.rb
199
173
  - lib/mongoid/association/relatable.rb
200
174
  - lib/mongoid/atomic.rb
@@ -305,6 +279,7 @@ files:
305
279
  - lib/mongoid/errors/empty_config_file.rb
306
280
  - lib/mongoid/errors/immutable_attribute.rb
307
281
  - lib/mongoid/errors/in_memory_collation_not_supported.rb
282
+ - lib/mongoid/errors/invalid_around_callback.rb
308
283
  - lib/mongoid/errors/invalid_async_query_executor.rb
309
284
  - lib/mongoid/errors/invalid_auto_encryption_configuration.rb
310
285
  - lib/mongoid/errors/invalid_collection.rb
@@ -361,6 +336,9 @@ files:
361
336
  - lib/mongoid/errors/transactions_not_supported.rb
362
337
  - lib/mongoid/errors/unknown_attribute.rb
363
338
  - lib/mongoid/errors/unknown_model.rb
339
+ - lib/mongoid/errors/unrecognized_model_alias.rb
340
+ - lib/mongoid/errors/unrecognized_resolver.rb
341
+ - lib/mongoid/errors/unregistered_class.rb
364
342
  - lib/mongoid/errors/unsaved_document.rb
365
343
  - lib/mongoid/errors/unsupported_javascript.rb
366
344
  - lib/mongoid/errors/validations.rb
@@ -399,6 +377,7 @@ files:
399
377
  - lib/mongoid/fields/validators.rb
400
378
  - lib/mongoid/fields/validators/macro.rb
401
379
  - lib/mongoid/findable.rb
380
+ - lib/mongoid/identifiable.rb
402
381
  - lib/mongoid/indexable.rb
403
382
  - lib/mongoid/indexable/specification.rb
404
383
  - lib/mongoid/indexable/validators/options.rb
@@ -439,6 +418,7 @@ files:
439
418
  - lib/mongoid/matcher/regex.rb
440
419
  - lib/mongoid/matcher/size.rb
441
420
  - lib/mongoid/matcher/type.rb
421
+ - lib/mongoid/model_resolver.rb
442
422
  - lib/mongoid/persistable.rb
443
423
  - lib/mongoid/persistable/creatable.rb
444
424
  - lib/mongoid/persistable/deletable.rb
@@ -604,6 +584,7 @@ files:
604
584
  - spec/integration/matcher_operator_data/type_undefined.yml
605
585
  - spec/integration/matcher_operator_spec.rb
606
586
  - spec/integration/matcher_spec.rb
587
+ - spec/integration/persistence/collection_options_spec.rb
607
588
  - spec/integration/persistence/range_field_spec.rb
608
589
  - spec/integration/server_query_spec.rb
609
590
  - spec/integration/shardable_spec.rb
@@ -854,6 +835,7 @@ files:
854
835
  - spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml
855
836
  - spec/mongoid/matcher/extract_attribute_data/traversal.yml
856
837
  - spec/mongoid/matcher/extract_attribute_spec.rb
838
+ - spec/mongoid/model_resolver_spec.rb
857
839
  - spec/mongoid/mongoizable_spec.rb
858
840
  - spec/mongoid/monkey_patches_spec.rb
859
841
  - spec/mongoid/persistable/creatable_spec.rb
@@ -912,29 +894,6 @@ files:
912
894
  - spec/mongoid_spec.rb
913
895
  - spec/rails/controller_extension/controller_runtime_spec.rb
914
896
  - spec/rails/mongoid_spec.rb
915
- - spec/shared/LICENSE
916
- - spec/shared/bin/get-mongodb-download-url
917
- - spec/shared/bin/s3-copy
918
- - spec/shared/bin/s3-upload
919
- - spec/shared/lib/mrss/child_process_helper.rb
920
- - spec/shared/lib/mrss/cluster_config.rb
921
- - spec/shared/lib/mrss/constraints.rb
922
- - spec/shared/lib/mrss/docker_runner.rb
923
- - spec/shared/lib/mrss/eg_config_utils.rb
924
- - spec/shared/lib/mrss/event_subscriber.rb
925
- - spec/shared/lib/mrss/lite_constraints.rb
926
- - spec/shared/lib/mrss/server_version_registry.rb
927
- - spec/shared/lib/mrss/session_registry.rb
928
- - spec/shared/lib/mrss/session_registry_legacy.rb
929
- - spec/shared/lib/mrss/spec_organizer.rb
930
- - spec/shared/lib/mrss/utils.rb
931
- - spec/shared/share/Dockerfile.erb
932
- - spec/shared/share/haproxy-1.conf
933
- - spec/shared/share/haproxy-2.conf
934
- - spec/shared/shlib/config.sh
935
- - spec/shared/shlib/distro.sh
936
- - spec/shared/shlib/server.sh
937
- - spec/shared/shlib/set_env.sh
938
897
  - spec/spec_helper.rb
939
898
  - spec/support/authorization.rb
940
899
  - spec/support/client_registry.rb
@@ -1229,7 +1188,7 @@ metadata:
1229
1188
  documentation_uri: https://www.mongodb.com/docs/mongoid/
1230
1189
  homepage_uri: https://mongoid.org/
1231
1190
  source_code_uri: https://github.com/mongodb/mongoid
1232
- post_install_message:
1191
+ post_install_message:
1233
1192
  rdoc_options: []
1234
1193
  require_paths:
1235
1194
  - lib
@@ -1244,8 +1203,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1244
1203
  - !ruby/object:Gem::Version
1245
1204
  version: 1.3.6
1246
1205
  requirements: []
1247
- rubygems_version: 3.3.15
1248
- signing_key:
1206
+ rubygems_version: 3.4.19
1207
+ signing_key:
1249
1208
  specification_version: 4
1250
1209
  summary: Elegant Persistence in Ruby for MongoDB.
1251
1210
  test_files:
@@ -1347,6 +1306,7 @@ test_files:
1347
1306
  - spec/integration/matcher_operator_data/type_undefined.yml
1348
1307
  - spec/integration/matcher_operator_spec.rb
1349
1308
  - spec/integration/matcher_spec.rb
1309
+ - spec/integration/persistence/collection_options_spec.rb
1350
1310
  - spec/integration/persistence/range_field_spec.rb
1351
1311
  - spec/integration/server_query_spec.rb
1352
1312
  - spec/integration/shardable_spec.rb
@@ -1597,6 +1557,7 @@ test_files:
1597
1557
  - spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml
1598
1558
  - spec/mongoid/matcher/extract_attribute_data/traversal.yml
1599
1559
  - spec/mongoid/matcher/extract_attribute_spec.rb
1560
+ - spec/mongoid/model_resolver_spec.rb
1600
1561
  - spec/mongoid/mongoizable_spec.rb
1601
1562
  - spec/mongoid/monkey_patches_spec.rb
1602
1563
  - spec/mongoid/persistable/creatable_spec.rb
@@ -1655,29 +1616,6 @@ test_files:
1655
1616
  - spec/mongoid_spec.rb
1656
1617
  - spec/rails/controller_extension/controller_runtime_spec.rb
1657
1618
  - spec/rails/mongoid_spec.rb
1658
- - spec/shared/LICENSE
1659
- - spec/shared/bin/get-mongodb-download-url
1660
- - spec/shared/bin/s3-copy
1661
- - spec/shared/bin/s3-upload
1662
- - spec/shared/lib/mrss/child_process_helper.rb
1663
- - spec/shared/lib/mrss/cluster_config.rb
1664
- - spec/shared/lib/mrss/constraints.rb
1665
- - spec/shared/lib/mrss/docker_runner.rb
1666
- - spec/shared/lib/mrss/eg_config_utils.rb
1667
- - spec/shared/lib/mrss/event_subscriber.rb
1668
- - spec/shared/lib/mrss/lite_constraints.rb
1669
- - spec/shared/lib/mrss/server_version_registry.rb
1670
- - spec/shared/lib/mrss/session_registry.rb
1671
- - spec/shared/lib/mrss/session_registry_legacy.rb
1672
- - spec/shared/lib/mrss/spec_organizer.rb
1673
- - spec/shared/lib/mrss/utils.rb
1674
- - spec/shared/share/Dockerfile.erb
1675
- - spec/shared/share/haproxy-1.conf
1676
- - spec/shared/share/haproxy-2.conf
1677
- - spec/shared/shlib/config.sh
1678
- - spec/shared/shlib/distro.sh
1679
- - spec/shared/shlib/server.sh
1680
- - spec/shared/shlib/set_env.sh
1681
1619
  - spec/spec_helper.rb
1682
1620
  - spec/support/authorization.rb
1683
1621
  - spec/support/client_registry.rb
checksums.yaml.gz.sig DELETED
@@ -1 +0,0 @@
1
- :6����K�ZP�����恦��gO��h3yL���yٍA=��Pve�����T����HߺL�*�m(F!t1�]����\
data/spec/shared/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2020 MongoDB, Inc.
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- desired_version, arch = ARGV
4
- if arch.nil?
5
- STDERR.puts "Usage: get-mongodb-download-url desired-version arch"
6
- exit 1
7
- end
8
-
9
- $: << File.join(File.dirname(__FILE__), '../lib')
10
- require 'mrss/server_version_registry'
11
-
12
- begin
13
- puts Mrss::ServerVersionRegistry.new(desired_version, arch).download_url
14
- rescue Mrss::ServerVersionRegistry::Error => exc
15
- STDERR.puts "Error: #{exc}"
16
- exit 2
17
- end
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
- require 'aws-sdk-s3'
5
-
6
- options = {}
7
- OptionParser.new do |opts|
8
- opts.banner = "Usage: s3-copy options"
9
-
10
- opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
11
- options[:region] = v
12
- end
13
-
14
- opts.on("-p", "--param=KEY=VALUE", "Specify parameter for new files") do |v|
15
- options[:params] ||= {}
16
- k, v = v.split('=', 2)
17
- options[:params][k.to_sym] = v
18
- end
19
-
20
- opts.on("-f", "--from=BUCKET:PATH", "Bucket name and key (or path) to copy from") do |v|
21
- options[:from] = v
22
- end
23
-
24
- opts.on("-t", "--to=BUCKET:PATH", "Bucket name and key (or path) to write to (may be specified more than once)") do |v|
25
- options[:to] ||= []
26
- options[:to] << v
27
- end
28
- end.parse!
29
-
30
- ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
31
-
32
- bucket, key = options.fetch(:from).split(':', 2)
33
-
34
- s3 = Aws::S3::Client.new
35
-
36
- options.fetch(:to).each do |dest|
37
- STDERR.puts "Copying to #{dest}"
38
- dbucket, dkey = dest.split(':', 2)
39
- s3.copy_object(
40
- bucket: dbucket,
41
- key: dkey,
42
- copy_source: "/#{bucket}/#{key}",
43
- **options[:params] || {},
44
- )
45
- end
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
- require 'aws-sdk-s3'
5
-
6
- options = {}
7
- OptionParser.new do |opts|
8
- opts.banner = "Usage: s3-upload options"
9
-
10
- opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
11
- options[:region] = v
12
- end
13
-
14
- opts.on("-p", "--param=KEY=VALUE", "Specify parameter for S3 upload") do |v|
15
- options[:params] ||= {}
16
- k, v = v.split('=', 2)
17
- options[:params][k.to_sym] = v
18
- end
19
-
20
- opts.on("-f", "--file=PATH", "Path to the file to upload, - to upload standard input") do |v|
21
- options[:file] = v
22
- end
23
-
24
- opts.on("-w", "--write=BUCKET:PATH", "Bucket name and key (or path) to upload to") do |v|
25
- options[:write] = v
26
- end
27
-
28
- opts.on("-c", "--copy=BUCKET:PATH", "Bucket name and key (or path) to copy to (may be specified more than once)") do |v|
29
- options[:copy] ||= []
30
- options[:copy] << v
31
- end
32
- end.parse!
33
-
34
- ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
35
-
36
- def upload(f, options)
37
- s3 = Aws::S3::Client.new
38
- write = options.fetch(:write)
39
- STDERR.puts "Writing #{write}"
40
- bucket, key = write.split(':', 2)
41
- s3.put_object(
42
- body: f.read,
43
- bucket: bucket,
44
- key: key,
45
- **options[:params] || {},
46
- )
47
- if copy = options[:copy]
48
- copy.each do |dest|
49
- STDERR.puts "Copying to #{dest}"
50
- dbucket, dkey = dest.split(':', 2)
51
- s3.copy_object(
52
- bucket: dbucket,
53
- key: dkey,
54
- copy_source: "/#{bucket}/#{key}",
55
- **options[:params] || {},
56
- )
57
- end
58
- end
59
- end
60
-
61
- if options[:file] == '-'
62
- upload(STDIN, options)
63
- elsif options[:file]
64
- File.open(options[:file]) do |f|
65
- upload(f, options)
66
- end
67
- else
68
- upload(STDIN, options)
69
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- autoload :ChildProcess, 'childprocess'
5
- autoload :Tempfile, 'tempfile'
6
-
7
- module Mrss
8
- module ChildProcessHelper
9
- class SpawnError < StandardError; end
10
-
11
- module_function def call(cmd, env: nil, cwd: nil)
12
- process = ChildProcess.new(*cmd)
13
- process.io.inherit!
14
- if cwd
15
- process.cwd = cwd
16
- end
17
- if env
18
- env.each do |k, v|
19
- process.environment[k.to_s] = v
20
- end
21
- end
22
- process.start
23
- process.wait
24
- process
25
- end
26
-
27
- module_function def check_call(cmd, env: nil, cwd: nil)
28
- process = call(cmd, env: env, cwd: cwd)
29
- unless process.exit_code == 0
30
- raise SpawnError, "Failed to execute: #{cmd}"
31
- end
32
- end
33
-
34
- module_function def get_output(cmd, env: nil, cwd: nil)
35
- process = ChildProcess.new(*cmd)
36
- process.io.inherit!
37
- if cwd
38
- process.cwd = cwd
39
- end
40
- if env
41
- env.each do |k, v|
42
- process.environment[k.to_s] = v
43
- end
44
- end
45
-
46
- output = ''
47
- r, w = IO.pipe
48
-
49
- begin
50
- process.io.stdout = w
51
- process.start
52
- w.close
53
-
54
- thread = Thread.new do
55
- begin
56
- loop do
57
- output << r.readpartial(16384)
58
- end
59
- rescue EOFError
60
- end
61
- end
62
-
63
- process.wait
64
- thread.join
65
- ensure
66
- r.close
67
- end
68
-
69
- [process, output]
70
- end
71
-
72
- module_function def check_output(*args)
73
- process, output = get_output(*args)
74
- unless process.exit_code == 0
75
- raise SpawnError,"Failed to execute: #{args}"
76
- end
77
- output
78
- end
79
- end
80
- end
@@ -1,231 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- # ClusterConfig requires ClientRegistry class provided by the host project.
5
-
6
- require 'singleton'
7
-
8
- module Mrss
9
- class ClusterConfig
10
- include Singleton
11
- include RSpec::Core::Pending
12
-
13
- def single_server?
14
- determine_cluster_config
15
- @single_server
16
- end
17
-
18
- def sharded_ish?
19
- determine_cluster_config
20
- @topology == :sharded || @topology == :load_balanced
21
- end
22
-
23
- def replica_set_name
24
- determine_cluster_config
25
- @replica_set_name
26
- end
27
-
28
- def server_version
29
- determine_cluster_config
30
- @server_version
31
- end
32
-
33
- def enterprise?
34
- determine_cluster_config
35
- @enterprise
36
- end
37
-
38
- def short_server_version
39
- server_version.split('.')[0..1].join('.')
40
- end
41
-
42
- def fcv
43
- determine_cluster_config
44
- @fcv
45
- end
46
-
47
- # Per https://jira.mongodb.org/browse/SERVER-39052, working with FCV
48
- # in sharded topologies is annoying. Also, FCV doesn't exist in servers
49
- # less than 3.4. This method returns FCV on 3.4+ servers when in single
50
- # or RS topologies, and otherwise returns the major.minor server version.
51
- def fcv_ish
52
- if server_version.nil?
53
- raise "Deployment server version not known - check that connection to deployment succeeded"
54
- end
55
-
56
- if server_version >= '3.4' && !sharded_ish?
57
- fcv
58
- else
59
- if short_server_version == '4.1'
60
- '4.2'
61
- else
62
- short_server_version
63
- end
64
- end
65
- end
66
-
67
- # @return [ Mongo::Address ] The address of the primary in the deployment.
68
- def primary_address
69
- determine_cluster_config
70
- @primary_address
71
- end
72
-
73
- def primary_address_str
74
- determine_cluster_config
75
- @primary_address.seed
76
- end
77
-
78
- def primary_address_host
79
- both = primary_address_str
80
- both.split(':').first
81
- end
82
-
83
- def primary_address_port
84
- both = primary_address_str
85
- both.split(':')[1] || 27017
86
- end
87
-
88
- def primary_description
89
- determine_cluster_config
90
- @primary_description
91
- end
92
-
93
- def server_parameters
94
- determine_cluster_config
95
- @server_parameters
96
- end
97
-
98
- # Try running a command on the admin database to see if the mongod was
99
- # started with auth.
100
- def auth_enabled?
101
- if @auth_enabled.nil?
102
- @auth_enabled = begin
103
- basic_client.use(:admin).command(getCmdLineOpts: 1).first["argv"].include?("--auth")
104
- rescue => e
105
- e.message =~ /(not authorized)|(unauthorized)|(no users authenticated)|(requires authentication)/
106
- end
107
- end
108
- @auth_enabled
109
- end
110
-
111
- def topology
112
- determine_cluster_config
113
- @topology
114
- end
115
-
116
- def storage_engine
117
- @storage_engine ||= begin
118
- # 2.6 does not have wired tiger
119
- if short_server_version == '2.6'
120
- :mmapv1
121
- else
122
- client = ClientRegistry.instance.global_client('root_authorized')
123
- if sharded_ish?
124
- shards = client.use(:admin).command(listShards: 1).first
125
- if shards['shards'].empty?
126
- raise 'Shards are empty'
127
- end
128
- shard = shards['shards'].first
129
- address_str = shard['host'].sub(/^.*\//, '').sub(/,.*/, '')
130
- client = ClusterTools.instance.direct_client(address_str,
131
- SpecConfig.instance.test_options.merge(SpecConfig.instance.auth_options).merge(connect: :direct))
132
- end
133
- rv = client.use(:admin).command(serverStatus: 1).first
134
- rv = rv['storageEngine']['name']
135
- rv_map = {
136
- 'wiredTiger' => :wired_tiger,
137
- 'mmapv1' => :mmapv1,
138
- }
139
- rv_map[rv] || rv
140
- end
141
- end
142
- end
143
-
144
- # This method returns an alternate address for connecting to the configured
145
- # deployment. For example, if the replica set is configured with nodes at
146
- # of localhost:27017 and so on, this method will return 127.0.0.:27017.
147
- #
148
- # Note that the "alternate" refers to replica set configuration, not the
149
- # addresses specified in test suite configuration. If the deployment topology
150
- # is not a replica set, "alternate" refers to test suite configuration as
151
- # this is the only configuration available.
152
- def alternate_address
153
- @alternate_address ||= begin
154
- address = primary_address_host
155
- str = case address
156
- when '127.0.0.1'
157
- 'localhost'
158
- when /^(\d+\.){3}\d+$/
159
- skip 'This test requires a hostname or 127.0.0.1 as address'
160
- else
161
- # We don't know if mongod is listening on ipv4 or ipv6, in principle.
162
- # Our tests use ipv4, so hardcode that for now.
163
- # To support both we need to try both addresses which will make this
164
- # test more complicated.
165
- #
166
- # JRuby chokes on primary_address_port as the port (e.g. 27017).
167
- # Since the port does not actually matter, use a common port like 80.
168
- resolved_address = Addrinfo.getaddrinfo(address, 80, Socket::PF_INET).first.ip_address
169
- if resolved_address.include?(':')
170
- "[#{resolved_address}]"
171
- else
172
- resolved_address
173
- end
174
- end + ":#{primary_address_port}"
175
- Mongo::Address.new(str)
176
- end
177
- end
178
-
179
- private
180
-
181
- def determine_cluster_config
182
- return if @primary_address
183
-
184
- # Run all commands to figure out the cluster configuration from the same
185
- # client. This is somewhat wasteful when running a single test, but reduces
186
- # test runtime for the suite overall because all commands are sent on the
187
- # same connection rather than each command connecting to the cluster by
188
- # itself.
189
- client = ClientRegistry.instance.global_client('root_authorized')
190
-
191
- primary = client.cluster.next_primary
192
- @primary_address = primary.address
193
- @primary_description = primary.description
194
- @replica_set_name = client.cluster.topology.replica_set_name
195
-
196
- @topology ||= begin
197
- topology = client.cluster.topology.class.name.sub(/.*::/, '')
198
- topology = topology.gsub(/([A-Z])/) { |match| '_' + match.downcase }.sub(/^_/, '')
199
- if topology =~ /^replica_set/
200
- topology = 'replica_set'
201
- end
202
- topology.to_sym
203
- end
204
-
205
- @single_server = client.cluster.servers_list.length == 1
206
-
207
- build_info = client.database.command(buildInfo: 1).first
208
-
209
- @server_version = build_info['version']
210
- @enterprise = build_info['modules'] && build_info['modules'].include?('enterprise')
211
-
212
- @server_parameters = begin
213
- client.use(:admin).command(getParameter: '*').first
214
- rescue => e
215
- STDERR.puts("WARNING: Failed to obtain server parameters: #{e.class}: #{e.message}")
216
- {}
217
- end
218
-
219
- if !sharded_ish? && short_server_version >= '3.4'
220
- rv = @server_parameters['featureCompatibilityVersion']
221
- @fcv = rv['version'] || rv
222
- end
223
- end
224
-
225
- def basic_client
226
- # Do not cache the result here so that if the client gets closed,
227
- # client registry reconnects it in subsequent tests
228
- ClientRegistry.instance.global_client('basic')
229
- end
230
- end
231
- end