moneta 1.4.1 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +425 -0
  3. data/CHANGES +17 -0
  4. data/CONTRIBUTORS +2 -0
  5. data/Gemfile +161 -60
  6. data/README.md +21 -17
  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 +27 -7
  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/active_support/cache_moneta_store_spec.rb +13 -13
  55. data/spec/features/null.rb +28 -28
  56. data/spec/features/persist.rb +3 -3
  57. data/spec/features/returndifferent.rb +4 -4
  58. data/spec/features/returnsame.rb +4 -4
  59. data/spec/features/store.rb +104 -104
  60. data/spec/helper.rb +15 -4
  61. data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +3 -1
  62. data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +15 -7
  63. data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +5 -2
  64. data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +5 -2
  65. data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +3 -3
  66. data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +2 -2
  67. data/spec/moneta/adapters/cassandra/adapter_cassandra_spec.rb +1 -1
  68. data/spec/moneta/adapters/cassandra/adapter_cassandra_with_default_expires_spec.rb +1 -1
  69. data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +1 -1
  70. data/spec/moneta/adapters/client/client_helper.rb +4 -3
  71. data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +25 -8
  72. data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +2 -2
  73. data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +2 -2
  74. data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +2 -2
  75. data/spec/moneta/adapters/faraday_helper.rb +3 -2
  76. data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +10 -6
  77. data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +13 -3
  78. data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +13 -3
  79. data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +2 -2
  80. data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +1 -1
  81. data/spec/moneta/adapters/redis/adapter_redis_spec.rb +13 -3
  82. data/spec/moneta/adapters/redis/standard_redis_spec.rb +8 -1
  83. data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +4 -4
  84. data/spec/moneta/adapters/sequel/helper.rb +10 -5
  85. data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +1 -1
  86. data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +1 -1
  87. data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +1 -1
  88. data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +1 -1
  89. data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +1 -1
  90. data/spec/moneta/config_spec.rb +219 -0
  91. data/spec/moneta/proxies/enumerable/enumerable_spec.rb +2 -2
  92. data/spec/moneta/proxies/pool/pool_spec.rb +31 -3
  93. data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +3 -1
  94. data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +2 -0
  95. data/spec/rack/session_moneta_spec.rb +44 -25
  96. data/spec/restserver.rb +3 -14
  97. metadata +25 -15
  98. data/.travis.yml +0 -146
  99. data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_with_default_expires_spec.rb +0 -15
  100. data/spec/moneta/adapters/memcached/native/adapter_memcached_native_with_default_expires_spec.rb +0 -15
  101. data/spec/moneta/adapters/redis/adapter_redis_with_default_expires_spec.rb +0 -10
  102. data/spec/moneta/proxies/proxy/proxy_redis_spec.rb +0 -13
@@ -5,63 +5,61 @@ module Moneta
5
5
  module Adapters
6
6
  # PStore backend
7
7
  # @api public
8
- class PStore
9
- include Defaults
8
+ class PStore < Adapter
10
9
  include NilValues
11
10
 
12
11
  supports :create, :increment, :each_key
13
- attr_reader :backend
12
+
13
+ backend do |file:, threadsafe: false|
14
+ FileUtils.mkpath(::File.dirname(file))
15
+ ::PStore.new(file, threadsafe)
16
+ end
14
17
 
15
18
  # @param [Hash] options
16
19
  # @option options [String] :file PStore file
20
+ # @option options [Boolean] :threadsafe Makes the PStore thread-safe
17
21
  # @option options [::PStore] :backend Use existing backend instance
18
22
  def initialize(options = {})
19
- @backend = options[:backend] ||
20
- begin
21
- raise ArgumentError, 'Option :file is required' unless options[:file]
22
- FileUtils.mkpath(::File.dirname(options[:file]))
23
- new_store(options)
24
- end
25
-
23
+ super
26
24
  @id = "Moneta::Adapters::PStore(#{object_id})"
