We're very excited about the latest version of Pacer. We've used Pacer 0.9 for almost a year now and it's served us very well, but in that time we found a few pieces that we weren't happy with. We've addressed those issues and also made improvements in its architecture, consistency, and performance. So, here's what's new in Pacer 1.0:

  • The already comprehensive spec suite has been improved and also runs almost 10x faster.

  • Graphs and elements are always wrapped. Previously, Pacer patched the raw Java classes to add the methods it needs in addition to allowing elements to be wrapped. By choosing to always use wrapping, we can provide a cleaner, easier, and more consistent interface.

  • It uses the current Tinkerpop 2.1 stack with the most current versions of all of its supported databases including Neo4j, Dex, OrientDB, and TinkerGraph. This is great news because the Tinkerpop stack and the graphs that it supports are constantly improving.
  • The pacer-[graphdb] gems are no longer required but are all updated as a convenient way to get the dependent jars without the pain of using maven.
  • Pacer can fully support all of Blueprints' WrapperGraph implementations. If you need the functionality behind one of the wrappers or want to create your own, simply initialize a new PacerGraph with the wrapped graph.
  • Pacer is now able to fully support all Gremlin pipes including those that require PipeFunctions, making all features in Gremlin available to Pacer in addition to Pacer's own unique features.
  • Many internal details of the implementation have been improved to make Pacer's source much easier to understand and extend. This provides a solid base on which to develop sophisticated projects.

Breaking changes and upgrade notes

Breaking changes have been kept to a minimum but there were a number of places that we weren't happy with the previous implementation and have addressed them.

  • Pacer now requires JRuby 1.7. This latest version of JRuby handles Java exceptions significantly more cleanly which eliminated a problem we previously had to work around in numerous places. In addition it is now in 1.9 mode by default, starts up faster, and conforms to the more recent Ruby 1.9.3 which brings valuable improvements to the standard Ruby libraries.

  • To find an index, the #index_name method has been renamed to #index.

  • All #element_type methods now return simply :vertex, :edge, :mixed or :object.
  • The #extensions method sometimes returned a Set and sometimes an Array. Now it always returns an Array.
  • Elements yielded to a block within a route no longer have the BlockFilterElement extension added to them. In the rare occasion that you need to use the #back or #vars methods within a block, they can be easily accessed by referring to the route itself within the block. To see an example, refer to the as_spec.rb file.