bson 4.12.1 → 4.13.0

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 (79) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +4 -7
  4. data/ext/bson/bson-native.h +2 -0
  5. data/ext/bson/init.c +9 -0
  6. data/ext/bson/read.c +29 -0
  7. data/lib/bson/active_support.rb +1 -0
  8. data/lib/bson/array.rb +2 -1
  9. data/lib/bson/binary.rb +5 -3
  10. data/lib/bson/boolean.rb +2 -1
  11. data/lib/bson/code.rb +2 -1
  12. data/lib/bson/code_with_scope.rb +2 -1
  13. data/lib/bson/config.rb +1 -0
  14. data/lib/bson/date.rb +1 -0
  15. data/lib/bson/date_time.rb +1 -0
  16. data/lib/bson/db_pointer.rb +2 -1
  17. data/lib/bson/dbref.rb +125 -0
  18. data/lib/bson/decimal128/builder.rb +18 -15
  19. data/lib/bson/decimal128.rb +10 -9
  20. data/lib/bson/document.rb +14 -0
  21. data/lib/bson/environment.rb +1 -0
  22. data/lib/bson/error.rb +7 -0
  23. data/lib/bson/ext_json.rb +16 -11
  24. data/lib/bson/false_class.rb +2 -1
  25. data/lib/bson/float.rb +20 -31
  26. data/lib/bson/hash.rb +15 -6
  27. data/lib/bson/int32.rb +3 -2
  28. data/lib/bson/int64.rb +3 -2
  29. data/lib/bson/integer.rb +3 -2
  30. data/lib/bson/json.rb +1 -0
  31. data/lib/bson/max_key.rb +3 -2
  32. data/lib/bson/min_key.rb +3 -2
  33. data/lib/bson/nil_class.rb +2 -1
  34. data/lib/bson/object.rb +1 -0
  35. data/lib/bson/object_id.rb +4 -3
  36. data/lib/bson/open_struct.rb +1 -0
  37. data/lib/bson/regexp.rb +17 -6
  38. data/lib/bson/registry.rb +1 -0
  39. data/lib/bson/specialized.rb +1 -0
  40. data/lib/bson/string.rb +3 -2
  41. data/lib/bson/symbol.rb +2 -1
  42. data/lib/bson/time.rb +4 -3
  43. data/lib/bson/time_with_zone.rb +1 -0
  44. data/lib/bson/timestamp.rb +3 -2
  45. data/lib/bson/true_class.rb +2 -1
  46. data/lib/bson/undefined.rb +2 -1
  47. data/lib/bson/version.rb +2 -1
  48. data/lib/bson.rb +6 -4
  49. data/spec/README.md +14 -0
  50. data/spec/bson/dbref_spec.rb +461 -0
  51. data/spec/bson/document_spec.rb +7 -1
  52. data/spec/bson/ext_json_parse_spec.rb +37 -0
  53. data/spec/bson/int64_spec.rb +4 -24
  54. data/spec/bson/raw_spec.rb +7 -1
  55. data/spec/bson/regexp_spec.rb +52 -0
  56. data/spec/runners/common_driver.rb +1 -1
  57. data/spec/shared/LICENSE +20 -0
  58. data/spec/shared/bin/get-mongodb-download-url +17 -0
  59. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  60. data/spec/shared/lib/mrss/cluster_config.rb +221 -0
  61. data/spec/shared/lib/mrss/constraints.rb +346 -0
  62. data/spec/shared/lib/mrss/docker_runner.rb +265 -0
  63. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  64. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  65. data/spec/shared/lib/mrss/spec_organizer.rb +152 -0
  66. data/spec/shared/lib/mrss/utils.rb +15 -0
  67. data/spec/shared/share/Dockerfile.erb +231 -0
  68. data/spec/shared/shlib/distro.sh +73 -0
  69. data/spec/shared/shlib/server.sh +290 -0
  70. data/spec/shared/shlib/set_env.sh +128 -0
  71. data/spec/spec_helper.rb +9 -1
  72. data/spec/spec_tests/data/corpus/binary.json +5 -0
  73. data/spec/spec_tests/data/corpus/dbref.json +21 -1
  74. data/spec/spec_tests/data/corpus/document.json +4 -0
  75. data/spec/spec_tests/data/corpus/regex.json +2 -2
  76. data/spec/spec_tests/data/corpus/top.json +20 -9
  77. data.tar.gz.sig +0 -0
  78. metadata +123 -90
  79. metadata.gz.sig +0 -0
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,7 +26,7 @@ module BSON
25
26
  # A false value in the BSON spec is 0x00.
