bson 4.2.2-java → 4.3.0.beta-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 648a36ae43d7444b7734ae5207f455dc385763ef
4
- data.tar.gz: de8db45eca2fc5c599fc43563547f2ebfc3ab324
3
+ metadata.gz: 6468d11868cf8ba4f947d6f2b6d0405762b22cd3
4
+ data.tar.gz: 88de4d6bc5e84d4b69a9b2899eaa467b1f18fbf8
5
5
  SHA512:
6
- metadata.gz: b248993776b32d0f628053b89e474006f6777390ef0329a63fd30665d1240d4bb5b3801bd7873ff1cda33b7c5d66fa2ad6d3102fea9b78f53cb50ed6a9395c28
7
- data.tar.gz: ab739128803d604a4eec24ddedd2342d7916966234de8663b49f5174efb119347897472ba0209caf136b659c2fcf54bd80964d624dd2bb83064a77671bd0a15f
6
+ metadata.gz: 0eaba01e1207c6fc15100a18ba1cd88a67ac976af7d65261d7cc219932dbedede2541a41def203ba3b4153c3acf87c5d51bf0b779fa9372e64743753c231b594
7
+ data.tar.gz: c29071d4429eb583e57620481eca61efda789dbcd19723fc1bbde761c9bc6b747fe5421aebfa7174e9db7ca231e572f514820c27d7d958af4b79a4a830ee1b5b
Binary file
data.tar.gz.sig CHANGED
Binary file
Binary file
@@ -41,15 +41,19 @@ module BSON
41
41
  #
42
42
  # @since 2.0.0
43
43
  def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?)
44
- position = buffer.length
45
- buffer.put_int32(0)
46
- each_with_index do |value, index|
47
- buffer.put_byte(value.bson_type)
48
- buffer.put_cstring(index.to_s)
49
- value.to_bson(buffer, validating_keys)
44
+ if buffer.respond_to?(:put_array)
45
+ buffer.put_array(self, validating_keys)
46
+ else
47
+ position = buffer.length
48
+ buffer.put_int32(0)
49
+ each_with_index do |value, index|
50
+ buffer.put_byte(value.bson_type)
51
+ buffer.put_cstring(index.to_s)
52
+ value.to_bson(buffer, validating_keys)
53
+ end
54
+ buffer.put_byte(NULL_BYTE)
55
+ buffer.replace_int32(position, buffer.length - position)
50
56
  end
51
- buffer.put_byte(NULL_BYTE)
52
- buffer.replace_int32(position, buffer.length - position)
53
57
  end
54
58
 
55
59
  # Convert the array to an object id. This will only work for arrays of size
@@ -93,13 +97,17 @@ module BSON
93
97
  #
94
98
  # @since 2.0.0
95
99
  def from_bson(buffer)
96
- array = new
97
- buffer.get_int32 # throw away the length
98
- while (type = buffer.get_byte) != NULL_BYTE
99
- buffer.get_cstring
100
- array << BSON::Registry.get(type).from_bson(buffer)
100
+ if buffer.respond_to?(:get_array)
101
+ buffer.get_array
102
+ else
103
+ array = new
104
+ buffer.get_int32 # throw away the length
105
+ while (type = buffer.get_byte) != NULL_BYTE
106
+ buffer.get_cstring
107
+ array << BSON::Registry.get(type).from_bson(buffer)
108
+ end
109
+ array
101
110
  end
102
- array
103
111
  end
104
112
  end
105
113
 
@@ -38,15 +38,19 @@ module BSON
38
38
  #
39
39
  # @since 2.0.0
40
40
  def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?)
41
- position = buffer.length
42
- buffer.put_int32(0)
43
- each do |field, value|
44
- buffer.put_byte(value.bson_type)
45
- buffer.put_cstring(field.to_bson_key(validating_keys))
46
- value.to_bson(buffer, validating_keys)
41
+ if buffer.respond_to?(:put_hash)
42
+ buffer.put_hash(self, validating_keys)
43
+ else
44
+ position = buffer.length
45
+ buffer.put_int32(0)
46
+ each do |field, value|
47
+ buffer.put_byte(value.bson_type)
48
+ buffer.put_cstring(field.to_bson_key(validating_keys))
49
+ value.to_bson(buffer, validating_keys)
50
+ end
51
+ buffer.put_byte(NULL_BYTE)
52
+ buffer.replace_int32(position, buffer.length - position)
47
53
  end
48
- buffer.put_byte(NULL_BYTE)
49
- buffer.replace_int32(position, buffer.length - position)
50
54
  end
51
55
 
52
56
  # Converts the hash to a normalized value in a BSON document.
@@ -73,13 +77,17 @@ module BSON
73
77
  #
74
78
  # @since 2.0.0
75
79
  def from_bson(buffer)