27
25
  end
28
26
 
29
27
  # (see Proxy#key?)
30
28
  def key?(key, options = {})
31
- transaction(true) { @backend.root?(key) }
29
+ transaction(true) { backend.root?(key) }
32
30
  end
33
31
 
34
32
  # (see Proxy#each_key)
35
33
  def each_key(&block)
36
- return enum_for(:each_key) { transaction(true) { @backend.roots.size } } unless block_given?
34
+ return enum_for(:each_key) { transaction(true) { backend.roots.size } } unless block_given?
37
35
 
38
36
  transaction(true) do
39
- @backend.roots.each { |k| yield(k) }
37
+ backend.roots.each { |k| yield(k) }
40
38
  end
41
39
  self
42
40
  end
43
41
 
44
42
  # (see Proxy#load)
45
43
  def load(key, options = {})
46
- transaction(true) { @backend[key] }
44
+ transaction(true) { backend[key] }
47
45
  end
48
46
 
49
47
  # (see Proxy#store)
50
48
  def store(key, value, options = {})
51
- transaction { @backend[key] = value }
49
+ transaction { backend[key] = value }
52
50
  end
53
51
 
54
52
  # (see Proxy#delete)
55
53
  def delete(key, options = {})
56
- transaction { @backend.delete(key) }
54
+ transaction { backend.delete(key) }
57
55
  end
58
56
 
59
57
  # (see Proxy#increment)
60
58
  def increment(key, amount = 1, options = {})
61
59
  transaction do
62
- existing = @backend[key]
60
+ existing = backend[key]
63
61
  value = (existing == nil ? 0 : Integer(existing)) + amount
64
- @backend[key] = value.to_s
62
+ backend[key] = value.to_s
65
63
  value
66
64
  end
67
65
  end
@@ -69,10 +67,10 @@ module Moneta
69
67
  # (see Proxy#create)
70
68
  def create(key, value, options = {})
71
69
  transaction do
72
- if @backend.root?(key)
70
+ if backend.root?(key)
73
71
  false
74
72
  else
75
- @backend[key] = value
73
+ backend[key] = value
76
74
  true
77
75
  end
78
76
  end
@@ -81,8 +79,8 @@ module Moneta
81
79
  # (see Proxy#clear)
82
80
  def clear(options = {})
83
81
  transaction do
84
- @backend.roots.each do |key|
85
- @backend.delete(key)
82
+ backend.roots.each do |key|
83
+ backend.delete(key)
86
84
  end
87
85
  end
88
86
  self
@@ -109,10 +107,6 @@ module Moneta
109
107
 
110
108
  class TransactionError < StandardError; end
111
109
 
112
- def new_store(options)
113
- ::PStore.new(options[:file], options[:threadsafe])
114
- end
115
-
116
110
  def transaction(read_only = false)
117
111
  case Thread.current[@id]
118
112
  when read_only, false
@@ -122,7 +116,7 @@ module Moneta
122
116
  else
123
117
  begin
124
118
  Thread.current[@id] = read_only
125
- @backend.transaction(read_only) { yield }
119
+ backend.transaction(read_only) { yield }
126
120
  ensure
127
121
  Thread.current[@id] = nil
128
122
  end
@@ -4,32 +4,28 @@ module Moneta
4
4
  module Adapters
5
5
  # Redis backend
6
6
  # @api public
7
- class Redis
8
- include Defaults
7
+ class Redis < Adapter
9
8
  include ExpiresSupport
10
9
 
11
10
  supports :create, :increment, :each_key