26
27
  #
27
28
  # @since 2.0.0
28
- FALSE_BYTE = 0.chr.force_encoding(BINARY).freeze
29
+ FALSE_BYTE = String.new(0.chr, encoding: BINARY).freeze
29
30
 
30
31
  # The BSON type for false values is the general boolean type of 0x08.
31
32
  #
data/lib/bson/float.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,12 +26,12 @@ module BSON
25
26
  # A floating point is type 0x01 in the BSON spec.
26
27
  #
27
28
  # @since 2.0.0
28
- BSON_TYPE = 1.chr.force_encoding(BINARY).freeze
29
+ BSON_TYPE = ::String.new(1.chr, encoding: BINARY).freeze
29
30
 
30
31
  # The pack directive is for 8 byte floating points.
31
32
  #
32
33
  # @since 2.0.0
33
- PACK = "E".freeze
34
+ PACK = "E"
34
35
 
35
36
  # Get the floating point as encoded BSON.
36
37
  #
@@ -57,36 +58,24 @@ module BSON
57
58
  #
58
59
  # @return [ Hash | Float ] The extended json representation.
59
60
  def as_extended_json(**options)
60
- case infinite?
61
- when 1
62
- {'$numberDouble' => 'Infinity'}
63
- when -1
64
- {'$numberDouble' => '-Infinity'}
61
+ if infinite? == 1
62
+ { '$numberDouble' => 'Infinity' }
63
+ elsif infinite? == -1
64
+ { '$numberDouble' => '-Infinity' }
65
+ elsif nan?
66
+ { '$numberDouble' => 'NaN' }
67
+ elsif options[:mode] == :relaxed || options[:mode] == :legacy
68
+ self
69
+ elsif BSON::Environment.jruby? && abs > 1e15
70
+ # Hack to make bson corpus spec tests pass.
71
+ # JRuby serializes -1.2345678901234568e+18 as
72
+ # -1234567890123456770.0, which is valid but differs from MRI
73
+ # serialization. Extended JSON spec does not define precise
74
+ # stringification of floats.
75
+ # https://jira.mongodb.org/browse/SPEC-1536
76
+ { '$numberDouble' => ('%.17g' % to_s).upcase }
65
77
  else
66
- if nan?
67
- {'$numberDouble' => 'NaN'}
68
- else
69
- if options[:mode] == :relaxed || options[:mode] == :legacy
70
- self
71
- else
72
- value = if BSON::Environment.jruby?
73
- # Hack to make bson corpus spec tests pass.
74
- # JRuby serializes -1.2345678901234568e+18 as
75
- # -1234567890123456770.0, which is valid but differs from MRI
76
- # serialization. Extended JSON spec does not define precise
77
- # stringification of floats.
78
- # https://jira.mongodb.org/browse/SPEC-1536
79
- if abs > 1e15
80
- '%.17g' % to_s
81
- else
82
- to_s
83
- end
84
- else
85
- to_s
86
- end
87
- {'$numberDouble' => value.upcase}
88
- end
89
- end
78
+ { '$numberDouble' => to_s.upcase }
90
79
  end
91
80
  end
92
81
 
data/lib/bson/hash.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,7 +26,7 @@ module BSON
25
26
  # A hash, also called an embedded document, is type 0x03 in the BSON spec.
26
27
  #
27
28
  # @since 2.0.0
