moneta 1.4.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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,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
@@ -12,7 +12,7 @@ module Moneta
12
12
 
13
13
  def key?(key, options = {})
14
14
  if @key
15
- row = @key.call(row: @row, key: key) || false
15
+ row = @key.call(row: config.hstore, key: key) || false
16
16
  row && row[:present]
17
17
  else
18
18
  @key_pl.get(key)
@@ -22,13 +22,13 @@ module Moneta
22
22
  def store(key, value, options = {})
23
23
  @backend.transaction do
24
24
  create_row
25
- @store.call(row: @row, pair: ::Sequel.hstore(key => value))
25
+ @store.call(row: config.hstore, pair: ::Sequel.hstore(key => value))
26
26
  end
27
27
  value
28
28
  end
29
29
 
30
30
  def load(key, options = {})
31
- if row = @load.call(row: @row, key: key)
31
+ if row = @load.call(row: config.hstore, key: key)
32
32
  row[:value]
33
33
  end
34
34
  end
@@ -36,7 +36,7 @@ module Moneta
36
36
  def delete(key, options = {})
37
37
  @backend.transaction do
38
38
  value = load(key, options)
39
- @delete.call(row: @row, key: key)
39
+ @delete.call(row: config.hstore, key: key)
40
40
  value
41
41
  end
42
42
  end
@@ -44,7 +44,7 @@ module Moneta
44
44
  def increment(key, amount = 1, options = {})
45
45
  @backend.transaction do
46
46
  create_row
47
- if row = @increment.call(row: @row, key: key, amount: amount).first
47
+ if row = @increment.call(row: config.hstore, key: key, amount: amount).first
48
48
  row[:value].to_i
49
49
  end
50
50
  end
@@ -55,23 +55,23 @@ module Moneta
55
55
  create_row
56
56
  1 ==
57
57
  if @create
58
- @create.call(row: @row, key: key, pair: ::Sequel.hstore(key => value))
58
+ @create.call(row: config.hstore, key: key, pair: ::Sequel.hstore(key => value))
59
59
  else
60
60
  @table
61
- .where(key_column => @row)
62
- .exclude(::Sequel[value_column].hstore.key?(key))
63
- .update(value_column => ::Sequel[value_column].hstore.merge(key => value))
61
+ .where(config.key_column => config.hstore)
62
+ .exclude(::Sequel[config.value_column].hstore.key?(key))
63
+ .update(config.value_column => ::Sequel[config.value_column].hstore.merge(key => value))
64
64
  end
65
65
  end
66
66
  end
67
67
 
68
68
  def clear(options = {})
69
- @clear.call(row: @row)
69
+ @clear.call(row: config.hstore)
70
70
  self
71
71
  end
72
72
 
73
73
  def values_at(*keys, **options)
74
- if row = @values_at.call(row: @row, keys: ::Sequel.pg_array(keys))
74
+ if row = @values_at.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
75
75
  row[:values].to_a
76
76
  else
77
77
  []
@@ -79,7 +79,7 @@ module Moneta
79
79
  end
80
80
 
81
81
  def slice(*keys, **options)
82
- if row = @slice.call(row: @row, keys: ::Sequel.pg_array(keys))
82
+ if row = @slice.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
83
83
  row[:pairs].to_h
84
84
  else
85
85
  []
@@ -91,24 +91,24 @@ module Moneta
91
91
  create_row
92
92
  pairs = yield_merge_pairs(pairs, &block) if block_given?
93
93
  hash = Hash === pairs ? pairs : Hash[pairs.to_a]
94
- @store.call(row: @row, pair: ::Sequel.hstore(hash))
94
+ @store.call(row: config.hstore, pair: ::Sequel.hstore(hash))
95
95
  end
96
96
 
97
97
  self
98
98
  end
99
99
 
100
100
  def each_key
101
- return enum_for(:each_key) { @size.call(row: @row)[:size] } unless block_given?
101
+ return enum_for(:each_key) { @size.call(row: config.hstore)[:size] } unless block_given?
102
102
 
103
103
  ds =
104
- if @each_key_server
105
- @table.server(@each_key_server)
104
+ if config.each_key_server
105
+ @table.server(config.each_key_server)
106
106
  else
107
107
  @table
108
108
  end
109
109
  ds = ds.order(:skeys) unless @table.respond_to?(:use_cursor)
110
- ds.where(key_column => @row)
111
- .select(::Sequel[value_column].hstore.skeys)
110
+ ds.where(config.key_column => config.hstore)
111
+ .select(::Sequel[config.value_column].hstore.skeys)
112
112
  .paged_each do |row|
113
113
  yield row[:skeys]
114
114
  end