12
- attr_reader :backend
13
-
14
- # @param [Hash] options
15
- # @option options [Integer] :expires Default expiration time
16
- # @option options [::Redis] :backend Use existing backend instance
17
- # @option options Other options passed to `Redis#new`
18
- def initialize(options = {})
19
- self.default_expires = options.delete(:expires)
20
- @backend = options[:backend] || ::Redis.new(options)
21
- end
11
+
12
+ # @!method initialize(options = {})
13
+ # @param [Hash] options
14
+ # @option options [Integer] :expires Default expiration time
15
+ # @option options [::Redis] :backend Use existing backend instance
16
+ # @option options Other options passed to `Redis#new`
17
+ backend { |**options| ::Redis.new(options) }
22
18
 
23
19
  # (see Proxy#key?)
24
20
  #
25
21
  # This method considers false and 0 as "no-expire" and every positive
26
22
  # number as a time to live in seconds.
27
23
  def key?(key, options = {})
28
- with_expiry_update(key, default: nil, **options) do
29
- if @backend.respond_to?(:exists?)
30
- @backend.exists?(key)
24
+ with_expiry_update(key, default: nil, **options) do |pipeline_handle|
25
+ if pipeline_handle.respond_to?(:exists?)
26
+ pipeline_handle.exists?(key)
31
27
  else
32
- @backend.exists(key)
28
+ pipeline_handle.exists(key)
33
29
  end
34
30
  end
35
31
  end
@@ -44,8 +40,8 @@ module Moneta
44
40
 
45
41
  # (see Proxy#load)
46
42
  def load(key, options = {})
47
- with_expiry_update(key, default: nil, **options) do
48
- @backend.get(key)
43
+ with_expiry_update(key, default: nil, **options) do |pipeline_handle|
44
+ pipeline_handle.get(key)
49
45
  end
50
46
  end
51
47
 
@@ -63,17 +59,17 @@ module Moneta
63
59
  # (see Proxy#delete)
64
60
  def delete(key, options = {})
65
61
  future = nil
66
- @backend.pipelined do
67
- future = @backend.get(key)
68
- @backend.del(key)
62
+ @backend.pipelined do |pipeline|
63
+ future = pipeline.get(key)
64
+ pipeline.del(key)
69
65
  end
70
66
  future.value
71
67
  end
72
68
 
73
69
  # (see Proxy#increment)
74
70
  def increment(key, amount = 1, options = {})
75
- with_expiry_update(key, **options) do
76
- @backend.incrby(key, amount)
71
+ with_expiry_update(key, **options) do |pipeline_handle|
72
+ pipeline_handle.incrby(key, amount)
77
73
  end
78
74
  end
79
75
 
@@ -85,10 +81,10 @@ module Moneta
85
81
 
86
82
  # (see Defaults#create)
87
83
  def create(key, value, options = {})
88
- expires = expires_value(options, @default_expires)
84
+ expires = expires_value(options, config.expires)
89
85
 
90
86
  if @backend.setnx(key, value)
91
- update_expires(key, expires)
87
+ update_expires(@backend, key, expires)
92
88
  true
93
89
  else
94
90
  false
@@ -103,8 +99,8 @@ module Moneta
103
99
 
104
100
  # (see Defaults#values_at)
105
101
  def values_at(*keys, **options)
106
- with_expiry_update(*keys, default: nil, **options) do
107
- @backend.mget(*keys)
102
+ with_expiry_update(*keys, default: nil, **options) do |pipeline_handle|
103
+ pipeline_handle.mget(*keys)
108
104
  end
109
105
  end
110
106
 
@@ -130,8 +126,8 @@ module Moneta
130
126
  end
131
127
  end
132
128
 
133
- with_expiry_update(*keys, **options) do
134
- @backend.mset(*pairs.to_a.flatten(1))
129
+ with_expiry_update(*keys, **options) do |pipeline_handle|
130
+ pipeline_handle.mset(*pairs.to_a.flatten(1))
135
131
  end
136
132
 
137
133
  self
@@ -139,24 +135,33 @@ module Moneta
139
135
 
140
136
  protected
141
137
 
142
- def update_expires(key, expires)
138
+ def update_expires(pipeline_handle, key, expires)
143
139
  case expires
