CHANGELOG.md
BSON Changelog
==============
## 3.2.6
### Bug Fixes
* [#44](https://github.com/mongodb/bson-ruby/pull/44) Fixed regexp deserialization in
conjunction with SSL io. (Niels Ganser)
## 3.2.5
### Bug Fixes
* [RUBY-1024](https://jira.mongodb.org/browse/RUBY-1024) Fixed Hash#merge only to yield when keys
exist in both hashes. (Agis Anastasopoulos)
## 3.2.4
### Bug Fixes
* [RUBY-1019](https://jira.mongodb.org/browse/RUBY-1019) Performace improvements on deserialization.
## 3.2.3
### Bug Fixes
* [#41](https://github.com/mongodb/bson-ruby/pull/41) Normalizing arrays does not mutate. (Agis Anastasopoulos)
* [#40](https://github.com/mongodb/bson-ruby/pull/40) Added big endian support. (Jeff Blight)
## 3.2.1
### Bug Fixes
[#39](https://github.com/mongodb/bson-ruby/pull/39) Fixed MD5 hashing of hostname in c extension.
(James Hudon)
## 3.2.0
### Bug Fixes
* [RUBY-950](https://jira.mongodb.org/browse/RUBY-950) Don't encode to UTF-8 in Binary#to_bson, only force BINARY encoding.
### New features
* Add `BSON.ObjectId` constructor for instantiating an ObjectId from a String. Update ObjectId#inspect to print out a string that can be evaluated into the corresponding ObjectId. (Tony Ta)
## 3.1.2
### Bug Fixes
* [RUBY-950](https://jira.mongodb.org/browse/RUBY-950) Encode to UTF-8 then force
BINARY encoding in Binary#to_bson.
## 3.1.1
### Bug Fixes
* Fixed argument errors when delegating to regex objects. (Tom Scott)
## 3.1.0
### New Features
* `BSON::Regexp::Raw` now behaves like a regular `Regexp` by delegating to the compiled and
wrapped regex. (Tom Scott)
### Bug Fixes
* Fixed `inspect` on `BSON::Binary` to handle ASCII characters. (Jérémy Carlier)
## 3.0.4
### Bug Fixes
* Fixed `BSON::ObjectId.legal?` regular expression to properly check beginning and end of strings.
## 3.0.3
### Bug Fixes
* [#31](https://github.com/mongodb/bson-ruby/pull/31) Fix Int64 decode from strings.
(Nobuyoshi Nakada)
## 3.0.2
### Bug Fixes
* [RUBY-898](https://jira.mongodb.org/browse/RUBY-898) Compensated for different
return values of Socket#readbyte and OpenSSL::SSL::SSLSocket#readbyte.
## 3.0.1
### Bug Fixes
* Fixed installation on latest Rubygems which requires `'date'` to be required.
## 3.0.0
### Backwards Incompatible Changes
* [RUBY-852](https://jira.mongodb.org/browse/RUBY-852) Regular expressions that
are deserialized now return a `BSON::Regexp::Raw` instead of a `Regexp` object.
In order to get the regular expression compiled, call `#compile` on the returned object.
raw.compile
### New Features
* `BSON::Binary` now implements `#inspect` with a truncated view of the data for
better readability.
### Bug Fixes
* The native object id generation was fixed to match the raw Ruby. (Conrad Irwin)
* [#23](http://github.com/mongodb/bson-ruby/pull/23):
`BSON::Binary` types can be now used as hash keys. (Adam Wróbel)
## 2.2.3
### Bug Fixes
* Fixed native C encoding of strings and performace on Rubinius.
## 2.2.2
### Bug Fixes
* [#17](http://github.com/mongodb/bson-ruby/pull/17):
Fixed `BSON::ObjectId` counter increment on Ruby 2.1.0 since method names
can no longer override Ruby keywords.
* [#16](http://github.com/mongodb/bson-ruby/pull/16):
Fixed serialization of times when microseconds are causing `to_f` on time to
be 1 microsecond inaccurate. (Francois Bernier)
## 2.2.1
### Bug Fixes
* [#15](http://github.com/mongodb/bson-ruby/pull/15):
`Date` and `DateTime` instances now return the `Time` value for the BSON
type, so that they can be serialized inside hashes and arrays. (Michael Sell)
## 2.2.0
### Dependency Changes
* Ruby 1.8 interpreters are no longer supported.
## 2.1.2
### Bug Fixes
* [#14](http://github.com/mongodb/bson-ruby/pull/14):
Fixed all 1.8 errors related to `DateTime` serialization.
## 2.1.1
### Bug Fixes
* [#13](http://github.com/mongodb/bson-ruby/pull/13) /
[RUBY-714](http://jira.mongodb.org/browse/RUBY-714):
Require time in `DateTime` modules when using outside of
environments that don't already have time included.
## 2.1.0
### New Features
* `Date` and `DateTime` objects in Ruby can now be serialized into BSON. `Date` is
converted to a UTC `Time` at midnight and serialized, while `DateTime` is simply
converted to the identical `Time` before serialization. Note that these objects
will be deserialized into `Time` objects.
## 2.0.0
### Backwards Incompatible Changes
* `BSON::DEFAULT_MAX_BSON_SIZE` has been removed, as the BSON specification does not
provide an upper limit on how large BSON documents can be.
* `BSON.serialize` is no longer the entry point to serialize a BSON document into its
raw bytes.
For Ruby runtimes that support ordered hashes, you may simply call `to_bson` on
the hash instance (Alternatively a `BSON::Document` is also a hash:
{ key: "value" }.to_bson
BSON::Document[:key, "value"].to_bson
For Ruby runtimes that do not support ordered hashes, then you must instantiate
an instance of a `BSON::Document` (which is a subclass of hash) and call `to_bson`
on that, since the BSON specification guarantees order of the fields:
BSON::Document[:key, "value"].to_bson
* `BSON.deserialize` is no longer the entry point for raw byte deserialization into
a document.
For Ruby runtimes that support ordered hashes, you may simply call `from_bson` on
the `Hash` class if you want a `Hash` instance, or on `BSON::Document` if you
want an instance of that. The input must be a `StringIO` object:
Hash.from_bson(stringio)
BSON::Document.from_bson(stringio)
For Ruby runtimes that do not support ordered hashes, then `from_bson` must be
called on `BSON::Document` in order to guarantee order:
BSON::Document.from_bson(stringio)
* Calling `to_json` on custom BSON objects now outputs different results from before, and
conforms the BSON specification:
- `BSON::Binary`: `{ "$binary" : "\x01", "$type" : "md5" }`
- `BSON::Code`: `{ "$code" : "this.v = 5 }`
- `BSON::CodeWithScope`: `{ "$code" : "this.v = value", "$scope" : { v => 5 }}`
- `BSON::MaxKey`: `{ "$maxKey" : 1 }`
- `BSON::MinKey`: `{ "$minKey" : 1 }`
- `BSON::ObjectId`: `{ "$oid" : "4e4d66343b39b68407000001" }`
- `BSON::Timestamp`: `{ "t" : 5, "i" : 30 }`
- `Regexp`: `{ "$regex" : "[abc]", "$options" : "i" }`
### New Features
* All Ruby objects that have a corresponding object defined in the BSON specification
can now have `to_bson` called on them to get the raw BSON bytes. These objects include:
- `Array`
- `FalseClass`
- `Float`
- `Hash`
- `Integer`
- `NilClass`
- `Regexp`
- `String`
- `Symbol` (deprecated)
- `Time`
- `TrueClass`
* Custom types specific to the BSON specification that have Ruby objects defined for them
may also have `to_bson` called on them to get the raw bytes. These types are:
- `BSON::Binary`
- `BSON::Code`
- `BSON::CodeWithScope`
- `BSON::MaxKey`
- `BSON::MinKey`
- `BSON::ObjectId`
- `BSON::Timestamp`
- `BSON::Undefined`