moneta 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +35 -38
  3. data/CHANGES +9 -0
  4. data/CONTRIBUTORS +2 -0
  5. data/Gemfile +143 -55
  6. data/README.md +5 -4
  7. data/lib/moneta/adapter.rb +52 -0
  8. data/lib/moneta/adapters/activerecord.rb +77 -68
  9. data/lib/moneta/adapters/activesupportcache.rb +22 -31
  10. data/lib/moneta/adapters/cassandra.rb +114 -116
  11. data/lib/moneta/adapters/client.rb +17 -18
  12. data/lib/moneta/adapters/couch.rb +31 -26
  13. data/lib/moneta/adapters/datamapper.rb +9 -5
  14. data/lib/moneta/adapters/daybreak.rb +15 -21
  15. data/lib/moneta/adapters/dbm.rb +6 -12
  16. data/lib/moneta/adapters/file.rb +21 -13
  17. data/lib/moneta/adapters/fog.rb +5 -6
  18. data/lib/moneta/adapters/gdbm.rb +6 -12
  19. data/lib/moneta/adapters/hbase.rb +10 -12
  20. data/lib/moneta/adapters/kyotocabinet.rb +22 -27
  21. data/lib/moneta/adapters/leveldb.rb +14 -20
  22. data/lib/moneta/adapters/lmdb.rb +19 -22
  23. data/lib/moneta/adapters/localmemcache.rb +7 -13
  24. data/lib/moneta/adapters/lruhash.rb +20 -20
  25. data/lib/moneta/adapters/memcached/dalli.rb +25 -33
  26. data/lib/moneta/adapters/memcached/native.rb +14 -20
  27. data/lib/moneta/adapters/memory.rb +5 -7
  28. data/lib/moneta/adapters/mongo.rb +53 -52
  29. data/lib/moneta/adapters/pstore.rb +21 -27
  30. data/lib/moneta/adapters/redis.rb +42 -37
  31. data/lib/moneta/adapters/restclient.rb +17 -25
  32. data/lib/moneta/adapters/riak.rb +8 -9
  33. data/lib/moneta/adapters/sdbm.rb +6 -12
  34. data/lib/moneta/adapters/sequel/mysql.rb +8 -8
  35. data/lib/moneta/adapters/sequel/postgres.rb +17 -17
  36. data/lib/moneta/adapters/sequel/postgres_hstore.rb +47 -47
  37. data/lib/moneta/adapters/sequel/sqlite.rb +9 -9
  38. data/lib/moneta/adapters/sequel.rb +56 -65
  39. data/lib/moneta/adapters/sqlite.rb +37 -35
  40. data/lib/moneta/adapters/tdb.rb +8 -14
  41. data/lib/moneta/adapters/tokyocabinet.rb +19 -17
  42. data/lib/moneta/adapters/tokyotyrant.rb +29 -30
  43. data/lib/moneta/adapters/yaml.rb +1 -5
  44. data/lib/moneta/config.rb +101 -0
  45. data/lib/moneta/expires.rb +0 -1
  46. data/lib/moneta/expires_support.rb +3 -4
  47. data/lib/moneta/pool.rb +1 -1
  48. data/lib/moneta/proxy.rb +29 -0
  49. data/lib/moneta/server.rb +21 -14
  50. data/lib/moneta/version.rb +1 -1
  51. data/lib/moneta/wrapper.rb +5 -0
  52. data/lib/moneta.rb +2 -0
  53. data/moneta.gemspec +1 -0
  54. data/spec/moneta/adapters/client/client_helper.rb +4 -3
  55. data/spec/moneta/adapters/faraday_helper.rb +3 -2
  56. data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +10 -6
  57. data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +2 -2
  58. data/spec/moneta/config_spec.rb +219 -0
  59. data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +3 -1
  60. data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +2 -0
  61. data/spec/rack/session_moneta_spec.rb +44 -25
  62. data/spec/restserver.rb +3 -14
  63. metadata +24 -6
@@ -4,23 +4,17 @@ module Moneta
4
4
  module Adapters