144
140
  when false
145
- @backend.persist(key)
141
+ pipeline_handle.persist(key)
146
142
  when Numeric
147
- @backend.pexpire(key, (expires * 1000).to_i)
143
+ pipeline_handle.pexpire(key, (expires * 1000).to_i)
148
144
  end
149
145
  end
150
146
 
151
- def with_expiry_update(*keys, default: @default_expires, **options)
147
+ def with_expiry_update(*keys, default: config.expires, **options)
152
148
  expires = expires_value(options, default)
153
149
  if expires == nil
154
- yield
150
+ yield(@backend)
155
151
  else
156
152
  future = nil
157
- @backend.multi do
158
- future = yield
159
- keys.each { |key| update_expires(key, expires) }
153
+ @backend.multi do |pipeline|
154
+ # as of redis 4.6 calling redis methods on the redis client itself
155
+ # is deprecated in favor of a pipeline handle provided by the
156
+ # +multi+ call. This will cause in error in redis >= 5.0.
157
+ #
158
+ # In order to continue supporting redis versions < 4.6, the following
159
+ # fallback has been introduced and can be removed once moneta
160
+ # no longer supports redis < 4.6.
161
+
162
+ pipeline_handle = pipeline || @backend
163
+ future = yield(pipeline_handle)
164
+ keys.each { |key| update_expires(pipeline_handle, key, expires) }
160
165
  end
161
166
  future.value
162
167
  end
@@ -4,55 +4,47 @@ module Moneta
4
4
  module Adapters
5
5
  # Moneta rest client backend which works together with {Rack::MonetaRest}
6
6
  # @api public
7
- class RestClient
8
- include Defaults
9
-
10
- attr_reader :backend
11
-
12
- # @param [Hash] options
13
- # @option options [String] :url URL
14
- # @option options [Symbol] :adapter The adapter to tell Faraday to use
15
- # @option options [Faraday::Connection] :backend Use existing backend instance
16
- # @option options Other options passed to {Faraday::new} (unless
17
- # :backend option is provided).
18
- def initialize(options = {})
19
- @backend = options.delete(:backend) ||
20
- begin
21
- raise ArgumentError, 'Option :url is required' unless url = options.delete(:url)
22
- block = if faraday_adapter = options.delete(:adapter)
23
- proc { |faraday| faraday.adapter faraday_adapter }
24
- end
25
- ::Faraday.new(url, options, &block)
26
- end
7
+ class RestClient < Adapter
8
+ # @!method initialize(options = {})
9
+ # @param [Hash] options
10
+ # @option options [String] :url URL
11
+ # @option options [Symbol] :adapter The adapter to tell Faraday to use
12
+ # @option options [Faraday::Connection] :backend Use existing backend instance
13
+ # @option options Other options passed to {Faraday::new} (unless
14
+ # :backend option is provided).
15
+ backend do |url:, adapter: nil, **options|
16
+ ::Faraday.new(url, options) do |faraday|
17
+ faraday.adapter adapter if adapter
18
+ end
27
19
  end
28
20
 
29
21
  # (see Proxy#key?)
30
22
  def key?(key, options = {})
31
- @backend.head(key).status == 200
23
+ backend.head(key).status == 200
32
24
  end
33
25
 
34
26
  # (see Proxy#load)
35
27
  def load(key, options = {})
36
- response = @backend.get(key)
28
+ response = backend.get(key)
37
29
  response.status == 200 ? response.body : nil
38
30
  end
39
31
 
40
32
  # (see Proxy#store)
41
33
  def store(key, value, options = {})
42
- response = @backend.post(key, value)
34
+ response = backend.post(key, value)
43
35
  raise "HTTP error #{response.status}" unless response.status == 200
44
36
  value
45
37
  end
46
38
 
47
39
  # (see Proxy#delete)
48
40
  def delete(key, options = {})
