1.6.0

  • Adapters - Support for Rails 6.1 and above (Adapters::ActiveRecord,

    Adapters::ActiveSupportCache, ActiveSupportCache::MonetaStore)
    
  • Adapters::YAML - add ‘theadsafe` option

  • Adapters::Sequel - fix deadlock issue with #increment on MySQL in newer

    Sequel versions (#244)
    
  • Adapters::Sequel - fix issue with Postgres HStore on newer Postgres (#243)

  • Adapters - fixed an issue many adapters had where #merge! errored if passed

    an empty hash (#246)
    
  • Support changes - Drop support for 2.3 and 2.4, add support for 3.x

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 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