1.5.2

* Proxy - handle returning config when the adapter does not use config
* Avoid calling `supports?(:expires)` when expiry isn't needed
* Adapters::Mongo - fix `merge!` behaviour when no values are inserted

1.5.1

* Adapters::File - fix an implicit hash issue in Ruby 3 (#222)

1.5.0

* Adapters - internally, most (all?) adapters now inherit from a base Adapter class
* Adapters - adapter configuration is now accessed via a `config` method on
             each adapter - see the code for examples.  This shouldn't affect
             users unless they were directly modifying adapters' attributes.
* Redis - fix deprecation warnings for Redis 4.6+ multi/pipelined handling (#215)
* Mongo - slight improvement to error handling

1.4.2

* Pool - fix busy-loop issue (#197)

1.4.1

* Adapters::Mongo - deprecate :db option, document :database option (#194)
* Adapters::Mongo - add retries to increment operation

1.4.0

* Adapters::Mongo - drop support for moped gem (#182)
* Adapters::Redis - use #exists? where available (#189)
* Some reorganisation of code into more separate files (#177)

1.3.0

* Transformer - add :each_key support (#170)
* Server - add :each_key support, use non-blocking IO (#165)
* Builder - dup options before passing to adapter/proxy (#174)
* Adapter::Couch - add HTTP basic auth support
* Support MRI 2.7.0 (#172)
* Minimum required MRI version is now 2.3.0 (#172)

1.2.1

* Transformer - fix :escape transformer deserialize implementation (#168)

1.2.0

* Adapters::Sequel - fix for compatibility with new version of JDBC SQLite
* Adapters::Couch - refactor of error handling, #clear, #merge!, #slice, rev caching
* Fallback - add fallback proxy (#162)
* Pool - rewrite to enable limiting of size, gradual shrinking
* Enumerable - add proxy providing Enumerable API (using #each_key)
* Adapters::Couch, Adapters::RestClient - add Faraday :adapter option
* Adapters::Couch - add :full_commit and :batch options to some operations
* Adapters::LRUHash - rewrite to take advantage of ordered hashes
* Adapters::ActiveRecord - recover from deadlock during increment

1.1.1

* Adapters::Sequel - use prepared statements
* Adapters::Sqlite - use upsert for increment where supported

1.1.0

* Adapters::ActiveRecord - rewrite to use Arel directly; support for Rails 5
* Moneta::Server - close all connections when stopping
* Moneta::Shared - recover from socket errors
* Transformer - add :urlsafe_base64; use this by default for keys with Couch
  adapter
* Adapters::MongoMoped - recover from failed increment
* Moneta::Pool - fix race condition in #pop (#144)
* Moneta::Client - raise EOFError if a read fails
* Moneta::Expires - use Rational objects to get much more accurate time
  resolution
* Moneta::Lock/Moneta::Pool - allow wrapped methods to call other wrapped
  methods
* Adapters::Sequel - add optimisations for MySQL, PostgreSQL and SQLite
* Adapters::Sequel - add Postgres+HStore backend
* Add Adapters::ActiveSupportCache
* Adapters::Sqlite - add :journal_mode option
* Add table creation options to Sequel and ActiveRecord adapters
* Adapters::ActiveRecord - support for forking (#159)
* Adapters::Cassandra - rewrite to use cassandra-driver gem (#81)
* Adapters::Couch - add a LRUHash to cache document revs
* Adapters::KyotoCabinet - implement atomic increment
* Add :each_key feature and implemented on many adapters; add
  Moneta::WeakEachKey (#143; see feature matrix)
* Add bulk read/write methods to the spec; added default implementation to
  Defaults and fast versions in many adapters (#116; see feature matrix)
* First class support for latest JRuby (#160)
* Minimum required MRI version is now 2.2.2 (#135)

1.0.0

* Adapters::Sequel - allow usage of Sequel extensions and connection validation
* ActiveSupport::Cache::MonetaStore - dup options before mutating them
* ActiveSupport::Cache::MonetaStore - allow writing raw values

0.8.1

* Adapters::TokyoTyrant - more consistent error handling
* Adapters::MongoMoped - support for moped gem v2.0
* Adapters::MongoOfficial - support for mongo gem versions 2-4
* Adapters::File - fix a bug in #load (#74)
* Adapters::LRUHash - allow to disable the limits by passing nil for max_size, max_count
* Transformer - don't use OpenSSL::Digest::Digest namespace
* Adapters::Sequel - fix issue with unknown "blob" type
* Rack::Cache - fix deprecated require paths
* Adapters::MemcachedNative - properly close connections
* Transformer - support bson gem versions 2-4
* Transformer - switch to rbzip2 gem for bzip2 support
* Adapters::MemcachedDalli - #create returns a boolean

0.8.0

* Rename Moneta::Adapters::Mongo to Moneta::Adapters::MongoOfficial
* Add Moneta::Adapters::MongoMoped
* Drop Ruby 1.8 support

0.7.20

* Adapters::LRUHash: add option :max_value
* Moneta.new(:Couch, :Riak, :RestClient): use urlencode instead of base64 for key encoding)
* Transformer: Add :hex encoder
* Transformer: Don't wrap object in array for JSON serialization
* Transformer: Add :php serializer
* Moneta.new(:Sequel) - Don't encode blob data using base64
* Moneta::Adapters::LMDB added (Symas Lightning Memory-Mapped Database)
* Moneta::Adapters::Sequel - Fix for https://github.com/jeremyevans/sequel/issues/715

0.7.19

* ActionDispatch::Session::MonetaStore fixed for Rails 4
* Moneta::Server: Tries now to remove stale unix socket
* Moneta::Server: More robust and better performance

0.7.18

* Adapters::File#increment and #create fixed on JRuby
* Adapters::Couch and Adapters::Mongo can store hashes directly as documents.
  It is not necessary to serialize values as strings anymore.
* Adapters::Couch#create added
* Pool thread safety improved
* Transformer: Add CityHash

0.7.17

* Transformer: LZ4 compression added

0.7.16

* Better builder validation
* Adapters::Sequel: check for correct exceptions

0.7.15

* CONTRIBUTORS file added
* Adapters::File#increment fixed

0.7.14

* Adapters::ActiveRecord, Adapters::Sequel: store values as blobs
* Adapters::ActiveRecord fixed and improved

0.7.13

* Adapters::ActiveRecord: Use connection_pool
* Adapters::File: Race condition in #increment fixed

0.7.12

* Concurrency tests added
* Bugfixes for File, Sqlite, Sequel and Datamapper, ActiveRecord

0.7.11

* Logger: Add option :file
* Adapters::TokyoTyrant supports both native (ruby-tokyotyrant) and pure-ruby tokyotyrant gems
* Adapters::Couch use Faraday directly instead of buggy CouchRest
* Adapters::RestClient use Faraday
* Transformer: add quoted printable encoding (:qp)

0.7.10

* Adapters::TokyoTyrant added
* Add attr_reader :backend and option :backend to some adapters
* Cache rename #backend to #adapter

0.7.9

* Adapters::KyotoCabinet added
* Feature detection methods #features and #supports? added
* Validity checks added which check features

0.7.8

* Adapters::Memcached: switched to Dalli by default
* Adapters::Daybreak: add option :sync to load and store
* Adapters::LRUHash: add option :max_count
* Adapters::Mongo: add options :user and :password
* Adapters::Mongo: Correctly close connection
* Adapters::Redis: Correctly close connection
* Transformer: add inspect key transformer
* Added #create method to atomically create entries
* Added WeakCreate and WeakIncrement proxies
* Added Mutex and Semaphore synchronization primitives for
  shared/distributed database locks
* Rename unix socket options from :file to :socket

0.7.6

* Adapters::Daybreak: api changed
* Adapters::File: flock fix for jruby
* Transformer: add to_s key transformer

0.7.5

* OptionsSupport#with: Add support to insert additional proxies
* Builder#adapter: Accepts Moneta store instance now

0.7.4

* Transformer: fix truncate
* Adapters::RestClient: raise error if store fails
* Adapters::TDB added
* Adapters::Daybreak added
* Adapters::Mongo - Expiration and increment support added
* Pool proxy added
* Mixin ExpiresSupport added
  * Expiration value handling unified
  * 0 and false are interpreted as persist value
* Adapters::RestClient uses net/http now

0.7.3

* Added Adapters::RestClient
* Added Rack::MonetaRest
* Added Rack::MonetaStore

0.7.2

* Renamed WithOptions to OptionSupport
* Refactored Base in Defaults mixin
* Removed Transformer option :quiet
* Transformer might raise an exception if an invalid value is transformed
* Expires middleware only wraps Arrays and nils in an Array if
  no expiration time is given (backward compatible change)
* Moneta middlewares are not allowed to modify option hash given to functions
  like #load and #store

0.7.1

* Memcached: Use binary protocol and no base64 encoding of the keys
* Transformer: Remove newlines from base64 encodes values
* Server: Add method #run which will block and #running? to allow forking
* SDBM: #store might raise errors (Don't use SDBM, it is unstable!)
* Add #decrement method
* Fix #fetch to handle false correctly
* Fix Expires middleware to handle boolean and nil values correctly
* Base64 encode Riak keys since Riak needs valid UTF-8 for the REST interface

0.7.0

* Major rewrite by Daniel Mendler

0.6.0

* First public release by Yehuda Katz