49
- response = @backend.delete(key)
41
+ response = backend.delete(key)
50
42
  response.status == 200 ? response.body : nil
51
43
  end
52
44
 
53
45
  # (see Proxy#clear)
54
46
  def clear(options = {})
55
- @backend.delete ''
47
+ backend.delete ''
56
48
  self
57
49
  end
58
50
  end
@@ -5,21 +5,20 @@ module Moneta
5
5
  # Riak backend
6
6
  # @api public
7
7
  # @author Potapov Sergey (aka Blake)
8
- class Riak
9
- include Defaults
8
+ class Riak < Adapter
9
+ config :bucket, default: 'moneta'
10
+ config :content_type, default: 'application/octet-stream'
10
11
 
11
- attr_reader :backend
12
+ backend { |**options| ::Riak::Client.new(options) }
12
13
 
13
14
  # @param [Hash] options
14
15
  # @option options [String] :bucket ('moneta') Bucket name
15
16
  # @option options [String] :content_type ('application/octet-stream') Default content type
16
- # @option options All other options passed to `Riak::Client#new`
17
17
  # @option options [::Riak::Client] :backend Use existing backend instance
18
+ # @option options All other options passed to `Riak::Client#new`
18
19
  def initialize(options = {})
19
- bucket = options.delete(:bucket) || 'moneta'
20
- @content_type = options.delete(:content_type) || 'application/octet-stream'
21
- @backend = options[:backend] || ::Riak::Client.new(options)
22
- @bucket = @backend.bucket(bucket)
20
+ super
21
+ @bucket = backend.bucket(config.bucket)
23
22
  end
24
23
 
25
24
  # (see Proxy#key?)
@@ -44,7 +43,7 @@ module Moneta
44
43
  # (see Proxy#store)
45
44
  def store(key, value, options = {})
46
45
  obj = ::Riak::RObject.new(@bucket, key)
47
- obj.content_type = options[:content_type] || @content_type
46
+ obj.content_type = options[:content_type] || config.content_type
48
47
  obj.raw_data = value
49
48
  obj.store(options.dup)
50
49
  value
@@ -4,23 +4,17 @@ module Moneta
4
4
  module Adapters
5
5
  # SDBM backend
6
6
  # @api public
7
- class SDBM
8
- include Defaults
7
+ class SDBM < 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 [::SDBM] :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
- ::SDBM.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 [::SDBM] :backend Use existing backend instance
17
+ backend { |file:| ::SDBM.new(file) }
24
18
  end
25
19
  end
26
20
  end
@@ -14,7 +14,7 @@ module Moneta
14
14
  # "gap lock").
15
15
  if row = @load_for_update.call(key: key)
16
16
  # Integer() will raise an exception if the existing value cannot be parsed
17
- amount += Integer(row[value_column])
17
+ amount += Integer(row[config.value_column])
18
18
  @increment_update.call(key: key, value: amount)
19
19
  else
20
20
  @create.call(key: key, value: amount)
@@ -31,17 +31,17 @@ module Moneta
31
31
  pairs = yield_merge_pairs(pairs, &block) if block_given?
32
32
  @table
33
33
  .on_duplicate_key_update
34
- .import([key_column, value_column], blob_pairs(pairs).to_a)
34
+ .import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
35
35
  end
36
36
 
37
37
  self
38
38
  end
39
39
 
40
40
  def each_key
41
- return super unless block_given? && @each_key_server && @table.respond_to?(:stream)
41
+ return super unless block_given? && config.each_key_server && @table.respond_to?(:stream)
42
42
  # Order is not required when streaming
43
- @table.server(@each_key_server).select(key_column).paged_each do |row|
44
- yield row[key_column]
43
+ @table.server(config.each_key_server).select(config.key_column).paged_each do |row|
44
+ yield row[config.key_column]
45
45
  end
46
46
  self
47
47
  end
@@ -51,13 +51,13 @@ module Moneta
51
51
  def prepare_store
