Can be passed to find/find_one, which in turn is passed to cursor. It is an optional block that makes it easier to turn documents that are returned into hashes.
cursor = collection.find({...}, :transformer => Proc.new { |doc| User.load(doc) })
cursor.next # returns instance of User instead of ordered hash
This will allow MongoMapper, ToyStore and other object mappers to take better advantage of Cursors. No more calling to_a and mapping to instances.
`each_with_object` is a Ruby 1.9 method, here re-implemented in core_ext.rb
in case it's missing (for older Ruby versions). Using `returning` is bad in
combination with Ruby on Rails because each usage of the method will emit
a Rails deprecation warning. This might be considered an Active Support bug,
but it's better to avoid using `returning` altogether and use `tap` from
Ruby 1.8.7, also re-implemented here in case it's missing.
Since existing usages or `returning` were better suited for `each_with_object`
than `tap`, they were rewritten using the former instead.
Results in a pretty significant performance improvement.
Many thanks to Matt Taylor for noticing the unusual glut of calls
to ObjectId#to_s. See here: http://unhalting.com/?p=18
This allows exact definition of the fields you want included in the query results. For example :fields => {:name => 1, :people => 0} will include the name key but exclude the people key.
- changed the BSON constant to BSON_CODER and scoped it inside
of a module
- changed the directory layout for all of the BSON related files
- updated the C extension to find the BSON files at their new
directory locations
- updated the C extension to use better/safer macros for accessing
the C API; extension now compiles cleanly under rubinius/rbx
- changed directory layout for BSON related tests
- modified the Rakefile to understand the new layout