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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a202106a03e55e35500188da66bf1509b5759c5d202ef0b6b84e731247d8fa62
4
- data.tar.gz: 964762ceafae4fafa65f0a07e2ac6d90f8d1bc43b1d74d5428736eb9a23a86f0
3
+ metadata.gz: 67e7a85926fad89dd255f180a3455b67c923d0194d447a8fe82cca0dbb546bbe
4
+ data.tar.gz: 51e15e0e3e1bafd312ee62d807afb72836e4f5c3cc036dc8c1ee0dcb8d51f80a
5
5
  SHA512:
6
- metadata.gz: 18e5417ed780ae397000d539e8d7f1d5e51dfce856fb7913f11f2ff5f53a1c5f52a50ba3a2bccaca5572d894f8fd1adf77a73f1b446323e00b7c0cf0814c3710
7
- data.tar.gz: c8f781706f5cd8022a9b728a2d9948d7a14e08c875ee6c1b75d4df7faefb94ebf54a0192733b5c0af05d1b879296dcf687aedaf40125daad234aaa44429cb540
6
+ metadata.gz: cc4340a0c94ce262108361a3ed49116980cc0ee94838810babe5015bb43d3084875fa3e76f232b182470dda6a5ab9ac7e09fe9917a97082047ec9d0b7112a02a
7
+ data.tar.gz: a0f1c197e3222848e246bf0535805b4dd47bf8dbf9b3a383c619e187cb9b6d64ac6de4f711190630b4befac1e820061fd66a04d83a529a01bee519fbcde4af23
@@ -2,9 +2,9 @@ name: Ruby CI
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [ master ]
5
+ branches: [ main ]
6
6
  pull_request:
7
- branches: [ master ]
7
+ branches: [ main ]
8
8
 
9
9
  jobs:
10
10
  adapters:
@@ -14,7 +14,7 @@ jobs:
14
14
  fail-fast: false
15
15
 
16
16
  matrix:
17
- ruby-version: [2.7, 2.6, 2.5, 2.4, 2.3, jruby]
17
+ ruby-version: [2.7, 2.6, 2.5, 2.4, jruby]
18
18
  adapter:
19
19
  - Client
20
20
  - Cookie
@@ -42,7 +42,7 @@ jobs:
42
42
  - YAML
43
43
 
44
44
  env:
45
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper memcached_native
45
+ BUNDLE_WITH: ${{ matrix.adapter }} snappy
46
46
 
47
47
  steps:
48
48
  - uses: actions/checkout@v2
@@ -51,7 +51,7 @@ jobs:
51
51
  run: sudo apt-get update
52
52
 
53
53
  - name: Apt install dependencies
54
- run: sudo apt-get install -y libkyotocabinet-dev libleveldb-dev liblzo2-dev libtdb-dev libtokyocabinet-dev tokyotyrant libgdbm-dev
54
+ run: sudo apt-get install -y libkyotocabinet-dev libleveldb-dev libtdb-dev libtokyocabinet-dev tokyotyrant libgdbm-dev
55
55
 
56
56
  - name: Set up Ruby ${{ matrix.ruby-version }}
57
57
  uses: ruby/setup-ruby@v1
@@ -61,7 +61,7 @@ jobs:
61
61
  bundler-cache: true
62
62
 
63
63
  - name: Rspec
64
- run: bundle exec rspec -t ~unstable -t adapter:${{ matrix.adapter }}
64
+ run: bundle exec rspec -t ~unstable -t adapter:${{ matrix.adapter }} -- spec/moneta
65
65
 
66
66
  couch:
67
67
  name: "Couch adapter"
@@ -83,10 +83,10 @@ jobs:
83
83
 
84
84
  strategy:
85
85
  matrix:
86
- ruby-version: [2.7, 2.3, jruby]
86
+ ruby-version: [2.7, 2.4, jruby]
87
87
 
88
88
  env:
89
- BUNDLE_WITHOUT: activerecord riak cassandra postgresql mysql datamapper memcached_native leveldb lzo tdb
89
+ BUNDLE_WITH: RestClient
90
90
 