28
- BSON_TYPE = 3.chr.force_encoding(BINARY).freeze
29
+ BSON_TYPE = ::String.new(3.chr, encoding: BINARY).freeze
29
30
 
30
31
  # Get the hash as encoded BSON.
31
32
  #
@@ -70,7 +71,7 @@ module BSON
70
71
  # @example Convert the hash to a normalized value.
71
72
  # hash.to_bson_normalized_value
72
73
  #
73
- # @return [ BSON::Document ] The normazlied hash.
74
+ # @return [ BSON::Document ] The normalized hash.
74
75
  #
75
76
  # @since 3.0.0
76
77
  def to_bson_normalized_value
@@ -88,9 +89,7 @@ module BSON
88
89
  #
89
90
  # @return [ Hash ] This hash converted to extended json representation.
90
91
  def as_extended_json(**options)
91
- ::Hash[map do |key, value|
92
- [key, value.as_extended_json(**options)]
93
- end]
92
+ transform_values { |value| value.as_extended_json(**options) }
94
93
  end
95
94
 
96
95
  module ClassMethods
@@ -101,7 +100,7 @@ module BSON
101
100
  #
102
101
  # @option options [ nil | :bson ] :mode Decoding mode to use.
103
102
  #
104
- # @return [ Array ] The decoded hash.
103
+ # @return [ Hash ] The decoded hash.
105
104
  #
106
105
  # @see http://bsonspec.org/#/specification
107
106
  #
@@ -129,6 +128,16 @@ module BSON
129
128
  if actual_byte_size != expected_byte_size
130
129
  raise Error::BSONDecodeError, "Expected hash to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
131
130
  end
131
+
132
+ if hash['$ref'] && hash['$id']
133
+ # We're doing implicit decoding here. If the document is an invalid
134
+ # dbref, we should decode it as a BSON::Document.
135
+ begin
136
+ hash = DBRef.new(hash)
137
+ rescue ArgumentError
138
+ end
139
+ end
140
+
132
141
  hash
133
142
  end
134
143
  end
data/lib/bson/int32.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,7 +25,7 @@ module BSON
24
25
  # A boolean is type 0x08 in the BSON spec.
25
26
  #
26
27
  # @since 2.0.0
27
- BSON_TYPE = 16.chr.force_encoding(BINARY).freeze
28
+ BSON_TYPE = ::String.new(16.chr, encoding: BINARY).freeze
28
29
 
29
30
  # The number of bytes constant.
30
31
  #
@@ -34,7 +35,7 @@ module BSON
34
35
  # Constant for the int 32 pack directive.
35
36
  #
36
37
  # @since 2.0.0
37
- PACK = "l<".freeze
38
+ PACK = "l<"
38
39
 
39
40
  # Deserialize an Integer from BSON.
40
41
  #
data/lib/bson/int64.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,12 +25,12 @@ module BSON
24
25
  # A boolean is type 0x08 in the BSON spec.
25
26
  #
26
27
  # @since 2.0.0
27
- BSON_TYPE = 18.chr.force_encoding(BINARY).freeze
28
+ BSON_TYPE = ::String.new(18.chr, encoding: BINARY).freeze
28
29
 
29
30
  # Constant for the int 64 pack directive.
30
31
  #
31
32
  # @since 2.0.0
32
- PACK = "q<".freeze
33
+ PACK = "q<"
33
34
 
34
35
  # Deserialize an Integer from BSON.
35
36
  #
data/lib/bson/integer.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -45,13 +46,13 @@ module BSON
45
46
  # The BSON index size.
46
47
  #
47
48
  # @since 2.0.0
48
- BSON_INDEX_SIZE = 1024.freeze
49
+ BSON_INDEX_SIZE = 1024
49
50
 
50
51
  # A hash of index values for array optimization.
51
52
  #
52
53
  # @since 2.0.0
53
54
  BSON_ARRAY_INDEXES = ::Array.new(BSON_INDEX_SIZE) do |i|