@@ -118,14 +118,14 @@ module Moneta
118
118
  protected
119
119
 
120
120
  def create_row
121
- @create_row.call(row: @row)
121
+ @create_row.call(row: config.hstore)
122
122
  end
123
123
 
124
124
  def create_table
125
- key_column = self.key_column
126
- value_column = self.value_column
125
+ key_column = config.key_column
126
+ value_column = config.value_column
127
127
 
128
- @backend.create_table?(@table_name) do
128
+ @backend.create_table?(config.table) do
129
129
  column key_column, String, null: false, primary_key: true
130
130
  column value_column, :hstore
131
131
  index value_column, type: :gin
@@ -134,7 +134,7 @@ module Moneta
134
134
 
135
135
  def slice_for_update(pairs)
136
136
  keys = pairs.map { |k, _| k }.to_a
137
- if row = @slice_for_update.call(row: @row, keys: ::Sequel.pg_array(keys))
137
+ if row = @slice_for_update.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
138
138
  row[:pairs].to_h
139
139
  else
140
140
  {}
@@ -152,53 +152,53 @@ module Moneta
152
152
  def prepare_create_row
153
153
  @create_row = @table
154
154
  .insert_ignore
155
- .prepare(:insert, statement_id(:hstore_create_row), key_column => :$row, value_column => '')
155
+ .prepare(:insert, statement_id(:hstore_create_row), config.key_column => :$row, config.value_column => '')
156
156
  end
157
157
 
158
158
  def prepare_clear
159
- @clear = @table.where(key_column => :$row).prepare(:update, statement_id(:hstore_clear), value_column => '')
159
+ @clear = @table.where(config.key_column => :$row).prepare(:update, statement_id(:hstore_clear), config.value_column => '')
160
160
  end
161
161
 
162
162
  def prepare_key
163
163
  if defined?(JRUBY_VERSION)
164
164
  @key_pl = ::Sequel::Dataset::PlaceholderLiteralizer.loader(@table) do |pl, ds|
165
- ds.where(key_column => @row).select(::Sequel[value_column].hstore.key?(pl.arg))
165
+ ds.where(config.key_column => config.hstore).select(::Sequel[config.value_column].hstore.key?(pl.arg))
166
166
  end
167
167
  else
168
- @key = @table.where(key_column => :$row)
169
- .select(::Sequel[value_column].hstore.key?(:$key).as(:present))
168
+ @key = @table.where(config.key_column => :$row)
169
+ .select(::Sequel[config.value_column].hstore.key?(:$key).as(:present))
170
170
  .prepare(:first, statement_id(:hstore_key))
171
171
  end
172
172
  end
173
173
 
174
174
  def prepare_store
175
175
  @store = @table
176
- .where(key_column => :$row)
177
- .prepare(:update, statement_id(:hstore_store), value_column => ::Sequel[value_column].hstore.merge(:$pair))
176
+ .where(config.key_column => :$row)
177
+ .prepare(:update, statement_id(:hstore_store), config.value_column => ::Sequel[config.value_column].hstore.merge(:$pair))
178
178
  end
179
179
 
180
180
  def prepare_increment
181
181
  pair = ::Sequel[:hstore]
182
182
  .function(:$key, (
183
- ::Sequel[:coalesce].function(::Sequel[value_column].hstore[:$key].cast(Integer), 0) +
183
+ ::Sequel[:coalesce].function(::Sequel[config.value_column].hstore[:$key].cast(Integer), 0) +
184
184
  :$amount
185
185
  ).cast(String))
186
186
 
187
187
  @increment = @table
188
- .returning(::Sequel[value_column].hstore[:$key].as(:value))
189
- .where(key_column => :$row)
190
- .prepare(:update, statement_id(:hstore_increment), value_column => ::Sequel.join([value_column, pair]))
188
+ .returning(::Sequel[config.value_column].hstore[:$key].as(:value))
189
+ .where(config.key_column => :$row)
190
+ .prepare(:update, statement_id(:hstore_increment), config.value_column => ::Sequel.join([config.value_column, pair]))
191
191
  end
192
192
 
193
193
  def prepare_load
194
- @load = @table.where(key_column => :$row)
195
- .select(::Sequel[value_column].hstore[:$key].as(:value))
194
+ @load = @table.where(config.key_column => :$row)
195
+ .select(::Sequel[config.value_column].hstore[:$key].as(:value))
196
196
  .prepare(:first, statement_id(:hstore_load))
197
197
  end
198
198
 
199
199
  def prepare_delete
200
- @delete = @table.where(key_column => :$row)
201
- .prepare(:update, statement_id(:hstore_delete), value_column => ::Sequel[value_column].hstore.delete(:$key))
200
+ @delete = @table.where(config.key_column => :$row)
201
+ .prepare(:update, statement_id(:hstore_delete), config.value_column => ::Sequel[config.value_column].hstore.delete(:$key))
202
202
  end