91
91
  steps:
92
92
  - uses: actions/checkout@v2
@@ -99,7 +99,7 @@ jobs:
99
99
  bundler-cache: true
100
100
 
101
101
  - name: Rspec
102
- run: bundle exec rspec -t adapter:Couch
102
+ run: bundle exec rspec -t adapter:Couch -- spec/moneta
103
103
 
104
104
  cassandra:
105
105
  name: "Cassandra adapter"
@@ -111,17 +111,17 @@ jobs:
111
111
  options: >-
112
112
  --health-cmd "cqlsh -e \"SELECT cql_version FROM system.local\""
113
113
  --health-interval 10s
114
- --health-timeout 5s
115
- --health-retries 5
114
+ --health-timeout 10s
115
+ --health-retries 10
116
116
  ports:
117
117
  - 9042:9042
118
118
 
119
119
  strategy:
120
120
  matrix:
121
- ruby-version: [2.7, 2.3, jruby]
121
+ ruby-version: [2.7, 2.4, jruby]
122
122
 
123
123
  env:
124
- BUNDLE_WITHOUT: activerecord riak couch postgresql mysql datamapper memcached_native leveldb lzo tdb
124
+ BUNDLE_WITH: Cassandra
125
125
 
126
126
  steps:
127
127
  - uses: actions/checkout@v2
@@ -134,7 +134,7 @@ jobs:
134
134
  bundler-cache: true
135
135
 
136
136
  - name: Rspec
137
- run: bundle exec rspec -t adapter:Cassandra
137
+ run: bundle exec rspec -t adapter:Cassandra -- spec/moneta
138
138
 
139
139
  mysql-adapters:
140
140
  name: "MySQL adapters"
@@ -158,7 +158,7 @@ jobs:
158
158
  ruby-version: [2.7, 2.4, jruby]
159
159
 
160
160
  env:
161
- BUNDLE_WITHOUT: riak couch cassandra postgresql memcached_native leveldb
161
+ BUNDLE_WITH: ActiveRecord Sequel DataMapper mysql
162
162
  MYSQL_HOST: 127.0.0.1
163
163
  MONETA_MYSQL_PASSWORD: moneta
164
164
 
@@ -189,7 +189,7 @@ jobs:
189
189
  bundler-cache: true
190
190
 
191
191
  - name: Rspec
192
- run: bundle exec rspec -t mysql
192
+ run: bundle exec rspec -t mysql -- spec/moneta
193
193
 
194
194
  postgres-adapters:
195
195
  name: "Postgres adapters"
@@ -197,7 +197,7 @@ jobs:
197
197
 
198
198
  services:
199
199
  postgres:
200
- image: postgres
200
+ image: postgres:13.6
201
201
  env:
202
202
  POSTGRES_PASSWORD: moneta
203
203
  options: >-
@@ -210,10 +210,10 @@ jobs:
210
210
 
211
211
  strategy:
212
212
  matrix:
213
- ruby-version: [2.7, 2.3, jruby]
213
+ ruby-version: [2.7, 2.4, jruby]
214
214
 
215
215
  env:
216
- BUNDLE_WITHOUT: riak couch cassandra mysql memcached_native leveldb
216
+ BUNDLE_WITH: ActiveRecord Sequel DataMapper postgresql
217
217
  PGHOST: localhost
218
218
  PGUSER: postgres
219
219
  PGPASSWORD: moneta
@@ -238,7 +238,7 @@ jobs:
238
238
  bundler-cache: true
239
239
 
240
240
  - name: Rspec
241
- run: bundle exec rspec -t postgres
241
+ run: bundle exec rspec -t postgres -- spec/moneta
242
242
 
243
243
  sqlite-adapters:
244
244
  name: "SQLite adapters"
@@ -246,10 +246,10 @@ jobs:
246
246
 
247
247
  strategy:
248
248
  matrix:
249
- ruby-version: [2.7, 2.3, jruby]
249
+ ruby-version: [2.7, 2.4, jruby]
250
250
 
251
251
  env:
