h1. Ripple Release Notes h2. 0.9.5 Patch Release - 2011-06-14 Release 0.9.5 is a minor bugfix release but also includes some small features. Full notes: * Allow IO-like objects to be used as RObject data. [Josh Nichols] * Set the content-length or transfer-encoding appropriately for Net::HTTP. Fixes #162. * Fix MapReduce jobs on PBC when keep=false on certain phases. [Alexander Lang] * Invalidate the key-cache for a bucket when streaming. * Pass options through Document#all to Bucket#keys. * Make Hash#to_param compatible with ActiveSupport. [Dave Perrett] * Add support for previous_changes functionality and make available to callbacks. [Nathaniel Talbott, Sean Cribbs h2. 0.9.4 Patch Release - 2011-05-10 Release 0.9.4 is a minor bugfix release. Full notes: * Allow global JSON options to be set so that deeply nested objects can be serialized. * Set TCP_NODELAY on PBC sockets and send messages in a single write to reduce latency. [Technorama, Dan Hodge] * X510 should be X509 in OpenSSL. [Adam Hunter] h2. 0.9.3 Patch Release - 2011-04-18 Release 0.9.3 is a minor bugfix release. Full notes: * Make YAML serialization spec immune to engine differences. [Jeff Pollard] * Key-streaming over HTTP are immune to JSON objects that cross chunk boundaries. * Require 'yaml' so we can read the config file. * Require 'erb' so we can eval the config. [Myron Marston] * Move definition of validates_associated back into the validator. [Myron Marston] * Require 'set' before Set is extended. [André Silva] h2. 0.9.2 Patch Release - 2011-04-11 Release 0.9.2 is a minor bugfix release. Full notes: * Remove usage of autoload from all projects to reduce thread-safety problems. * Fix Excon backend to properly initialize response headers under error conditions. [Jeff Pollard, Myron Marston] * Excon yields multiple arguments to the streaming block. h2. 0.9.1 Patch Release - 2011-04-07 Release 0.9.1 is a minor bugfix release. Full notes: * Fix strange encoding problems on Ruby 1.9 when using Protocol Buffers. * Use http_port rather than port in the generated TestServer. [Myron Marston] h2. 0.9.0 Feature Release - 2011-04-03 Release 0.9.0 is a huge step forward from the 0.8 series, including support for Riak 0.14.x features, Protocol Buffers transport, and many bugfixes. Following this release, the code will be branched into a 0.9-stable branch, which will only receive critical bugfixes. Development of 1.0 features will occur on the master branch. Full notes: * Fixed some client semantics: separate ports for protocols, client ID responsibility. * Add definition of EmbeddedDocument#==. [Myron Marston] * Allow a many-linked doc to be removed from an association. [Myron Marston] * Fix one-linked association to return nil appropriately. [Myron Marston] * Added external JSON serialization for Ripple documents. * Fixed validates_associated. [Myron Marston] * Fixed assignment bug in one-embedded associations. [Myron Marston] * Added integration tests that work across all client backends. * Added support for Protocol Buffers transport with Beefcake library. * Added HTTP Basic authorization support. [Adam Hunter] * Added HTTPS support. [Adam Hunter] * Normalized project Gemfiles. * Extracted stream-isolating pump pattern from client backends. * Improve speed and reliability of test server. * Bubble up errors when saving a document. [Duff OMelia] * Add automatic expiration to Rack session store. * Use ISO8601 datetime format in stored documents (configurable). [Nicolas Fouché] * Access document attributes that do not have a declared property. [Duff OMelia] * Fix document callback ordering. [Nathaniel Talbott] * Consolidate setting of the object key when link-walking. [Kyle Kingsbury] * Added support for streaming MapReduce. * Bucket instances are now memoized in the Client. [Woody Peterson] * Client backends were refactored so that higher layers are not concerned with transport semantics. * Fix false.present? bug. * Riak 0.14 features: ** MapReduce has support for key-filters. ** Add list_buckets operation. ** HTTP resources prefixes can be discovered from the root URL. * Added document observers using ActiveModel::Observer. [Stefan Sprenger] * :key is a protected attribute on Document models. [Adam Hunter] h2. 0.8.3 Patch/Minor Feature Release - 2010-12-13 Release 0.8.3 includes new generators for Rails 3 projects, a new HTTP backend based on Wesley Beary's Excon library, and significant bugfixes for Document models. @riak-client@ is now also completely independent of ActiveSupport, and all three libraries have better support for JRuby. Full notes: * Fix edge case where NetHTTPBackend would not #to_i the response code. * Improve handling of Time properties, including ActiveSupport::TimeWithZone. [Duff O'Melia] * Don't cast empty string for Numeric property types. [Marco Campana] * Add MapReduce built-ins generator. * Add generators to help with Riak::TestServer and initial Rails 3 setup. [Duff O'Melia, Sean Cribbs] * Improve handling of Document properties we don't know about. * Refactored RequestHeaders so it can be used by multiple backends. * Add Excon HTTP backend. * Control mock HTTP server via DRb so as to avoid deadlocks. * Monkeypatch #present? seperately from #blank?. [Kyle Kingsbury] * Improved RObject#inspect output. [Jay Adkisson] * Fix Bucket#keys raising exceptions on rare occasions. [Kyle Kingsbury] * Add support for mass-assignment security on Document models. * Moved ActiveSupport version check into CacheStore. * Added example TestServer config files. * Allow document assignment even if the value is a proxy. [Duff O'Melia] * Remove "install curb" warnings. * Improve JRuby compatibility. * Resolve Hash-ordering differences between 1.9 and 1.8 in specs. * Fix 1.8.x issue with Open3 returning a nil waitthread in the TestServer. * Removed riak-client dependency on ActiveSupport. [Kyle Kingsbury] * Report a changed attribute only if its value changes. [Duff O'Melia] * Reloading a Ripple::Document now casts property values. [Duff O'Melia] h2. 0.8.2 Patch/Minor Feature Release - 2010-10-22 Release 0.8.2 includes significant additions to support features in Riak 0.13, including Riak Search and Luwak. Simply @require 'riak/search'@ to add Search-related features to riak-client. Full notes: * Fixed bug in embedded associations where associated validators would be added every time the association was instantiated. [Adam Hunter] * Update and loosen dependencies to Rails 3.0.1 and RSpec 2. * Add support for file-existence check in Luwak. [John Axel Eriksson] * Avoid clobbering an existing Boolean class or module. * Add Luwak support. * Add Search features. [Sean Cribbs, Rusty Klophaus] h2. 0.8.1 Patch/Minor Feature Release - 2010-10-11 Release 0.8.1 includes several new features and bugfixes. Full notes: * Riak::TestServer makes it easier and faster to run automated tests that need to store data in Riak. It includes an in-memory Riak backend that quickly clears its contents at the end of a test/example. All included integration tests now use this. * Headers are turned into strings before splitting into 8KB chunks. [Nicolas Fouché] * Riak::RObject#prevent_stale_writes option allows conditional PUT semantics, matching on ETag. [Lee Jensen] * Riak::RObject#raw_data gives access to the object data before deserialization. [Lee Jensen] * Boolean properties on Ripple documents now allow a default value of false. [Duff O'Melia] * Ripple documents now support accepts_nested_attributes_for. [Brian Kaney] h2. 0.8.0 Feature Release - 2010-08-31 The 0.8.0 release is packed full of new features and bugfixes. Of particular note are: * Rails 3 final support * Session stores * Linked associations * Riak 0.12 support Full notes: * Ripple::Document classes can define their desired quorum parameters. * ripple and riak-sessions use Rails 3 final. riak-client is still compatible with active_support >= 2.3.5. * Keys are not loaded by default when requesting a Riak::Bucket. This matches the default for Riak 0.12. * Ripple::Document now supports update_attributes and update_attribute. * Inspection output has been improved for Ripple documents. * Ripple::Document classes can now have associations that use links. * Property-casting patches are now eagerly loaded. * Certain responses from MapReduce can be converted into Riak::RObjects. [Misha Gorodnitzky] * Key/bucket (un)escaping has been improved. [Nicolas Fouché] * Riak::CacheStore sets and uses bucket-default quorums instead of per-request parameters. * Riak::Bucket supports new quorum defaults. * The default configuration file for Ripple is now config/ripple.yml. [Ashley Woodard] * Added a Rails 3 model generator. [Ashley Woodard] * Serializing RObject data via Marshal is now simpler, using "application/x-ruby-marshal" content-type. * Large HTTP headers (Link tends to be one) are split into 8KB chunks for both backends. * Added session stores for Rack and Rails 3. * Document#find returns nil when all arguments are blank. * CurbBackend now properly handles IO objects as the request body data. * Ripple::Document classes that have the same bucket/key are equivalent using ==. * Ripple::Document classes can use a property as the key, as long as it's a String. h2. 0.7.1 Patch Release - 2010-06-08 This release has no new features but includes bug fixes and some internal refactoring of the Ripple::Document hierarchy. * The Net::HTTP backend should handle streamed keys better (although still not perfectly). * The Riak::MapReduce#timeout method now returns self, allowing chaining. * The Ripple::Document and Ripple::EmbeddedDocument are less coupled from one another so numerous internal confusions about calling order are fixed. * When using Riak::RObject#to_link, a blank tag is no longer allowed. h2. 0.7.0 Feature Release - 2010-05-06 This release includes a number of new features. The largest change is that the library is now split into two gems, 'riak-client' and 'ripple'. 'riak-client' supports ActiveSupport 2.3.5, 'ripple' only supports 3.0.0.beta3. A big kudos goes to Adam Hunter who contributed the majority of the new associations code. In addition, these changes were made: * Keys should stream properly now from Bucket#keys (the "stream" option was left off). * Deletes can be issued directly from a Bucket without instantiating an RObject. * Added a ActiveSupport 3.0-compatible Cache Store. [Shay Frendt] * Added Bucket#exists? * A provisionally complete implementation of embedded document associations. [Adam Hunter] * Ripple::Document passes ActiveModel::Lint tests. * Updated Rails 3 dependencies to beta3 and RSpec to 2.0.0.beta6 * Ripple::Document handles nil keys better. [John Lynch] h2. 0.6.1 Patch Release - 2010-03-17 This is a minor release with fixes for a few issues: * Riak::Link objects will now be unique when added to RObject#links Set. [John Lynch] * Attributes on Ripple::Document classes are no longer clone, which had prevented non-scalar properties from being modified directly (e.g. Array). * Buckets, keys, and walk specs are properly escaped in URLs (including slashes). * Time-related properties properly convert to string formats in JSON that they will work in the context of MapReduce jobs. h2. 0.6.0 Feature Release - 2010-03-05 This release contains enhancements and bugfixes in preparation for the Riak 0.9 release. * The CurbBackend now uses fibers to prevent curl-handle corruption when a block is given to streaming operations. * The default prefix is now "/riak/" to match the latest version of Riak. * The client configuration for Ripple is now used. * Added Bucket#new and Bucket#get_or_new for easily creating new objects. * Added Bucket#allow_mult and Bucket#n_value accessors for more easily setting bucket properties. * Added timestamps! method for easily adding created_at/updated_at to documents. [Adam Hunter] * The 'links' collection on RObject is now a Set instead of an Array. * All literal messages are now stored in YAML localization files. * Object siblings (caused by concurrent updates when allow_mult is true) can now be accessed directly. * Map-reduce jobs now have timeouts (in parity with Riak). h2. 0.5.1 Patch Release - 2010-02-22 This is a minor release with fixes for Ruby 1.9, bundler/edge Rails, and a minor feature addition. Changes: * Qualify namespaces for Ruby 1.9. * Decoupled a few specs that gave the appearance of failure. * Added "bucket" and "key" properties on Riak::Link objects. [John Lynch] * Fully-qualify the @JSON@ constant, using @ActiveSupport::JSON@ instead. * Adjusted gem specification to accommodate edge Rails. [Preston Marshall] h2. 0.5 Initial Release - 2010-02-10 This is the first release of Ripple, which would not have been possible without the generous support of Sonian and Basho Technologies. Many thanks. It includes: * A robust basic client, @Riak@, with: ** multiple HTTP backends (curb, net/http) ** sensible client defaults (local, default port) ** bucket access and manipulation, including key-streaming ** object reading, storing, deleting and reloading ** automatic de-serialization of JSON, YAML, and Marshal (when given the right content type) ** streaming POST/PUT bodies (when given an IO) ** method-chained map-reduce job construction * A document-style modeling library, Ripple, with: ** ActiveModel 3.0 compatibility ** Property/attribute definition with automatic type-casting ** Bucket selection based on class name, with single-bucket inheritance (configurable) ** Validations ** Dirty-tracking ** Simple finders - all documents, by key ** Reloading