5
5
  # DBM backend (Berkeley DB)
6
6
  # @api public
7
- class DBM
8
- include Defaults
7
+ class DBM < Adapter
9
8
  include DBMAdapter
10
9
  include IncrementSupport
11
10
  include CreateSupport
12
11
  include EachKeySupport
13
12
 
14
- # @param [Hash] options
15
- # @option options [String] :file Database file
16
- # @option options [::DBM] :backend Use existing backend instance
17
- def initialize(options = {})
18
- @backend = options[:backend] ||
19
- begin
20
- raise ArgumentError, 'Option :file is required' unless options[:file]
21
- ::DBM.new(options[:file])
22
- end
23
- end
13
+ # @!method initialize(options = {})
14
+ # @param [Hash] options
15
+ # @option options [String] :file Database file
16
+ # @option options [::DBM] :backend Use existing backend instance
17
+ backend { |file:| ::DBM.new(file) }
24
18
  end
25
19
  end
26
20
  end
@@ -7,14 +7,18 @@ module Moneta
7
7
  # @api public
8
8
  class File
9
9
  include Defaults
10
+ include Config
11
+
10
12
  supports :create, :increment, :each_key
11
13
 
14
+ config :dir, required: true
15
+
12
16
  # @param [Hash] options
13
17
  # @option options [String] :dir Directory where files will be stored
14
18
  def initialize(options = {})
15
- raise ArgumentError, 'Option :dir is required' unless @dir = options[:dir]
16
- FileUtils.mkpath(@dir)
17
- raise "#{@dir} is not a directory" unless ::File.directory?(@dir)
19
+ configure(options)
20
+ FileUtils.mkpath(config.dir)
21
+ raise "#{config.dir} is not a directory" unless ::File.directory?(config.dir)
18
22
  end
19
23
 
20
24
  # (see Proxy#key?)
@@ -24,12 +28,16 @@ module Moneta
24
28
 
25
29
  # (see Proxy#each_key)
26
30
  def each_key(&block)
27
- entries = ::Dir.entries(@dir).reject { |k| ::File.directory?(::File.join(@dir, k)) }
28
-
29
- return enum_for(:each_key) { ::Dir.entries(@dir).length - 2 } unless block_given?
31
+ entries = ::Dir.entries(config.dir).reject do |k|
32
+ ::File.directory?(::File.join(config.dir, k))
33
+ end
30
34
 
31
- entries.each { |k| yield(k) }
32
- self
35
+ if block_given?
36
+ entries.each { |k| yield(k) }
37
+ self
38
+ else
39
+ enum_for(:each_key) { ::Dir.entries(config.dir).length - 2 }
40
+ end
33
41
  end
34
42
 
35
43
  # (see Proxy#load)
@@ -41,7 +49,7 @@ module Moneta
41
49
 
42
50
  # (see Proxy#store)
43
51
  def store(key, value, options = {})
44
- temp_file = ::File.join(@dir, "value-#{$PROCESS_ID}-#{Thread.current.object_id}")
52
+ temp_file = ::File.join(config.dir, "value-#{$PROCESS_ID}-#{Thread.current.object_id}")
45
53
  path = store_path(key)
46
54
  FileUtils.mkpath(::File.dirname(path))
47
55
  ::File.open(temp_file, 'wb') { |f| f.write(value) }
@@ -63,9 +71,9 @@ module Moneta
63
71
 
64
72
  # (see Proxy#clear)
65
73
  def clear(options = {})
66
- temp_dir = "#{@dir}-#{$PROCESS_ID}-#{Thread.current.object_id}"
67
- ::File.rename(@dir, temp_dir)
68
- FileUtils.mkpath(@dir)
74
+ temp_dir = "#{config.dir}-#{$PROCESS_ID}-#{Thread.current.object_id}"
75
+ ::File.rename(config.dir, temp_dir)
76
+ FileUtils.mkpath(config.dir)
69
77
  self
70
78
  rescue Errno::ENOENT
71
79
  self