252
- BUNDLE_WITHOUT: riak couch cassandra mysql postgres memcached_native leveldb
252
+ BUNDLE_WITH: ActiveRecord Sequel DataMapper sqlite
253
253
 
254
254
  steps:
255
255
  - uses: actions/checkout@v2
@@ -262,7 +262,7 @@ jobs:
262
262
  bundler-cache: true
263
263
 
264
264
  - name: Rspec
265
- run: bundle exec rspec -t sqlite
265
+ run: bundle exec rspec -t sqlite -- spec/moneta
266
266
 
267
267
  redis:
268
268
  name: "Redis adapters"
@@ -281,10 +281,10 @@ jobs:
281
281
 
282
282
  strategy:
283
283
  matrix:
284
- ruby-version: [2.7, 2.3, jruby]
284
+ ruby-version: [2.7, 2.4, jruby]
285
285
 
286
286
  env:
287
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper memcached_native leveldb
287
+ BUNDLE_WITH: Redis
288
288
 
289
289
  steps:
290
290
  - uses: actions/checkout@v2
@@ -297,7 +297,7 @@ jobs:
297
297
  bundler-cache: true
298
298
 
299
299
  - name: Rspec
300
- run: bundle exec rspec -t adapter:Redis -t redis
300
+ run: bundle exec rspec -t adapter:Redis -t redis -- spec/moneta
301
301
 
302
302
  memcached:
303
303
  name: "Memcached adapters"
@@ -305,10 +305,10 @@ jobs:
305
305
 
306
306
  strategy:
307
307
  matrix:
308
- ruby-version: [2.7, 2.3, jruby]
308
+ ruby-version: [2.7, 2.4, jruby]
309
309
 
310
310
  env:
311
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper leveldb lzo tdb
311
+ BUNDLE_WITH: Memcached
312
312
 
313
313
  steps:
314
314
  - uses: actions/checkout@v2
@@ -327,7 +327,7 @@ jobs:
327
327
  bundler-cache: true
328
328
 
329
329
  - name: Rspec
330
- run: bundle exec rspec -t ~unstable -t adapter:Memcached -t memcached
330
+ run: bundle exec rspec -t ~unstable -t adapter:Memcached -t memcached -- spec/moneta
331
331
 
332
332
  mongo:
333
333
  name: "Mongo adapter"
@@ -346,10 +346,10 @@ jobs:
346
346
 
347
347
  strategy:
348
348
  matrix:
349
- ruby-version: [2.7, 2.3] #, jruby] - FIXME reenable once https://github.com/mongodb/mongo-ruby-driver/pull/2143 is released
349
+ ruby-version: [2.7, 2.4] #, jruby] - FIXME reenable once https://github.com/mongodb/mongo-ruby-driver/pull/2143 is released
350
350
 
351
351
  env:
352
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper memcached_native leveldb
352
+ BUNDLE_WITH: Mongo
353
353
 
354
354
  steps:
355
355
  - uses: actions/checkout@v2
@@ -362,7 +362,7 @@ jobs:
362
362
  bundler-cache: true
363
363
 
364
364
  - name: Rspec
365
- run: bundle exec rspec -t adapter:Mongo
365
+ run: bundle exec rspec -t adapter:Mongo -- spec/moneta
366
366
 
367
367
  residual-specs:
368
368
  name: "Proxies and other specs"
@@ -370,10 +370,10 @@ jobs:
370
370
 
371
371
  strategy:
372
372
  matrix:
373
- ruby-version: [2.7, 2.3, jruby]
373
+ ruby-version: [2.7, 2.4, jruby]
374
374
 
375
375
  env:
376
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper memcached_native redis leveldb
376
+ BUNDLE_WITH: transformers GDBM Fog
377
377
 
378
378
  steps:
379
379
  - uses: actions/checkout@v2
@@ -382,7 +382,7 @@ jobs:
382
382
  run: sudo apt-get update
383
383
 
384
384
  - name: Apt install dependencies
385
- run: sudo apt-get install -y libgdbm-dev
385
+ run: sudo apt-get install -y libgdbm-dev liblzo2-dev
386
386
 