76
- hash = Document.allocate
77
- buffer.get_int32 # Throw away the size.
78
- while (type = buffer.get_byte) != NULL_BYTE
79
- field = buffer.get_cstring
80
- hash.store(field, BSON::Registry.get(type, field).from_bson(buffer))
80
+ if buffer.respond_to?(:get_hash)
81
+ buffer.get_hash
82
+ else
83
+ hash = Document.allocate
84
+ buffer.get_int32 # Throw away the size.
85
+ while (type = buffer.get_byte) != NULL_BYTE
86
+ field = buffer.get_cstring
87
+ hash.store(field, BSON::Registry.get(type, field).from_bson(buffer))
88
+ end
89
+ hash
81
90
  end
82
- hash
83
91
  end
84
92
  end
85
93
 
@@ -40,7 +40,7 @@ module BSON
40
40
  #
41
41
  # @since 2.0.0
42
42
  def get(byte, field = nil)
43
- if type = MAPPINGS[byte]
43
+ if type = MAPPINGS[byte] || (byte.is_a?(String) && type = MAPPINGS[byte.ord])
44
44
  type
45
45
  else
46
46
  handle_unsupported_type!(byte, field)
@@ -59,7 +59,7 @@ module BSON
59
59
  #
60
60
  # @since 2.0.0
61
61
  def register(byte, type)
62
- MAPPINGS.store(byte, type)
62
+ MAPPINGS[byte.ord] = type
63
63
  define_type_reader(type)
64
64
  end
65
65
 
@@ -105,7 +105,7 @@ module BSON
105
105
  # Register this type when the module is loaded.
106
106
  #
107
107
  # @since 2.0.0
108
- Registry::MAPPINGS.store(BSON_TYPE, ::Symbol)
108
+ Registry::MAPPINGS[BSON_TYPE.ord] = ::Symbol
109
109
  end
110
110
 
111
111
  # Enrich the core Symbol class with this module.
@@ -21,12 +21,18 @@ module BSON
21
21
  # @since 2.0.0
22
22
  class Timestamp
23
23
  include JSON
24
+ include Comparable
24
25
 
25
26
  # A timestamp is type 0x11 in the BSON spec.
26
27
  #
27
28
  # @since 2.0.0
28
29
  BSON_TYPE = 17.chr.force_encoding(BINARY).freeze
29
30
 
31
+ # Error message if an object other than a Timestamp is compared with this object.
32
+ #
33
+ # @since 4.3.0
34
+ COMPARISON_ERROR_MESSAGE = 'comparison of %s with Timestamp failed'.freeze
35
+
30
36
  # @!attribute seconds
31
37
  # @return [ Integer ] The number of seconds.
32
38
  # @since 2.0.0
@@ -52,6 +58,24 @@ module BSON
52
58
  seconds == other.seconds && increment == other.increment
53
59
  end
54
60
 
61
+ # Determine if this timestamp is greater or less than another object.
62
+ #
63
+ # @example Compare the timestamp.
64
+ # timestamp < other
65
+ #
66
+ # @param [ Object ] other The object to compare against.
67
+ #
68
+ # @return [ true, false ] The result of the comparison.
69
+ #
70
+ # @since 4.3.0
71
+ def <=>(other)
72
+ raise ArgumentError.new(COMPARISON_ERROR_MESSAGE % other.class) unless other.is_a?(Timestamp)
73
+ return 0 if self == other
74
+ a = [ seconds, increment ]
75
+ b = [ other.seconds, other.increment ]
76
+ [ a, b ].sort[0] == a ? -1 : 1
77
+ end
78
+
55
79
  # Get the timestamp as JSON hash data.
56
80
  #
57
81
  # @example Get the timestamp as a JSON hash.
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module BSON
16
- VERSION = "4.2.2".freeze
16
+ VERSION = "4.3.0.beta".freeze
17
17
  end
Binary file
@@ -152,16 +152,30 @@ describe BSON::ByteBuffer do
152
152
 
153
153
  describe '#length' do
154
154
 
155
- let(:buffer) do
156
- described_class.new
157
- end
155
+ context 'when the byte buffer is initialized with no bytes' do
156
+
157
+ let(:buffer) do
158
+ described_class.new
159
+ end
160
+
161
+ before do
162
+ buffer.put_int32(5)
163
+ end
158
164
 
159
- before do
160
- buffer.put_int32(5)
165
+ it 'returns the length of the buffer' do
166
+ expect(buffer.length).to eq(4)
167
+ end
161
168
  end
162
169
 
163
- it 'returns the length of the buffer' do
164
- expect(buffer.length).to eq(4)
170
+ context 'when the byte buffer is initialized with some bytes' do
171
+
172
+ let(:buffer) do
173
+ described_class.new("#{BSON::Int32::BSON_TYPE}#{BSON::Int32::BSON_TYPE}")
174
+ end
175
+
176
+ it 'returns the length' do
177
+ expect(buffer.length).to eq(2)
178
+ end
165
179
  end
166
180
  end