54
- (i.to_s.force_encoding(BINARY) << NULL_BYTE).freeze
55
+ (i.to_s.b << NULL_BYTE).freeze
55
56
  end.freeze
56
57
 
57
58
  # Is this integer a valid BSON 32 bit value?
data/lib/bson/json.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
data/lib/bson/max_key.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,12 +29,12 @@ module BSON
28
29
  # A $maxKey is type 0x7F in the BSON spec.
29
30
  #
30
31
  # @since 2.0.0
31
- BSON_TYPE = 127.chr.force_encoding(BINARY).freeze
32
+ BSON_TYPE = ::String.new(127.chr, encoding: BINARY).freeze
32
33
 
33
34
  # Constant for always evaluating greater in a comparison.
34
35
  #
35
36
  # @since 2.0.0
36
- GREATER = 1.freeze
37
+ GREATER = 1
37
38
 
38
39
  # When comparing a max key with any other object, the max key will always
39
40
  # be greater.
data/lib/bson/min_key.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,12 +29,12 @@ module BSON
28
29
  # A $minKey is type 0xFF in the BSON spec.
29
30
  #
30
31
  # @since 2.0.0
31
- BSON_TYPE = 255.chr.force_encoding(BINARY).freeze
32
+ BSON_TYPE = ::String.new(255.chr, encoding: BINARY).freeze
32
33
 
33
34
  # Constant for always evaluating lesser in a comparison.
34
35
  #
35
36
  # @since 2.0.0
36
- LESSER = -1.freeze
37
+ LESSER = -1
37
38
 
38
39
  # When comparing a min key with any other object, the min key will always
39
40
  # be lesser.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +27,7 @@ module BSON
26
27
  # A nil is type 0x0A in the BSON spec.
27
28
  #
28
29
  # @since 2.0.0
29
- BSON_TYPE = 10.chr.force_encoding(BINARY).freeze
30
+ BSON_TYPE = ::String.new(10.chr, encoding: BINARY).freeze
30
31
 
31
32
  module ClassMethods
32
33
 
data/lib/bson/object.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,7 +31,7 @@ module BSON
30
31
  # A object_id is type 0x07 in the BSON spec.
31
32
  #
32
33
  # @since 2.0.0
33
- BSON_TYPE = 7.chr.force_encoding(BINARY).freeze
34
+ BSON_TYPE = ::String.new(7.chr, encoding: BINARY).freeze
34
35
 
35
36
  # Check equality of the object id with another object.
36
37
  #
@@ -112,7 +113,7 @@ module BSON
112
113
  #
113
114
  # @since 2.0.0
114
115
  def generation_time
115
- ::Time.at(generate_data.unpack("N")[0]).utc
116
+ ::Time.at(generate_data.unpack1("N")).utc
116
117
  end
117
118
  alias :to_time :generation_time
118
119
 
@@ -352,7 +353,7 @@ module BSON
352
353
  # @since 2.0.0
353
354
  def initialize
354
355
  @counter = rand(0x1000000)
355
- @machine_id = Digest::MD5.digest(Socket.gethostname).unpack("N")[0]
356
+ @machine_id = Digest::MD5.digest(Socket.gethostname).unpack1("N")
356
357
  @mutex = Mutex.new
357
358
  end
358
359
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2016-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
data/lib/bson/regexp.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,34 +27,34 @@ module BSON
26
27
  # A regular expression is type 0x0B in the BSON spec.
27
28
  #
28
29
  # @since 2.0.0
29
- BSON_TYPE = 11.chr.force_encoding(BINARY).freeze
30
+ BSON_TYPE = ::String.new(11.chr, encoding: BINARY).freeze
30
31
 
31
32
  # Extended value constant.
32
33
  #
33
34
  # @since 3.2.6
34
- EXTENDED_VALUE = 'x'.freeze
35
+ EXTENDED_VALUE = 'x'
35
36
 
36
37
  # Ignore case constant.
37
38
  #
38
39
  # @since 3.2.6