@@ -120,7 +128,7 @@ module Moneta
120
128
  protected
121
129
 
122
130
  def store_path(key)
123
- ::File.join(@dir, key)
131
+ ::File.join(config.dir, key)
124
132
  end
125
133
  end
126
134
  end
@@ -4,19 +4,18 @@ module Moneta
4
4
  module Adapters
5
5
  # Fog backend (Cloud storage services)
6
6
  # @api public
7
- class Fog
8
- include Defaults
7
+ class Fog < Adapter
8
+ config :dir, required: true
9
9
 
10
- attr_reader :backend
10
+ backend { |**options| ::Fog::Storage.new(options) }
11
11
 
12
12
  # @param [Hash] options
13
13
  # @option options [String] :dir Fog directory
14
14
  # @option options [::Fog::Storage] :backend Use existing backend instance
15
15
  # @option options Other options passed to `Fog::Storage#new`
16
16
  def initialize(options = {})
17
- raise ArgumentError, 'Option :dir is required' unless dir = options.delete(:dir)
18
- @backend = options[:backend] || ::Fog::Storage.new(options)
19
- @directory = @backend.directories.get(dir) || @backend.directories.create(key: dir)
17
+ super
18
+ @directory = backend.directories.get(config.dir) || backend.directories.create(key: config.dir)
20
19
  end
21
20
 
22
21
  # (see Proxy#key?)
@@ -4,23 +4,17 @@ module Moneta
4
4
  module Adapters
5
5
  # GDBM backend
6
6
  # @api public
7
- class GDBM
8
- include Defaults
7
+ class GDBM < Adapter
9
8
  include DBMAdapter
10
9
  include IncrementSupport
11
10
  include CreateSupport
12
11
  include EachKeySupport
13
12
 
14
- # @param [Hash] options
15
- # @option options [String] :file Database file
16
- # @option options [::GDBM] :backend Use existing backend instance
17
- def initialize(options = {})
18
- @backend = options[:backend] ||
19
- begin
20
- raise ArgumentError, 'Option :file is required' unless options[:file]
21
- ::GDBM.new(options[:file])
22
- end
23
- end
13
+ # @!method initialize(options = {})
14
+ # @param [Hash] options
15
+ # @option options [String] :file Database file
16
+ # @option options [::GDBM] :backend Use existing backend instance
17
+ backend { |file:| ::GDBM.new(file) }
24
18
  end
25
19
  end
26
20
  end
@@ -4,10 +4,12 @@ module Moneta
4
4
  module Adapters
5
5
  # HBase thrift backend
6
6
  # @api public
7
- class HBase
8
- include Defaults
7
+ class HBase < Adapter
8
+ config :column, 'value'
9
+ config :table, 'moneta'
10
+ config :column_family, 'moneta'
9
11
 
10
- attr_reader :backend
12
+ backend { |host: '127.0.0.1', port: 9090| HBaseRb::Client.new(host, port) }
11
13
 
12
14
  # TODO: Add create support using checkAndPut if added to thrift api
13
15
  # https://issues.apache.org/jira/browse/HBASE-3307
@@ -22,14 +24,10 @@ module Moneta
22
24
  # @option options [String] :column ('value') Column
23
25
  # @option options [::HBaseRb::Client] :backend Use existing backend instance
24
26
  def initialize(options = {})
25
- options[:column] ||= 'value'
26
- options[:table] ||= 'moneta'
27
- cf = (options[:column_family] || 'moneta')
28
- @column = "#{cf}:#{options[:column]}"
29
- @backend = options[:backend] ||
30
- HBaseRb::Client.new(options[:host] || '127.0.0.1', options[:port] || '9090')
31
- @backend.create_table(options[:table], cf) unless @backend.has_table?(options[:table])
32
- @table = @backend.get_table(options[:table])
27
+ super
28
+ @column = [config.column_family, config.column].join(':')
29
+ backend.create_table(config.table, config.column_family) unless backend.has_table?(config.table)
30
+ @table = backend.get_table(config.table)
33
31
  end
