bson 4.12.1 → 4.13.0

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