39
- IGNORECASE_VALUE = 'i'.freeze
40
+ IGNORECASE_VALUE = 'i'
40
41
 
41
42
  # Multiline constant.
42
43
  #
43
44
  # @since 3.2.6
44
- MULTILINE_VALUE = 'm'.freeze
45
+ MULTILINE_VALUE = 'm'
45
46
 
46
47
  # Newline constant.
47
48
  #
48
49
  # @since 3.2.6
49
- NEWLINE_VALUE = 's'.freeze
50
+ NEWLINE_VALUE = 's'
50
51
 
51
52
  # Ruby multiline constant.
52
53
  #
53
54
  # @since 3.2.6
54
55
  #
55
56
  # @deprecated Will be removed in 5.0
56
- RUBY_MULTILINE_VALUE = 'ms'.freeze
57
+ RUBY_MULTILINE_VALUE = 'ms'
57
58
 
58
59
  # Get the regexp as JSON hash data.
59
60
  #
@@ -154,6 +155,16 @@ module BSON
154
155
  #
155
156
  # @since 3.0.0
156
157
  def initialize(pattern, options = '')
158
+ if pattern.include?(NULL_BYTE)
159
+ raise Error::InvalidRegexpPattern, "Regexp pattern cannot contain a null byte: #{pattern}"
160
+ elsif options.is_a?(String) || options.is_a?(Symbol)
161
+ if options.to_s.include?(NULL_BYTE)
162
+ raise Error::InvalidRegexpPattern, "Regexp options cannot contain a null byte: #{options}"
163
+ end
164
+ elsif !options.is_a?(Integer)
165
+ raise ArgumentError, "Regexp options must be a String, Symbol, or Integer"
166
+ end
167
+
157
168
  @pattern = pattern
158
169
  @options = options
159
170
  end
data/lib/bson/registry.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
data/lib/bson/string.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  # Copyright (C) 2009-2020 MongoDB Inc.
3
4
  #
4
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,12 +27,12 @@ module BSON
26
27
  # A string is type 0x02 in the BSON spec.
27
28
  #
28
29
  # @since 2.0.0
29
- BSON_TYPE = 2.chr.force_encoding(BINARY).freeze
30
+ BSON_TYPE = ::String.new(2.chr, encoding: BINARY).freeze
30
31
 
31
32
  # Regex for matching illegal BSON keys.
32
33
  #
33
34
  # @since 4.1.0
34
- ILLEGAL_KEY = /(\A[$])|(\.)/.freeze
35
+ ILLEGAL_KEY = /(\A[$])|(\.)/
35
36
 
36
37
  # Get the string as encoded BSON.
37
38
  #
data/lib/bson/symbol.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,7 +29,7 @@ module BSON
28
29
  # A symbol is type 0x0E in the BSON spec.
29
30
  #
30
31
  # @since 2.0.0
31
- BSON_TYPE = 14.chr.force_encoding(BINARY).freeze
32
+ BSON_TYPE = ::String.new(14.chr, encoding: BINARY).freeze
32
33
 
33
34
  # Symbols are serialized as strings as symbols are now removed from the
34
35
  # BSON specification. Therefore the bson_type when serializing must be a
data/lib/bson/time.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -39,7 +40,7 @@ module BSON
39
40
  # A time is type 0x09 in the BSON spec.
40
41
  #
41
42
  # @since 2.0.0
42
- BSON_TYPE = 9.chr.force_encoding(BINARY).freeze
43
+ BSON_TYPE = ::String.new(9.chr, encoding: BINARY).freeze
43
44
 
44
45
  # Get the time as encoded BSON.
45
46
  #
@@ -63,8 +64,8 @@ module BSON
63
64
  #
64
65
  # @note The time is floored to the nearest millisecond.
65
66
  #
66
- # @option options [ true | false ] :relaxed Whether to produce relaxed
67
- # extended JSON representation.
67
+ # @option opts [ nil | :relaxed | :legacy ] :mode Serialization mode
68
+ # (default is canonical extended JSON)
68
69
  #