34
32
 
35
33
  # (see Proxy#key?)
@@ -75,7 +73,7 @@ module Moneta
75
73
 
76
74
  # (see Proxy#close)
77
75
  def close
78
- @backend.close
76
+ backend.close
79
77
  nil
80
78
  end
81
79
 
@@ -4,58 +4,53 @@ module Moneta
4
4
  module Adapters
5
5
  # KyotoCabinet backend
6
6
  # @api public
7
- class KyotoCabinet
8
- include Defaults
7
+ class KyotoCabinet < Adapter
9
8
  include HashAdapter
10
9
 
11
10
  supports :each_key, :increment, :create
12
11
 
13
- # @param [Hash] options
14
- # @option options [String] :file Database file
15
- # @option options [::KyotoCabinet::DB] :backend Use existing backend instance
16
- def initialize(options = {})
17
- if options[:backend]
18
- @backend = options[:backend]
19
- else
20
- raise ArgumentError, 'Option :file is required' unless options[:file]
21
- @backend = ::KyotoCabinet::DB.new
22
- raise @backend.error.to_s unless @backend.open(options[:file],
23
- ::KyotoCabinet::DB::OWRITER | ::KyotoCabinet::DB::OCREATE)
24
- end
12
+ # @!method initialize(options = {})
13
+ # @param [Hash] options
14
+ # @option options [String] :file Database file
15
+ # @option options [::KyotoCabinet::DB] :backend Use existing backend instance
16
+ backend do |file:|
17
+ backend = ::KyotoCabinet::DB.new
18
+ raise backend.error.to_s unless backend.open(file, ::KyotoCabinet::DB::OWRITER | ::KyotoCabinet::DB::OCREATE)
19
+ backend
25
20
  end
26
21
 
27
22
  # (see Proxy#key?)
28
23
  def key?(key, options = {})
29
- @backend.check(key) >= 0
24
+ backend.check(key) >= 0
30
25
  end
31
26
 
32
27
  # (see Proxy#delete)
33
28
  def delete(key, options = {})
34
- @backend.seize(key)
29
+ backend.seize(key)
35
30
  end
36
31
 
37
32
  # (see Proxy#create)
38
33
  def create(key, value, options = {})
39
- @backend.add(key, value)
34
+ backend.add(key, value)
40
35
  end
41
36
 
42
37
  # (see Proxy#close)
43
38
  def close
44
- @backend.close
39
+ backend.close
45
40
  nil
46
41
  end
47
42
 
48
43
  # (see Proxy#each_key)
49
44
  def each_key
50
- return enum_for(:each_key) { @backend.count } unless block_given?
51
- @backend.each_key { |arr| yield arr[0] }
45
+ return enum_for(:each_key) { backend.count } unless block_given?
46
+ backend.each_key { |arr| yield arr[0] }
52
47
  self
53
48
  end
54
49
 
55
50
  # (see Proxy#increment)
56
51
  def increment(key, amount = 1, options = {})
57
52
  ret = nil
58
- success = @backend.accept(key) do |_, value|
53
+ success = backend.accept(key) do |_, value|
59
54
  ret =
60
55
  if value
61
56
  Integer(value) + amount
@@ -65,13 +60,13 @@ module Moneta
65
60
  ret.to_s
66
61
  end
67
62
 
68
- raise @backend.error unless success
63
+ raise backend.error unless success
69
64
  ret
70
65
  end
71
66
 
72
67
  # (see Proxy#slice)
73
68
  def slice(*keys, atomic: true, **options)
74
- @backend.get_bulk(keys, atomic)
69
+ backend.get_bulk(keys, atomic)
75
70
  end
76
71
 
77
72
  # (see Proxy#values_at)
@@ -87,7 +82,7 @@ module Moneta
87
82
 
88
83
  success =
89
84
  if block_given?
90
- @backend.transaction(hard) do
85
+ backend.transaction(hard) do
91
86
  existing = slice(*pairs.map { |k, _| k }, **options)