52
52
  @store = @table
53
53
  .on_duplicate_key_update
54
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
54
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
55
55
  end
56
56
 
57
57
  def prepare_increment
58
58
  @increment_update = @table
59
- .where(key_column => :$key)
60
- .prepare(:update, statement_id(:increment_update), value_column => :$value)
59
+ .where(config.key_column => :$key)
60
+ .prepare(:update, statement_id(:increment_update), config.value_column => :$value)
61
61
  super
62
62
  end
63
63
  end
@@ -12,14 +12,14 @@ module Moneta
12
12
  def increment(key, amount = 1, options = {})
13
13
  result = @increment.call(key: key, value: blob(amount.to_s), amount: amount)
14
14
  if row = result.first
15
- row[value_column].to_i
15
+ row[config.value_column].to_i
16
16
  end
17
17
  end
18
18
 
19
19
  def delete(key, options = {})
20
20
  result = @delete.call(key: key)
21
21
  if row = result.first
22
- row[value_column]
22
+ row[config.value_column]
23
23
  end
24
24
  end
25
25
 
@@ -27,19 +27,19 @@ module Moneta
27
27
  @backend.transaction do
28
28
  pairs = yield_merge_pairs(pairs, &block) if block_given?
29
29
  @table
30
- .insert_conflict(target: key_column,
31
- update: { value_column => ::Sequel[:excluded][value_column] })
32
- .import([key_column, value_column], blob_pairs(pairs).to_a)
30
+ .insert_conflict(target: config.key_column,
31
+ update: { config.value_column => ::Sequel[:excluded][config.value_column] })
32
+ .import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
33
33
  end
34
34
 
35
35
  self
36
36
  end
37
37
 
38
38
  def each_key
39
- return super unless block_given? && !@each_key_server && @table.respond_to?(:use_cursor)
39
+ return super unless block_given? && !config.each_key_server && @table.respond_to?(:use_cursor)
40
40
  # With a cursor, this will Just Work.
41
- @table.select(key_column).paged_each do |row|
42
- yield row[key_column]
41
+ @table.select(config.key_column).paged_each do |row|
42
+ yield row[config.key_column]
43
43
  end
44
44
  self
45
45
  end
@@ -48,30 +48,30 @@ module Moneta
48
48
 
49
49
  def prepare_store
50
50
  @store = @table
51
- .insert_conflict(target: key_column,
52
- update: { value_column => ::Sequel[:excluded][value_column] })
53
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
51
+ .insert_conflict(target: config.key_column,
52
+ update: { config.value_column => ::Sequel[:excluded][config.value_column] })
53
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
54
54
  end
55
55
 
56
56
  def prepare_increment
57
57
  update_expr = ::Sequel[:convert_to].function(
58
58
  (::Sequel[:convert_from].function(
59
- ::Sequel[@table_name][value_column],
59
+ ::Sequel[config.table][config.value_column],
60
60
  'UTF8'
61
61
  ).cast(Integer) + :$amount).cast(String),
62
62
  'UTF8'
63
63
  )
64
64
 
65
65
  @increment = @table
66
- .returning(value_column)
67
- .insert_conflict(target: key_column, update: { value_column => update_expr })
68
- .prepare(:insert, statement_id(:increment), key_column => :$key, value_column => :$value)
66
+ .returning(config.value_column)
67
+ .insert_conflict(target: config.key_column, update: { config.value_column => update_expr })
68
+ .prepare(:insert, statement_id(:increment), config.key_column => :$key, config.value_column => :$value)
69
69
  end
70
70
 
71
71
  def prepare_delete
72
72
  @delete = @table
73
- .returning(value_column)
74
- .where(key_column => :$key)
73
+ .returning(config.value_column)
74
+ .where(config.key_column => :$key)
75
75
  .prepare(:delete, statement_id(:delete))
76
76
  end
77
77
  end