387
387
  - name: Set up Ruby ${{ matrix.ruby-version }}
388
388
  uses: ruby/setup-ruby@v1
@@ -401,9 +401,6 @@ jobs:
401
401
  name: "Rubocop"
402
402
  runs-on: ubuntu-latest
403
403
 
404
- env:
405
- BUNDLE_WITHOUT: activerecord riak couch cassandra postgresql mysql datamapper memcached_native redis leveldb
406
-
407
404
  steps:
408
405
  - uses: actions/checkout@v2
409
406
 
data/CHANGES CHANGED
@@ -1,3 +1,12 @@
1
+ 1.5.0
2
+
3
+ * Adapters - internally, most (all?) adapters now inherit from a base Adapter class
4
+ * Adapters - adapter configuration is now accessed via a `config` method on
5
+ each adapter - see the code for examples. This shouldn't affect
6
+ users unless they were directly modifying adapters' attributes.
7
+ * Redis - fix deprecation warnings for Redis 4.6+ multi/pipelined handling (#215)
8
+ * Mongo - slight improvement to error handling
9
+
1
10
  1.4.2
2
11
 
3
12
  * Pool - fix busy-loop issue (#197)
data/CONTRIBUTORS CHANGED
@@ -3,6 +3,7 @@ Alastair Pharo <me@asph.dev>
3
3
  Alejandro Crosa <acrosa@sharing.local>
4
4
  Alessio Signorini <alessio@signorini.us>
5
5
  Anthony Eden <anthonyeden@gmail.com>
6
+ Antonio Terceiro <terceiro@debian.org>
6
7
  Atoxhybrid <atoxhybrid@gmail.com>
7
8
  AtoxIO <atoxhybrid@gmail.com>
8
9
  Ben Schwarz <ben.schwarz@gmail.com>
@@ -32,6 +33,7 @@ Potapov Sergey <blake131313@gmail.com>
32
33
  Quin Hoxie <quin@aboutus.org>
33
34
  Ryan T. Hosford <tad.hosford@gmail.com>
34
35
  Scott Wadden <scott.wadden@gmail.com>
36
+ Sven Riedel <sr@gimp.org>
35
37
  Timo Goebel <timo.goebel@dm.de>
36
38
  Tom Meier <ozmeier@yahoo.co.uk>
37
39
  Tony Han <h.bing612@gmail.com>
data/Gemfile CHANGED
@@ -1,86 +1,174 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
- # Used by multiple backends / transformers
5
- gem 'multi_json', groups: %i{json couch cassandra}
6
- gem 'faraday', groups: %i{couch restclient}
7
- gem 'manticore', groups: %i{couch restclient}, platforms: :jruby
4
+ group :transformers, optional: true do
5
+ group :tnet, optional: true do
6
+ gem 'tnetstring'
7
+ end
8
+
9
+ group :bencode, optional: true do
10
+ gem 'bencode'
11
+ end
12
+
13
+ group :ox, optional: true do
14
+ gem 'ox', platforms: :ruby
15
+ end
16
+
17
+ group :bert, optional: true do
18
+ gem 'bert', platforms: :ruby
19
+ end
20
+
21
+ group :php, optional: true do
22
+ gem 'php-serialize'
23
+ end
24
+
25
+ group :bson, optional: true do
26
+ gem 'bson', '>= 4.0.0'
27
+ end
28
+
29
+ group :msgpack, optional: true do
30
+ gem 'msgpack', platforms: :ruby
31
+ gem 'msgpack-jruby', platforms: :jruby
32
+ end
33
+
34
+ # Compressors used by Transformer
35
+ group :bzip2, optional: true do
36
+ gem 'rbzip2', '>= 0.3.0'
37
+ end
38
+
39
+ group :lz4, optional: true do
40
+ gem 'lz4-ruby', platforms: :ruby
41
+ end
42
+
43
+ group :lzma, optional: true do
44
+ gem 'ruby-lzma', platforms: :ruby
45
+ end
46
+
47
+ group :lzo, optional: true do
48
+ gem 'lzoruby', platforms: :ruby
49
+ end
50
+
51
+ group :snappy, optional: true do
52
+ gem 'snappy', platforms: :ruby
53
+ end
54
+
55
+ group :quicklz, optional: true do
56
+ gem 'qlzruby', platforms: :ruby
57
+ end
58
+
59
+ # Hash transformer library
60
+ group :city, optional: true do
61
+ gem 'cityhash', platforms: :ruby
62
+ end
63
+ end
8
64
 
9
- # Serializers used by Transformer
10
- gem 'tnetstring', group: :tnet
11
- gem 'bencode', group: :bencode
12
- gem 'ox', platforms: :ruby, group: :ox
13
- gem 'bert', platforms: :ruby, group: :bert
14
- gem 'php-serialize', group: :php
65
+ # Backends
66
+ group :Daybreak, optional: true do
67
+ gem 'daybreak'
68
+ end
15
69
 
16
- group :bson do
17
- gem 'bson', '>= 4.0.0'
70
+ group :ActiveRecord, optional: true do
71
+ gem 'activerecord', '~> 5.2'
18
72
  end
19
73
 
20
- group :msgpack do
21
- gem 'msgpack', platforms: :ruby
22
- gem 'msgpack-jruby', platforms: :jruby
74
+ group :Redis, optional: true do
75
+ gem 'redis', '~> 4.2'
23
76
  end
24
77
 
25
- # Compressors used by Transformer
26
- gem 'rbzip2', '>= 0.3.0', group: :bzip2
27
- gem 'lz4-ruby', platforms: :ruby, group: :lz4
28
- gem 'ruby-lzma', platforms: :ruby, group: :lzma
29
- gem 'lzoruby', platforms: :ruby, group: :lzo
30
- gem 'snappy', platforms: :ruby, group: :snappy
31
- gem 'qlzruby', platforms: :ruby, group: :quicklz
78
+ group :Mongo, optional: true do
79
+ gem 'mongo', '>= 2'
80
+ end
32
81
 
33
- # Hash transformer library
34
- gem 'cityhash', platforms: :ruby, group: :city
82
+ group :Sequel, optional: true do
83
+ gem 'sequel', '5.52.0'
84
+ end
35
85
 
36
- # Backends
37
- gem 'daybreak', group: :daybreak
38
- gem 'activerecord', '~> 5.2', group: :activerecord
39
- gem 'redis', '~> 4.2', group: :redis
40
- gem 'mongo', '>= 2', group: :mongo_official
41
- gem 'sequel', group: :sequel
42
- gem 'dalli', group: :memcached_dalli
43
- gem 'riak-client', group: :riak
44
- gem 'cassandra-driver', group: :cassandra
45
- gem 'tokyotyrant', group: :tokyotyrant
46
- gem 'hbaserb', group: :hbase
47
- gem 'localmemcache', platforms: :ruby, group: :localmemcache
48
- gem 'tdb', platforms: :ruby, group: :tdb
49
- gem 'leveldb-ruby', platforms: :ruby, group: :leveldb
50
- gem 'lmdb', platforms: :mri, group: :lmdb
51
- gem 'tokyocabinet', platforms: :ruby, group: :tokyocabinet
52
- gem 'kyotocabinet-ruby-reanimated', platforms: [:ruby_23, :ruby_24, :ruby_25, :ruby_26], group: :kyotocabinet
53
- gem 'memcached', platforms: :ruby, group: :memcached_native
54
- gem 'jruby-memcached', platforms: :jruby, group: :memcached_native
55
- gem 'activerecord-jdbch2-adapter', platforms: :jruby, group: :h2, github: 'jruby/activerecord-jdbc-adapter', glob: 'activerecord-jdbch2-adapter/*.gemspec', branch: '52-stable'
56
- gem 'ffi-gdbm', platforms: :jruby, group: :gdbm
57
- group :restclient do
58
- gem 'fishwife', platforms: :jruby
59
- gem 'rjack-logback', platforms: :jruby
60
- end
61
-
62
- group :datamapper do
86
+ group :Memcached, optional: true do
87
+ group :MemcachedDalli, optional: true do
88
+ gem 'dalli', '~> 2.7.11'
89
+ end
90
+
91
+ group :MemcachedNative, optional: true do
92
+ gem 'memcached', platforms: :ruby
93
+ gem 'jruby-memcached', platforms: :jruby
94
+ end
95
+ end
96
+
97
+ group :Riak, optional: true do
98
+ gem 'riak-client'
99
+ end
100
+
101
+ group :Cassandra, optional: true do
102
+ gem 'cassandra-driver'
103
+ end
104
+
105
+ group :TokyoTyrant, optional: true do
106
+ gem 'tokyotyrant'
107
+ end
108
+
109
+ group :HBase, optional: true do
110
+ gem 'hbaserb'
111
+ end
112
+
113
+ group :LocalMemCache, optional: true do
114
+ gem 'localmemcache', platforms: :ruby
115
+ end
116
+
117
+ group :TDB, optional: true do
118
+ gem 'tdb', platforms: :ruby
119
+ end
120
+
121
+ group :LevelDB, optional: true do
122
+ gem 'leveldb-ruby', platforms: :ruby
123
+ end
124
+
125
+ group :LMDB, optional: true do
126
+ gem 'lmdb', platforms: :mri
127
+ end
128
+
129
+ group :TokyoCabinet, optional: true do
130
+ gem 'tokyocabinet', platforms: :ruby
131
+ end
132
+
133
+ group :KyotoCabinet, optional: true do
134
+ gem 'kyotocabinet-ruby-reanimated', platforms: [:ruby_23, :ruby_24, :ruby_25, :ruby_26]
135
+ end
136
+
137
+ group :H2, optional: true do
138
+ gem 'activerecord-jdbch2-adapter', platforms: :jruby, github: 'jruby/activerecord-jdbc-adapter', glob: 'activerecord-jdbch2-adapter/*.gemspec', branch: '52-stable'
139
+ end
140
+
141
+ group :GDBM, optional: true do
142
+ gem 'ffi-gdbm', platforms: :jruby
143
+ end
144
+
145
+ group :RestClient do
146
+ gem 'faraday'
147
+ gem 'webrick'
148
+ end
149
+
150
+ group :DataMapper, optional: true do
63
151
  gem 'dm-core'
64
152
  gem 'dm-migrations'
65
153
  gem 'dm-mysql-adapter'
66
154
  end
67
155
 
68
- group :fog do
156
+ group :Fog, optional: true do
69
157
  gem 'fog-aws', '>= 1.11.1'
70
158
  gem 'mime-types'
71
159
  end
72
160
 
73
- group :mysql do
161
+ group :mysql, optional: true do
74
162
  gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
75
163
  gem 'mysql2', platforms: :ruby
76
164
  end
77
165
 
78
- group :sqlite do
166
+ group :sqlite, optional: true do
79
167
  gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
80
168
  gem 'sqlite3', '~> 1.3.6', platforms: :ruby
81
169
  end
82
170
 
83
- group :postgresql do
171
+ group :postgresql, optional: true do
84
172
  gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
85
173
  gem 'pg', platforms: :ruby
86
174
  end
data/README.md CHANGED
@@ -77,8 +77,8 @@ store.close
77
77
  * Tests and benchmarks: <https://github.com/moneta-rb/moneta/actions>
78
78
  * API documentation:
79
79
  * Latest Gem: <http://rubydoc.info/gems/moneta/frames>
80
- * GitHub master: <http://rubydoc.info/github/moneta-rb/moneta/master/frames>
81
- * Changelog: <https://github.com/moneta-rb/moneta/blob/master/CHANGES>
80
+ * GitHub main: <http://rubydoc.info/github/moneta-rb/moneta/main/frames>
81
+ * Changelog: <https://github.com/moneta-rb/moneta/blob/main/CHANGES>
82
82
 
83
83
  In case you are wondering, Moneta uses [Semantic Versioning](https://semver.org/) since v1.0.0.
84
84
 
@@ -135,7 +135,7 @@ to upgrade to a real key/value store.
135
135
 
136
136
  ### Backend feature matrix
137
137
 
138
- __NOTE:__ <a name="backend-matrix"></a>The backend matrix is much more readable on rubydoc.info than on github. [Go there!](http://rubydoc.info/github/moneta-rb/moneta/master/file/README.md#backend-matrix)
138
+ __NOTE:__ <a name="backend-matrix"></a>The backend matrix is much more readable on rubydoc.info than on github. [Go there!](http://rubydoc.info/github/moneta-rb/moneta/main/file/README.md#backend-matrix)
139
139
 
140
140
  <table>
141
141
  <tr><th>Adapter</th><th>Required gems</th><th style="writing-mode:tb">MRI support<sup>1</sup></th><th style="writing-mode:tb">JRuby support<sup>1</sup></th><th style="writing-mode:tb">Multi-thread safe<sup>2</sup></th><th style="writing-mode:tb">Multi-process safe<sup>3</sup></th><th style="writing-mode:tb">Atomic increment<sup>4</sup></th><th style="writing-mode:tb">Atomic create<sup>5</sup></th><th style="writing-mode:tb">Native expires<sup>6</sup></th><th style="writing-mode:tb">Persistent</th><th style="writing-mode:tb">Key Traversal</th><th style="writing-mode:tb">Bulk read<sup>7</sup></th><th style="writing-mode:tb">Bulk write<sup>8</sup></th><th>Description</th></tr>
@@ -912,7 +912,8 @@ Person.adapter :memory, Moneta.new(:Redis)
912
912
  ## Testing and Benchmarks
913
913
 
914
914
  Testing is done using [GitHub Actions](https://github.com/moneta-rb/moneta/actions).
915
- Currently we support MRI Ruby >= 2.3.0 and the JRuby >= 9.2.9.0.
915
+ Currently we support MRI Ruby >= 2.4.0 (but not yet 3.x) and the JRuby >=
916
+ 9.2.9.0. MRI 2.3.0 should mostly still work, but is no longer tested in CI.
916
917
 
917
918
  ~~Benchmarks for each store are done on
918
919
  [Travis-CI](http://travis-ci.org/moneta-rb/moneta) for each build.~~ At the
@@ -0,0 +1,52 @@
1
+ module Moneta
2
+ # Adapter base class
3
+ # @api public
4
+ class Adapter
5
+ include Defaults
6
+ include Config
7
+
8
+ attr_reader :backend
9
+
10
+ class << self
11
+ # Define a block used to build this adapter's backend. The block will
12
+ # receive as keyword arguments any options passed to the adapter during
13
+ # initialization that are not config settings.
14
+ #
15
+ # If the adapter is initialized with a `:backend` option, this will be used
16
+ # instead, and the block won't be called.
17
+ #
18
+ # @param [Boolean] required
19
+ # @yield [**options] options passed to the adapter's initialize method
20
+ # @yieldreturn [Object] The backend to use
21
+ def backend(required: true, &block)
22
+ raise "backend block already set" if class_variables(false).include?(:@@backend_block)
23
+ class_variable_set(:@@backend_block, block)
24
+ class_variable_set(:@@backend_required, true) if required
25
+ end
26
+
27
+ def backend_block
28
+ class_variable_get(:@@backend_block) if class_variable_defined?(:@@backend_block)
29
+ end
30
+
31
+ def backend_required?
32
+ class_variable_defined?(:@@backend_required)
33
+ end
34
+ end
35
+
36
+ # @param [Hash] options
37
+ def initialize(options = {})
38
+ set_backend(**configure(**options))
39
+ end
40
+
41
+ private
42
+
43
+ def set_backend(backend: nil, **options)
44
+ @backend = backend ||
45
+ if backend_block = self.class.backend_block
46
+ instance_exec(**options, &backend_block)
47
+ end
48
+
49
+ raise ArgumentError, 'backend needs to be set - refer to adapter documentation' if !@backend && self.class.backend_required?
50
+ end
51
+ end
52
+ end