92
87
  pairs = pairs.map do |key, new_value|
93
88
  if existing.key?(key)
@@ -96,13 +91,13 @@ module Moneta
96
91
  [key, new_value]
97
92
  end
98
93
  end
99
- @backend.set_bulk(pairs.to_h, atomic) >= 0
94
+ backend.set_bulk(pairs.to_h, atomic) >= 0
100
95
  end
101
96
  else
102
- @backend.set_bulk(pairs.to_h, atomic) >= 0
97
+ backend.set_bulk(pairs.to_h, atomic) >= 0
103
98
  end
104
99
 
105
- raise @backend.error unless success
100
+ raise backend.error unless success
106
101
  self
107
102
  end
108
103
  end
@@ -4,59 +4,53 @@ module Moneta
4
4
  module Adapters
5
5
  # LevelDB backend
6
6
  # @api public
7
- class LevelDB
8
- include Defaults
7
+ class LevelDB < Adapter
9
8
  include HashAdapter
10
9
  include IncrementSupport
11
10
  include CreateSupport
12
11
  include EachKeySupport
13
12
 
14
- # @param [Hash] options
15
- # @option options [String] :dir - Database path
16
- # @option options All other options passed to `LevelDB::DB#new`
17
- # @option options [::LevelDB::DB] :backend Use existing backend instance
18
- def initialize(options = {})
19
- @backend = options[:backend] ||
20
- begin
21
- raise ArgumentError, 'Option :dir is required' unless options[:dir]
22
- ::LevelDB::DB.new(options[:dir])
23
- end
24
- end
13
+ # @!method initialize(options = {})
14
+ # @param [Hash] options
15
+ # @option options [String] :dir - Database path
16
+ # @option options All other options passed to `LevelDB::DB#new`
17
+ # @option options [::LevelDB::DB] :backend Use existing backend instance
18
+ backend { |dir:| ::LevelDB::DB.new(dir) }
25
19
 
26
20
  # (see Proxy#key?)
27
21
  def key?(key, options = {})
28
- @backend.includes?(key)
22
+ backend.includes?(key)
29
23
  end
30
24
 
31
25
  # (see Proxy#clear)
32
26
  def clear(options = {})
33
- @backend.each { |k,| delete(k, options) }
27
+ backend.each { |k,| delete(k, options) }
34
28
  self
35
29
  end
36
30
 
37
31
  # (see Proxy#close)
38
32
  def close
39
- @backend.close
33
+ backend.close
40
34
  nil
41
35
  end
42
36
 
43
37
  # (see Proxy#each_key)
44
38
  def each_key
45
- return enum_for(:each_key) { @backend.size } unless block_given?
46
- @backend.each { |key, _| yield key }
39
+ return enum_for(:each_key) { backend.size } unless block_given?
40
+ backend.each { |key, _| yield key }
47
41
  self
48
42
  end
49
43
 
50
44
  # (see Proxy#values_at)
51
45
  def values_at(*keys, **options)
52
46
  ret = nil
53
- @backend.batch { ret = super }
47
+ backend.batch { ret = super }
54
48
  ret
55
49
  end
56
50
 
57
51
  # (see Proxy#merge!)
58
52
  def merge!(*keys, **options)
59
- @backend.batch { super }
53
+ backend.batch { super }
60
54
  self
61
55
  end
62
56
  end
@@ -5,28 +5,25 @@ module Moneta
5
5
  module Adapters
6
6
  # LMDB backend
7
7
  # @api public
8
- class LMDB
9
- include Defaults
10
-
8
+ class LMDB < Adapter
11
9
  supports :create, :increment, :each_key
12
- attr_reader :backend, :db
13
10
 
14
11
  PUT_FLAGS = %i[nooverwrite nodupdata current append appenddup].freeze
15
12
 
13
+ config :db, default: 'moneta'
14
+
15
+ backend do |dir:, **options|
16
+ FileUtils.mkpath(dir)
17
+ ::LMDB.new(dir, options)
18
+ end
19
+
16
20
  # @param [Hash] options