69
70
  # @return [ Hash ] The extended json representation.
70
71
  def as_extended_json(**options)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2018-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,12 +27,12 @@ module BSON
26
27
  # A timestamp is type 0x11 in the BSON spec.
27
28
  #
28
29
  # @since 2.0.0
29
- BSON_TYPE = 17.chr.force_encoding(BINARY).freeze
30
+ BSON_TYPE = ::String.new(17.chr, encoding: BINARY).freeze
30
31
 
31
32
  # Error message if an object other than a Timestamp is compared with this object.
32
33
  #
33
34
  # @since 4.3.0
34
- COMPARISON_ERROR_MESSAGE = 'comparison of %s with Timestamp failed'.freeze
35
+ COMPARISON_ERROR_MESSAGE = 'comparison of %s with Timestamp failed'
35
36
 
36
37
  # @!attribute seconds
37
38
  # @return [ Integer ] The number of seconds.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,7 +26,7 @@ module BSON
25
26
  # A true value in the BSON spec is 0x01.
26
27
  #
27
28
  # @since 2.0.0
28
- TRUE_BYTE = 1.chr.force_encoding(BINARY).freeze
29
+ TRUE_BYTE = ::String.new(1.chr, encoding: BINARY).freeze
29
30
 
30
31
  # The BSON type for true values is the general boolean type of 0x08.
31
32
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,7 +26,7 @@ module BSON
25
26
  # Undefined is type 0x06 in the BSON spec.
26
27
  #
27
28
  # @since 2.0.0
28
- BSON_TYPE = 6.chr.force_encoding(BINARY).freeze
29
+ BSON_TYPE = ::String.new(6.chr, encoding: BINARY).freeze
29
30
 
30
31
  # Determine if undefined is equal to another object.
31
32
  #
data/lib/bson/version.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,5 +14,5 @@
13
14
  # limitations under the License.
14
15
 
15
16
  module BSON
16
- VERSION = "4.12.1".freeze
17
+ VERSION = "4.13.0"
17
18
  end
data/lib/bson.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Copyright (C) 2009-2020 MongoDB Inc.
2
3
  #
3
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,22 +39,22 @@ module BSON
38
39
  # Constant for binary string encoding.
39
40
  #
40
41
  # @since 2.0.0
41
- BINARY = "BINARY".freeze
42
+ BINARY = "BINARY"
42
43
 
43
44
  # Constant for bson types that don't actually serialize a value.
44
45
  #
45
46
  # @since 2.0.0
46
- NO_VALUE = "".force_encoding(BINARY).freeze
47
+ NO_VALUE = ::String.new(encoding: BINARY).freeze
47
48
 
48
49
  # Constant for a null byte (0x00).
49
50
  #
50
51
  # @since 2.0.0
51
- NULL_BYTE = 0.chr.force_encoding(BINARY).freeze
52
+ NULL_BYTE = ::String.new(0.chr, encoding: BINARY).freeze
52
53
 
53
54
  # Constant for UTF-8 string encoding.
54
55
  #
55
56
  # @since 2.0.0
56
- UTF8 = "UTF-8".freeze
57
+ UTF8 = "UTF-8"
57
58
  end
58
59
 
59
60
  require "bson/config"
@@ -78,6 +79,7 @@ require "bson/ext_json"
78
79
  require "bson/false_class"
79
80
  require "bson/float"
80
81
  require "bson/hash"
82
+ require "bson/dbref"
81
83
  require "bson/open_struct"
82
84
  require "bson/max_key"
83
85
  require "bson/min_key"
data/spec/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # Running BSON Ruby Tests
2
+
3
+ ## Quick Start
4
+
5
+ The test suite requires shared tooling that is stored in a separate repository
6
+ and is referenced as a submodule. After checking out the desired bson-ruby
7
+ branch, check out the matching submodules:
8
+
9
+ git submodule init
10
+ git submodule update
11
+
12
+ Then, to run the test suite:
13
+
14
+ rake