203
203
 
204
204
  def prepare_create
@@ -207,30 +207,30 @@ module Moneta
207
207
  # https://stackoverflow.com/questions/11940401/escaping-hstore-contains-operators-in-a-jdbc-prepared-statement
208
208
  return if defined?(JRUBY_VERSION)
209
209
  @create = @table
210
- .where(key_column => :$row)
211
- .exclude(::Sequel[value_column].hstore.key?(:$key))
212
- .prepare(:update, statement_id(:hstore_create), value_column => ::Sequel[value_column].hstore.merge(:$pair))
210
+ .where(config.key_column => :$row)
211
+ .exclude(::Sequel[config.value_column].hstore.key?(:$key))
212
+ .prepare(:update, statement_id(:hstore_create), config.value_column => ::Sequel[config.value_column].hstore.merge(:$pair))
213
213
  end
214
214
 
215
215
  def prepare_values_at
216
216
  @values_at = @table
217
- .where(key_column => :$row)
218
- .select(::Sequel[value_column].hstore[::Sequel.cast(:$keys, :"text[]")].as(:values))
217
+ .where(config.key_column => :$row)
218
+ .select(::Sequel[config.value_column].hstore[::Sequel.cast(:$keys, :"text[]")].as(:values))
219
219
  .prepare(:first, statement_id(:hstore_values_at))
220
220
  end
221
221
 
222
222
  def prepare_slice
223
223
  slice = @table
224
- .where(key_column => :$row)
225
- .select(::Sequel[value_column].hstore.slice(:$keys).as(:pairs))
224
+ .where(config.key_column => :$row)
225
+ .select(::Sequel[config.value_column].hstore.slice(:$keys).as(:pairs))
226
226
  @slice = slice.prepare(:first, statement_id(:hstore_slice))
227
227
  @slice_for_update = slice.for_update.prepare(:first, statement_id(:hstore_slice_for_update))
228
228
  end
229
229
 
230
230
  def prepare_size
231
231
  @size = @backend
232
- .from(@table.where(key_column => :$row)
233
- .select(::Sequel[value_column].hstore.each))
232
+ .from(@table.where(config.key_column => :$row)
233
+ .select(::Sequel[config.value_column].hstore.each))
234
234
  .select { count.function.*.as(:size) }
235
235
  .prepare(:first, statement_id(:hstore_size))
236
236
  end
@@ -10,7 +10,7 @@ module Moneta
10
10
  end
11
11
 
12
12
  def store(key, value, options = {})
13
- @table.insert_conflict(:replace).insert(key_column => key, value_column => blob(value))
13
+ @table.insert_conflict(:replace).insert(config.key_column => key, config.value_column => blob(value))
14
14
  value
15
15
  end
16
16
 
@@ -25,7 +25,7 @@ module Moneta
25
25
  def merge!(pairs, options = {}, &block)
26
26
  @backend.transaction do
27
27
  pairs = yield_merge_pairs(pairs, &block) if block_given?
28
- @table.insert_conflict(:replace).import([key_column, value_column], blob_pairs(pairs).to_a)
28
+ @table.insert_conflict(:replace).import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
29
29
  end
30
30
 
31
31
  self
@@ -36,20 +36,20 @@ module Moneta
36
36
  def prepare_store
37
37
  @store = @table
38
38
  .insert_conflict(:replace)
39
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
39
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
40
40
  end
41
41
 
42
42
  def prepare_increment
43
43
  return super unless @can_upsert
44
- update_expr = (::Sequel[value_column].cast(Integer) + :$amount).cast(:blob)
44
+ update_expr = (::Sequel[config.value_column].cast(Integer) + :$amount).cast(:blob)
45
45
  @increment = @table
46
46
  .insert_conflict(
47
- target: key_column,
48
- update: { value_column => update_expr },
49
- update_where: ::Sequel.|({ value_column => blob("0") },
50
- { ::Sequel.~(::Sequel[value_column].cast(Integer)) => 0 })
47
+ target: config.key_column,
48
+ update: { config.value_column => update_expr },
49
+ update_where: ::Sequel.|({ config.value_column => blob("0") },
50
+ { ::Sequel.~(::Sequel[config.value_column].cast(Integer)) => 0 })
51
51
  )
52
- .prepare(:insert, statement_id(:increment), key_column => :$key, value_column => :$value)
52
+ .prepare(:insert, statement_id(:increment), config.key_column => :$key, config.value_column => :$value)
53
53
  end
54
54
  end
55
55
  end