17
21
  # @option options [String] :dir Environment directory
18
22
  # @option options [::LMDB::Environment] :backend Use existing backend instance
19
- # @option options [String or nil] :db Database name
20
- def initialize(options)
21
- db = options.delete(:db)
22
- @backend = options.delete(:backend) ||
23
- begin
24
- raise ArgumentError, 'Option :dir is required' unless dir = options.delete(:dir)
25
- FileUtils.mkpath(dir)
26
- ::LMDB.new(dir, options)
27
- end
28
-
29
- @db = @backend.database(db, create: true)
23
+ # @option options [String or nil] :db ('moneta') Database name
24
+ def initialize(options = {})
25
+ super
26
+ @db = backend.database(config.db, create: true)
30
27
  end
31
28
 
32
29
  # (see Proxy#key?)
@@ -47,7 +44,7 @@ module Moneta
47
44
 
48
45
  # (see Proxy#delete)
49
46
  def delete(key, options = {})
50
- @backend.transaction do
47
+ backend.transaction do
51
48
  if value = @db.get(key)
52
49
  @db.delete(key)
53
50
  value
@@ -63,7 +60,7 @@ module Moneta
63
60
 
64
61
  # (see Proxy#increment)
65
62
  def increment(key, amount = 1, options = {})
66
- @backend.transaction do
63
+ backend.transaction do
67
64
  value = Integer(@db.get(key) || 0) + amount
68
65
  @db.put(key, value.to_s, Utils.only(options, *PUT_FLAGS))
69
66
  value
@@ -72,7 +69,7 @@ module Moneta
72
69
 
73
70
  # (see Defaults#create)
74
71
  def create(key, value, options = {})
75
- @backend.transaction do
72
+ backend.transaction do
76
73
  if @db.get(key)
77
74
  false
78
75
  else
@@ -84,7 +81,7 @@ module Moneta
84
81
 
85
82
  # (see Proxy#close)
86
83
  def close
87
- @backend.close
84
+ backend.close
88
85
  nil
89
86
  end
90
87
 
@@ -103,17 +100,17 @@ module Moneta
103
100
 
104
101
  # (see Proxy#values_at)
105
102
  def values_at(*keys, **options)
106
- @backend.transaction { super }
103
+ backend.transaction { super }
107
104
  end
108
105
 
109
106
  # (see Proxy#slice)
110
107
  def slice(*keys, **options)
111
- @backend.transaction { super }
108
+ backend.transaction { super }
112
109
  end
113
110
 
114
111
  # (see Proxy#merge!)
115
112
  def merge!(pairs, options = {})
116
- @backend.transaction { super }
113
+ backend.transaction { super }
117
114
  end
118
115
  end
119
116
  end
@@ -4,25 +4,19 @@ module Moneta
4
4
  module Adapters
5
5
  # LocalMemCache backend
6
6
  # @api public
7
- class LocalMemCache
8
- include Defaults
7
+ class LocalMemCache < Adapter
9
8
  include HashAdapter
10
9
 
11
- # @param [Hash] options
12
- # @option options [String] :file Database file
13
- # @option options [::LocalMemCache] :backend Use existing backend instance
14
- def initialize(options = {})
15
- @backend = options[:backend] ||
16
- begin
17
- raise ArgumentError, 'Option :file is required' unless options[:file]
18
- ::LocalMemCache.new(filename: options[:file])
19
- end
20
- end
10
+ # @!method initialize(options = {})
11
+ # @param [Hash] options
12
+ # @option options [String] :file Database file
13
+ # @option options [::LocalMemCache] :backend Use existing backend instance
14
+ backend { |file:| ::LocalMemCache.new(filename: file) }
21
15
 
22
16
  # (see Proxy#delete)
23
17
  def delete(key, options = {})
24
18
  value = load(key, options)
25
- @backend.delete(key)
19
+ backend.delete(key)
26
20
  value
27
21
  end
28
22
  end
@@ -6,70 +6,70 @@ module Moneta
6
6
  # both memory usage and hash size.