167
181
 
@@ -756,6 +756,24 @@ describe BSON::Document do
756
756
  end
757
757
  end
758
758
 
759
+ context "when the hash contains an array of hashes" do
760
+ let(:obj) do
761
+ described_class["key",[{"a" => 1}, {"b" => 2}]]
762
+ end
763
+
764
+ let(:bson) do
765
+ "#{45.to_bson}#{Array::BSON_TYPE}key#{BSON::NULL_BYTE}" +
766
+ "#{35.to_bson}"+
767
+ "#{BSON::Document::BSON_TYPE}0#{BSON::NULL_BYTE}#{12.to_bson}#{BSON::Int32::BSON_TYPE}a#{BSON::NULL_BYTE}#{1.to_bson}#{BSON::NULL_BYTE}" +
768
+ "#{BSON::Document::BSON_TYPE}1#{BSON::NULL_BYTE}#{12.to_bson}#{BSON::Int32::BSON_TYPE}b#{BSON::NULL_BYTE}#{2.to_bson}#{BSON::NULL_BYTE}" +
769
+ "#{BSON::NULL_BYTE}" +
770
+ "#{BSON::NULL_BYTE}"
771
+ end
772
+
773
+ it_behaves_like "a serializable bson element"
774
+ it_behaves_like "a deserializable bson element"
775
+ end
776
+
759
777
  context "when the hash is a single level" do
760
778
 
761
779
  let(:obj) do
@@ -48,6 +48,61 @@ describe BSON::Timestamp do
48
48
  end
49
49
  end
50
50
 
51
+ describe "#<=>" do
52
+
53
+ let(:timestamp) do
54
+ described_class.new(1, 10)
55
+ end
56
+
57
+ context "when the objects are equal" do
58
+
59
+ let(:other) { described_class.new(1, 10) }
60
+
61
+ it "returns 0" do
62
+ expect(timestamp).to eq(other)
63
+ expect(timestamp < other).to be(false)
64
+ expect(timestamp > other).to be(false)
65
+ expect(timestamp >= other).to be(true)
66
+ expect(timestamp <= other).to be(true)
67
+ end
68
+ end
69
+
70
+ context "when the first object is less than the second" do
71
+
72
+ let(:other) { described_class.new(1, 15) }
73
+
74
+ it "returns -1" do
75
+ expect(timestamp <=> other).to be(-1)
76
+ expect(timestamp < other).to be(true)
77
+ expect(timestamp > other).to be(false)
78
+ expect(timestamp >= other).to be(false)
79
+ expect(timestamp <= other).to be(true)
80
+ end
81
+ end
82
+
83
+ context "when the first object is greater than the second" do
84
+
85
+ let(:other) { described_class.new(1, 5) }
86
+
87
+ it "returns 1" do
88
+ expect(timestamp <=> other).to be(1)
89
+ expect(timestamp < other).to be(false)
90
+ expect(timestamp > other).to be(true)
91
+ expect(timestamp >= other).to be(true)
92
+ expect(timestamp <= other).to be(false)
93
+ end
94
+ end
95
+
96
+ context "when the other object is not a timestamp" do
97
+
98
+ it "raises an ArgumentError" do
99
+ expect {
100
+ timestamp < 1
101
+ }.to raise_exception(ArgumentError)
102
+ end
103
+ end
104
+ end
105
+
51
106
  describe "#as_json" do
52
107
 
53
108
  let(:object) do
@@ -24,6 +24,7 @@ require "bson"
24
24
  require "json"
25
25
  require "rspec"
26
26
  require "yaml"
27
+ require "pry-nav"
27
28
 
28
29
  Dir["./spec/support/**/*.rb"].each { |file| require file }
29
30
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.2
4
+ version: 4.3.0.beta
5
5
  platform: java
6
6
  authors:
7
7
  - Tyler Brock
@@ -34,7 +34,7 @@ cert_chain:
34
34
  UgLdYyyGANc+TOKLFmx0eAJlCljAurbX7ctO2XI0f1AUdEYSqGzut+datXK/9nwQ
35
35
  FACf8zd11PEds/Opai2Qp4aOBgaxXhhFG357umy1vRs=
36
36
  -----END CERTIFICATE-----
37
- date: 2017-07-03 00:00:00.000000000 Z
37
+ date: 2017-09-20 00:00:00.000000000 Z
38
38
  dependencies: []
39
39
  description: A full featured BSON specification implementation, in Ruby
40
40
  email:
@@ -86,6 +86,7 @@ files:
86
86
  - lib/bson/true_class.rb
87
87
  - lib/bson/undefined.rb
88
88
  - lib/bson/version.rb
89
+ - lib/bson_native.bundle
89
90
  - spec/bson/array_spec.rb
90
91
  - spec/bson/binary_spec.rb
91
92
  - spec/bson/boolean_spec.rb
metadata.gz.sig CHANGED
Binary file