Ripple Release Notes
0.9.4 Patch Release – 2011-05-10
Release 0.9.4 is a minor bugfix release.
- 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]
0.9.3 Patch Release – 2011-04-18
Release 0.9.3 is a minor bugfix release.
- 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]
0.9.2 Patch Release – 2011-04-11
Release 0.9.2 is a minor bugfix release.
- 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.
0.9.1 Patch Release – 2011-04-07
Release 0.9.1 is a minor bugfix release.
- Fix strange encoding problems on Ruby 1.9 when using Protocol Buffers.
- Use http_port rather than port in the generated TestServer. [Myron Marston]
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.
- 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]
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.
- 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]
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.
require 'riak/search' to add Search-related features to riak-client.
- 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]
0.8.1 Patch/Minor Feature Release – 2010-10-11
Release 0.8.1 includes several new features and bugfixes.
- 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]
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
- 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.
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
- The Ripple::Document and Ripple::EmbeddedDocument are less coupled
from one another so numerous internal confusions about calling order
- When using Riak::RObject#to_link, a blank tag is no longer allowed.
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]
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
- Time-related properties properly convert to string formats in JSON that
they will work in the context of MapReduce jobs.
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
- Added timestamps! method for easily adding created_at/updated_at to documents.
- 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).
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
- Adjusted gem specification to accommodate edge Rails. [Preston Marshall]
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.
- A robust basic client,
- 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)
- Simple finders – all documents, by key