7
7
  #
8
8
  # @api public
9
- class LRUHash
10
- include Defaults
9
+ class LRUHash < Adapter
11
10
  include IncrementSupport
12
11
  include CreateSupport
13
12
 
14
- DEFAULT_MAX_SIZE = 1024000
15
- DEFAULT_MAX_COUNT = 10240
13
+ config :max_size, default: 1024000
14
+ config(:max_value) { |max_size:, max_value:, **| [max_value, max_size].compact.min }
15
+ config :max_count, default: 10240
16
16
 
17
17
  supports :each_key
18
18
 
19
+ backend { {} }
20
+
19
21
  # @param [Hash] options
20
22
  # @option options [Integer] :max_size (1024000) Maximum byte size of all values, nil disables the limit
21
23
  # @option options [Integer] :max_value (options[:max_size]) Maximum byte size of one value, nil disables the limit
22
24
  # @option options [Integer] :max_count (10240) Maximum number of values, nil disables the limit
23
25
  def initialize(options = {})
24
- @max_size = options.fetch(:max_size) { DEFAULT_MAX_SIZE }
25
- @max_count = options.fetch(:max_count) { DEFAULT_MAX_COUNT }
26
- @max_value = [options[:max_value], @max_size].compact.min
26
+ super
27
27
  clear
28
28
  end
29
29
 
30
30
  # (see Proxy#key?)
31
31
  def key?(key, options = {})
32
- @backend.key?(key)
32
+ backend.key?(key)
33
33
  end
34
34
 
35
35
  # (see Proxy#each_key)
36
36
  def each_key(&block)
37
- return enum_for(:each_key) { @backend.length } unless block_given?
37
+ return enum_for(:each_key) { backend.length } unless block_given?
38
38
 
39
39
  # The backend needs to be duplicated because reading mutates this
40
40
  # store.
41
- @backend.dup.each_key { |k| yield(k) }
41
+ backend.dup.each_key { |k| yield(k) }
42
42
  self
43
43
  end
44
44
 
45
45
  # (see Proxy#load)
46
46
  def load(key, options = {})
47
- if value = @backend.delete(key)
48
- @backend[key] = value
47
+ if value = backend.delete(key)
48
+ backend[key] = value
49
49
  value
50
50
  end
51
51
  end
52
52
 
53
53
  # (see Proxy#store)
54
54
  def store(key, value, options = {})
55
- if @max_value && value.bytesize > @max_value
55
+ if config.max_value && value.bytesize > config.max_value
56
56
  delete(key)
57
57
  else
58
- if @max_size
59
- if old_value = @backend.delete(key)
58
+ if config.max_size
59
+ if old_value = backend.delete(key)
60
60
  @size -= old_value.bytesize
61
61
  end
62
62
  @size += value.bytesize
63
63
  end
64
- @backend[key] = value
65
- drop while @max_size && @size > @max_size || @max_count && @backend.size > @max_count
64
+ backend[key] = value
65
+ drop while config.max_size && @size > config.max_size || config.max_count && backend.size > config.max_count
66
66
  end
67
67
  value
68
68
  end
69
69
 
70
70
  # (see Proxy#delete)
71
71
  def delete(key, options = {})
72
- if value = @backend.delete(key) and @max_size
72
+ if value = backend.delete(key) and config.max_size
73
73
  @size -= value.bytesize
74
74
  end
75
75
  value
@@ -77,7 +77,7 @@ module Moneta
77
77
 
78
78
  # (see Proxy#clear)
79
79
  def clear(options = {})
80
- @backend = {}
80
+ backend.clear
81
81
  @size = 0
82
82
  self
83
83
  end
@@ -87,7 +87,7 @@ module Moneta
87
87
  # @param [Hash] options Options to merge
88
88
  # @return [(Object, String), nil] The dropped pair, if any
89
89
  def drop(options = {})
90
- if key = @backend.keys.first
90
+ if key = backend.keys.first
91
91
  [key, delete(key)]
92
92
  end
93
93
  end