moneta 1.5.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +12 -0
  3. data/CONTRIBUTORS +1 -0
  4. data/LICENSE +1 -1
  5. data/lib/active_support/cache/moneta_store.rb +32 -6
  6. data/lib/moneta/adapters/activerecord/backend.rb +50 -0
  7. data/lib/moneta/adapters/activerecord/v5_backend.rb +80 -0
  8. data/lib/moneta/adapters/activerecord.rb +50 -95
  9. data/lib/moneta/adapters/activesupportcache.rb +69 -14
  10. data/lib/moneta/adapters/client.rb +1 -1
  11. data/lib/moneta/adapters/hbase.rb +1 -1
  12. data/lib/moneta/adapters/redis.rb +2 -1
  13. data/lib/moneta/adapters/sequel/mysql.rb +6 -18
  14. data/lib/moneta/adapters/sequel/postgres_hstore.rb +8 -1
  15. data/lib/moneta/adapters/sqlite.rb +4 -2
  16. data/lib/moneta/adapters/tokyotyrant.rb +1 -1
  17. data/lib/moneta/adapters/yaml.rb +7 -1
  18. data/lib/moneta/pool.rb +16 -18
  19. data/lib/moneta/server.rb +9 -11
  20. data/lib/moneta/transformer/config.rb +4 -4
  21. data/lib/moneta/transformer.rb +4 -0
  22. data/lib/moneta/version.rb +1 -1
  23. metadata +9 -452
  24. data/.github/workflows/ruby.yml +0 -425
  25. data/.gitignore +0 -15
  26. data/.rspec +0 -4
  27. data/.rubocop.yml +0 -194
  28. data/.yardopts +0 -6
  29. data/Gemfile +0 -206
  30. data/feature_matrix.yaml +0 -227
  31. data/moneta.gemspec +0 -36
  32. data/script/benchmarks +0 -605
  33. data/script/contributors +0 -12
  34. data/script/memusage +0 -40
  35. data/script/parallel-tests +0 -82
  36. data/script/start-couchdb +0 -27
  37. data/script/start-hbase +0 -47
  38. data/script/start-services +0 -10
  39. data/script/travis-logs +0 -14
  40. data/script/update-feature-matrix +0 -148
  41. data/spec/active_support/cache_moneta_store_spec.rb +0 -282
  42. data/spec/features/concurrent_create.rb +0 -42
  43. data/spec/features/concurrent_increment.rb +0 -39
  44. data/spec/features/create.rb +0 -25
  45. data/spec/features/create_expires.rb +0 -19
  46. data/spec/features/default_expires.rb +0 -14
  47. data/spec/features/each_key.rb +0 -119
  48. data/spec/features/expires.rb +0 -296
  49. data/spec/features/features.rb +0 -16
  50. data/spec/features/increment.rb +0 -98
  51. data/spec/features/marshallable_key.rb +0 -43
  52. data/spec/features/marshallable_value.rb +0 -7
  53. data/spec/features/multiprocess.rb +0 -8
  54. data/spec/features/not_create.rb +0 -7
  55. data/spec/features/not_each_key.rb +0 -7
  56. data/spec/features/not_increment.rb +0 -13
  57. data/spec/features/not_persist.rb +0 -9
  58. data/spec/features/null.rb +0 -66
  59. data/spec/features/persist.rb +0 -14
  60. data/spec/features/returndifferent.rb +0 -9
  61. data/spec/features/returnsame.rb +0 -9
  62. data/spec/features/store.rb +0 -261
  63. data/spec/features/store_large.rb +0 -13
  64. data/spec/features/transform_value.rb +0 -44
  65. data/spec/features/transform_value_expires.rb +0 -41
  66. data/spec/helper.rb +0 -445
  67. data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +0 -62
  68. data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +0 -128
  69. data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +0 -22
  70. data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +0 -28
  71. data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +0 -54
  72. data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +0 -54
  73. data/spec/moneta/adapters/activesupportcache/standard_activesupportcache_spec.rb +0 -14
  74. data/spec/moneta/adapters/cassandra/adapter_cassandra_spec.rb +0 -17
  75. data/spec/moneta/adapters/cassandra/adapter_cassandra_with_default_expires_spec.rb +0 -18
  76. data/spec/moneta/adapters/cassandra/helper.rb +0 -18
  77. data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +0 -18
  78. data/spec/moneta/adapters/client/adapter_client_spec.rb +0 -11
  79. data/spec/moneta/adapters/client/client_helper.rb +0 -25
  80. data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +0 -23
  81. data/spec/moneta/adapters/client/standard_client_unix_spec.rb +0 -28
  82. data/spec/moneta/adapters/cookie/adapter_cookie_spec.rb +0 -7
  83. data/spec/moneta/adapters/couch/adapter_couch_spec.rb +0 -204
  84. data/spec/moneta/adapters/couch/standard_couch_spec.rb +0 -15
  85. data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +0 -19
  86. data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +0 -64
  87. data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +0 -21
  88. data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +0 -26
  89. data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +0 -22
  90. data/spec/moneta/adapters/daybreak/adapter_daybreak_spec.rb +0 -7
  91. data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +0 -7
  92. data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +0 -11
  93. data/spec/moneta/adapters/dbm/adapter_dbm_spec.rb +0 -7
  94. data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +0 -7
  95. data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +0 -12
  96. data/spec/moneta/adapters/faraday_helper.rb +0 -10
  97. data/spec/moneta/adapters/file/adapter_file_spec.rb +0 -7
  98. data/spec/moneta/adapters/file/standard_file_spec.rb +0 -7
  99. data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +0 -11
  100. data/spec/moneta/adapters/fog/adapter_fog_spec.rb +0 -16
  101. data/spec/moneta/adapters/fog/standard_fog_spec.rb +0 -15
  102. data/spec/moneta/adapters/fog/standard_fog_with_expires_spec.rb +0 -20
  103. data/spec/moneta/adapters/gdbm/adapter_gdbm_spec.rb +0 -7
  104. data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +0 -7
  105. data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +0 -11
  106. data/spec/moneta/adapters/hashfile/standard_hashfile_spec.rb +0 -7
  107. data/spec/moneta/adapters/hashfile/standard_hashfile_with_expires_spec.rb +0 -12
  108. data/spec/moneta/adapters/hbase/adapter_hbase_spec.rb +0 -7
  109. data/spec/moneta/adapters/hbase/standard_hbase_spec.rb +0 -4
  110. data/spec/moneta/adapters/hbase/standard_hbase_with_expires_spec.rb +0 -8
  111. data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +0 -7
  112. data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +0 -7
  113. data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +0 -14
  114. data/spec/moneta/adapters/leveldb/adapter_leveldb_spec.rb +0 -7
  115. data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +0 -7
  116. data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +0 -11
  117. data/spec/moneta/adapters/lmdb/adapter_lmdb_spec.rb +0 -7
  118. data/spec/moneta/adapters/lmdb/adapter_lmdb_with_db_spec.rb +0 -7
  119. data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +0 -7
  120. data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +0 -11
  121. data/spec/moneta/adapters/localmemcache/adapter_localmemcache_spec.rb +0 -7
  122. data/spec/moneta/adapters/localmemcache/standard_localmemcache_spec.rb +0 -7
  123. data/spec/moneta/adapters/localmemcache/standard_localmemcache_with_expires_spec.rb +0 -11
  124. data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +0 -118
  125. data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +0 -4
  126. data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +0 -8
  127. data/spec/moneta/adapters/memcached/adapter_memcached_spec.rb +0 -13
  128. data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +0 -25
  129. data/spec/moneta/adapters/memcached/dalli/standard_memcached_dalli_spec.rb +0 -11
  130. data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +0 -25
  131. data/spec/moneta/adapters/memcached/native/standard_memcached_native_spec.rb +0 -11
  132. data/spec/moneta/adapters/memcached/standard_memcached_spec.rb +0 -17
  133. data/spec/moneta/adapters/memcached_helper.rb +0 -20
  134. data/spec/moneta/adapters/memory/adapter_memory_spec.rb +0 -7
  135. data/spec/moneta/adapters/memory/standard_memory_spec.rb +0 -4
  136. data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +0 -9
  137. data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +0 -8
  138. data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +0 -4
  139. data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +0 -9
  140. data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +0 -9
  141. data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +0 -41
  142. data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +0 -9
  143. data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +0 -41
  144. data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +0 -14
  145. data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +0 -7
  146. data/spec/moneta/adapters/null/null_adapter_spec.rb +0 -7
  147. data/spec/moneta/adapters/null/standard_null_spec.rb +0 -9
  148. data/spec/moneta/adapters/pstore/adapter_pstore_spec.rb +0 -7
  149. data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +0 -9
  150. data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +0 -13
  151. data/spec/moneta/adapters/redis/adapter_redis_spec.rb +0 -20
  152. data/spec/moneta/adapters/redis/standard_redis_spec.rb +0 -14
  153. data/spec/moneta/adapters/restclient/adapter_restclient_spec.rb +0 -13
  154. data/spec/moneta/adapters/restclient/helper.rb +0 -12
  155. data/spec/moneta/adapters/restclient/standard_restclient_spec.rb +0 -13
  156. data/spec/moneta/adapters/riak/adapter_riak_spec.rb +0 -14
  157. data/spec/moneta/adapters/riak/standard_riak_spec.rb +0 -10
  158. data/spec/moneta/adapters/riak/standard_riak_with_expires_spec.rb +0 -14
  159. data/spec/moneta/adapters/sdbm/adapter_sdbm_spec.rb +0 -7
  160. data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +0 -7
  161. data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +0 -11
  162. data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +0 -133
  163. data/spec/moneta/adapters/sequel/helper.rb +0 -83
  164. data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +0 -8
  165. data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +0 -18
  166. data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +0 -7
  167. data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +0 -7
  168. data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +0 -15
  169. data/spec/moneta/adapters/tdb/adapter_tdb_spec.rb +0 -7
  170. data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +0 -7
  171. data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +0 -11
  172. data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_bdb_spec.rb +0 -7
  173. data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_hdb_spec.rb +0 -7
  174. data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +0 -7
  175. data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +0 -11
  176. data/spec/moneta/adapters/tokyotyrant/adapter_tokyotyrant_spec.rb +0 -11
  177. data/spec/moneta/adapters/tokyotyrant/helper.rb +0 -12
  178. data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_spec.rb +0 -7
  179. data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_with_expires_spec.rb +0 -12
  180. data/spec/moneta/adapters/yaml/adapter_yaml_spec.rb +0 -7
  181. data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +0 -9
  182. data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +0 -13
  183. data/spec/moneta/builder_spec.rb +0 -50
  184. data/spec/moneta/config_spec.rb +0 -219
  185. data/spec/moneta/mutex_spec.rb +0 -55
  186. data/spec/moneta/proxies/cache/cache_file_memory_spec.rb +0 -24
  187. data/spec/moneta/proxies/cache/cache_memory_null_spec.rb +0 -12
  188. data/spec/moneta/proxies/enumerable/enumerable_spec.rb +0 -26
  189. data/spec/moneta/proxies/expires/expires_file_spec.rb +0 -28
  190. data/spec/moneta/proxies/expires/expires_memory_spec.rb +0 -15
  191. data/spec/moneta/proxies/expires/expires_memory_with_default_expires_spec.rb +0 -16
  192. data/spec/moneta/proxies/fallback/fallback_spec.rb +0 -42
  193. data/spec/moneta/proxies/lock/lock_spec.rb +0 -10
  194. data/spec/moneta/proxies/optionmerger/optionmerger_spec.rb +0 -96
  195. data/spec/moneta/proxies/pool/pool_spec.rb +0 -353
  196. data/spec/moneta/proxies/proxy/proxy_expires_memory_spec.rb +0 -16
  197. data/spec/moneta/proxies/shared/shared_tcp_spec.rb +0 -59
  198. data/spec/moneta/proxies/shared/shared_unix_spec.rb +0 -58
  199. data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +0 -19
  200. data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +0 -19
  201. data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +0 -25
  202. data/spec/moneta/proxies/transformer/transformer_bzip2_spec.rb +0 -19
  203. data/spec/moneta/proxies/transformer/transformer_json_spec.rb +0 -19
  204. data/spec/moneta/proxies/transformer/transformer_key_inspect_spec.rb +0 -17
  205. data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +0 -17
  206. data/spec/moneta/proxies/transformer/transformer_key_to_s_spec.rb +0 -17
  207. data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +0 -17
  208. data/spec/moneta/proxies/transformer/transformer_lz4_spec.rb +0 -19
  209. data/spec/moneta/proxies/transformer/transformer_lzma_spec.rb +0 -19
  210. data/spec/moneta/proxies/transformer/transformer_lzo_spec.rb +0 -19
  211. data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +0 -20
  212. data/spec/moneta/proxies/transformer/transformer_marshal_city128_spec.rb +0 -15
  213. data/spec/moneta/proxies/transformer/transformer_marshal_city32_spec.rb +0 -15
  214. data/spec/moneta/proxies/transformer/transformer_marshal_city64_spec.rb +0 -15
  215. data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +0 -21
  216. data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +0 -20
  217. data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +0 -19
  218. data/spec/moneta/proxies/transformer/transformer_marshal_md5_spec.rb +0 -15
  219. data/spec/moneta/proxies/transformer/transformer_marshal_md5_spread_spec.rb +0 -15
  220. data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +0 -33
  221. data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +0 -15
  222. data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +0 -20
  223. data/spec/moneta/proxies/transformer/transformer_marshal_rmd160_spec.rb +0 -15
  224. data/spec/moneta/proxies/transformer/transformer_marshal_sha1_spec.rb +0 -15
  225. data/spec/moneta/proxies/transformer/transformer_marshal_sha256_spec.rb +0 -15
  226. data/spec/moneta/proxies/transformer/transformer_marshal_sha384_spec.rb +0 -15
  227. data/spec/moneta/proxies/transformer/transformer_marshal_sha512_spec.rb +0 -15
  228. data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +0 -19
  229. data/spec/moneta/proxies/transformer/transformer_marshal_truncate_spec.rb +0 -15
  230. data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +0 -20
  231. data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +0 -19
  232. data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +0 -19
  233. data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +0 -19
  234. data/spec/moneta/proxies/transformer/transformer_php_spec.rb +0 -19
  235. data/spec/moneta/proxies/transformer/transformer_quicklz_spec.rb +0 -19
  236. data/spec/moneta/proxies/transformer/transformer_snappy_spec.rb +0 -19
  237. data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +0 -19
  238. data/spec/moneta/proxies/transformer/transformer_value_marshal_spec.rb +0 -19
  239. data/spec/moneta/proxies/transformer/transformer_value_yaml_spec.rb +0 -19
  240. data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +0 -19
  241. data/spec/moneta/proxies/transformer/transformer_zlib_spec.rb +0 -19
  242. data/spec/moneta/proxies/weak_create/weak_create_spec.rb +0 -21
  243. data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -22
  244. data/spec/moneta/proxies/weak_increment/weak_increment_spec.rb +0 -21
  245. data/spec/moneta/semaphore_spec.rb +0 -68
  246. data/spec/moneta/stack_file_memory_spec.rb +0 -15
  247. data/spec/moneta/stack_memory_file_spec.rb +0 -13
  248. data/spec/rack/cache_moneta_spec.rb +0 -355
  249. data/spec/rack/moneta_cookies_spec.rb +0 -83
  250. data/spec/rack/moneta_store_spec.rb +0 -83
  251. data/spec/rack/session_moneta_spec.rb +0 -350
  252. data/spec/restserver.rb +0 -44
  253. data/test/action_dispatch/fixtures/session_autoload_test/foo.rb +0 -10
  254. data/test/action_dispatch/session_moneta_store_test.rb +0 -204
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ENV['PARALLEL_TESTS'] = 'yes'
4
-
5
- require 'multi_json'
6
-
7
- def tag_args tags
8
- tags.flat_map{ |tag| ['--tag', tag] }
9
- end
10
-
11
- def example_ids tags, specs
12
- json = `bundle exec rspec -f j --dry-run #{tag_args(tags).join(' ')} -- #{specs.join(' ')}`
13
- data = MultiJson.load(json)
14
- data['examples'].map{ |example| example['id'] }
15
- end
16
-
17
- def run(*args)
18
- pid = spawn(*args)
19
- Signal.trap("INT") { Process.kill("INT", pid) }
20
- Process.wait(pid)
21
- $? == 0
22
- ensure
23
- Signal.trap("INT", "DEFAULT")
24
- end
25
-
26
- tags = ARGV.take_while { |arg| arg[0] != '-' }
27
- ARGV.shift(tags.length)
28
- opts = []
29
- files = nil
30
- while arg = ARGV.shift
31
- case arg
32
- when '--'
33
- files = ARGV
34
- break
35
- when '--remainder'
36
- files = Dir['spec/**/*_spec.rb', 'test/**/*_test.rb']
37
- existing = File.open('.travis.yml').each_line.flat_map do |line|
38
- next unless matches = line.match(%r{((?:test|spec)/(?:[\w\.]+/?)*)})
39
- path = matches[1]
40
- path[-3..-1] == '.rb' ? path : path + '/**/*.rb'
41
- end.compact
42
- files -= Dir[*existing]
43
- else
44
- opts << arg
45
- end
46
- end
47
-
48
- files ||= Dir['spec', 'test/**/*_test.rb']
49
- specs, tests = files.partition { |file| file.match /^spec/ }
50
-
51
- puts "The following specs will be executed:\n\t#{specs.join "\n\t"}\n\n" unless specs.empty?
52
- puts "The following tests will be executed:\n\t#{tests.join "\n\t"}\n\n" unless tests.empty?
53
-
54
- results = []
55
- unless specs.empty?
56
- # run all non :isolate examples in parallel
57
- results << run(*%w{bundle exec parallel_rspec --},
58
- *opts,
59
- *tag_args(tags | %w{~isolate}),
60
- '--',
61
- *specs)
62
-
63
- # find the example IDs of the isolate examples to be run in serial
64
- ids = example_ids(tags, specs) - example_ids(tags | %w{~isolate}, specs)
65
- unless ids.empty?
66
- results << run(*%w{bundle exec rspec},
67
- *opts,
68
- '--',
69
- *ids)
70
- end
71
- end
72
-
73
- tests.each do |test|
74
- results << run(*%w{bundle exec ruby}, test)
75
- end
76
-
77
- if results.any?{ |result| !result }
78
- puts "\e[31m########## MONETA TESTSUITE FAILED ##########\e[0m"
79
- exit 1
80
- end
81
-
82
- puts "\e[32m########## MONETA TESTSUITE SUCCEDED ##########\e[0m"
data/script/start-couchdb DELETED
@@ -1,27 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # Copied from https://github.com/apache/couchdb-pkg/blob/master/debian/README.Debian
5
- COUCHDB_PASSWORD=password
6
- echo "couchdb couchdb/mode select standalone
7
- couchdb couchdb/mode seen true
8
- couchdb couchdb/bindaddress string 127.0.0.1
9
- couchdb couchdb/bindaddress seen true
10
- couchdb couchdb/adminpass password ${COUCHDB_PASSWORD}
11
- couchdb couchdb/adminpass seen true
12
- couchdb couchdb/adminpass_again password ${COUCHDB_PASSWORD}
13
- couchdb couchdb/adminpass_again seen true" | sudo debconf-set-selections
14
- DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --force-yes couchdb
15
-
16
- # Reconfigure CouchDB to use delayed commits for speed: http://guide.couchdb.org/draft/performance.html
17
- sudo sed -i '/\[couchdb\]/a delayed_commits = true' /etc/couchdb/local.ini
18
-
19
- # (Re)start couchdb
20
- sudo systemctl restart couchdb
21
-
22
- # Display some info about CouchDB
23
- sudo systemctl status couchdb
24
- until curl http://localhost:5984/; do
25
- sleep 1
26
- done
27
-
data/script/start-hbase DELETED
@@ -1,47 +0,0 @@
1
- #!/bin/sh
2
- set -e
3
-
4
- cd $(dirname $(dirname $0))
5
-
6
- mkdir -p hbase
7
- mkdir -p zookeeper
8
- mkdir -p downloads
9
- root=$(pwd)
10
-
11
- version=$(curl -sS https://downloads.apache.org/hbase/stable/RELEASENOTES.md | grep -oP '(?<=# HBASE\s\s)(\d+\.?)+' | head -n1)
12
-
13
- echo HBase stable version is $version
14
-
15
- if [ ! -f downloads/hbase-$version-bin.tar.gz ]; then
16
- echo Downloading HBase ...
17
- wget -P downloads https://downloads.apache.org/hbase/stable/hbase-$version-bin.tar.gz
18
- fi
19
-
20
- echo Extracting HBase ...
21
- cd hbase
22
- tar -zxf $root/downloads/hbase-$version-bin.tar.gz
23
-
24
- echo Configuring HBase ...
25
- echo "export JAVA_HOME=/usr" >> hbase-$version/conf/hbase-env.sh
26
- tee <<-EOF > hbase-$version/conf/hbase-site.xml
27
- <configuration>
28
- <property>
29
- <name>hbase.rootdir</name>
30
- <value>file://$root/hbase</value>
31
- </property>
32
- <property>
33
- <name>hbase.zookeeper.property.dataDir</name>
34
- <value>$root/zookeeper</value>
35
- </property>
36
- <property>
37
- <name>hbase.unsafe.stream.capability.enforce</name>
38
- <value>false</value>
39
- </property>
40
- </configuration>
41
- EOF
42
-
43
- echo Launching HBase ...
44
- ./hbase-$version/bin/start-hbase.sh
45
- ./hbase-$version/bin/hbase-daemon.sh start thrift
46
-
47
- cd $root
@@ -1,10 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Install and start CouchDB
4
- $(dirname $0)/start-couchdb
5
-
6
- # Install and start HBase
7
- $(dirname $0)/start-hbase
8
-
9
- # Waiting for servers to start
10
- sleep 3
data/script/travis-logs DELETED
@@ -1,14 +0,0 @@
1
- #! /usr/bin/env ruby
2
- require 'travis'
3
- require 'cgi'
4
- require 'fileutils'
5
- FileUtils.mkpath('logs')
6
- `git remote -v | grep origin | head -n1` =~ /github\.com:(.*?)\.git/
7
- repo = Travis::Repository.find($1)
8
- build = repo.recent_builds.select {|b| b.finished_at }.first
9
- build.jobs.each do |j|
10
- c = j.config
11
- id = "logs/#{j.allow_failures? ? 'allowed-' : ''}#{j.state}-#{c['rvm']}-#{CGI.escape c['env']}"
12
- puts "Downloading #{j.id}"
13
- File.open(id, 'w') {|f| f.write(j.log.body) }
14
- end
@@ -1,148 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # coding: utf-8
3
-
4
- require 'rubygems'
5
- require 'bundler/setup'
6
- Bundler.require(:doc)
7
-
8
- require 'yaml'
9
-
10
- output = "<table>\n"
11
- output << <<-TAB.lines.map(&:strip).join
12
- <tr>
13
- <th>Adapter</th><th>Required gems</th>
14
- <th style="writing-mode:tb">MRI support<sup>1</sup></th>
15
- <th style="writing-mode:tb">JRuby support<sup>1</sup></th>
16
- <th style="writing-mode:tb">Multi-thread safe<sup>2</sup></th>
17
- <th style="writing-mode:tb">Multi-process safe<sup>3</sup></th>
18
- <th style="writing-mode:tb">Atomic increment<sup>4</sup></th>
19
- <th style="writing-mode:tb">Atomic create<sup>5</sup></th>
20
- <th style="writing-mode:tb">Native expires<sup>6</sup></th>
21
- <th style="writing-mode:tb">Persistent</th>
22
- <th style="writing-mode:tb">Key Traversal</th>
23
- <th style="writing-mode:tb">Bulk read<sup>7</sup></th>
24
- <th style="writing-mode:tb">Bulk write<sup>8</sup></th>
25
- <th>Description</th>
26
- </tr>
27
- TAB
28
- output << "\n\n"
29
-
30
- footnotes = {
31
- "platform" => <<-EOF,
32
- Indicates that the adapter is expected to work on this platform. Most adapters will at least
33
- work on MRI, but some are curently considered unstable, in which case they are not supported
34
- on any platform.
35
- EOF
36
- "multi-thread safe" => <<-EOF,
37
- Make adapters thread-safe by using `Moneta::Lock` or by passing the option `threadsafe: true` to
38
- `Moneta#new`. There is also `Moneta::Pool` which can be used to share a store between multiple
39
- threads if the store is multi-process safe. I recommend to add the option `:threadsafe` to
40
- ensure thread-safety since for example under JRuby and Rubinius even the basic datastructures
41
- are not thread safe due to the lack of a global interpreter lock (GIL). This differs from MRI
42
- where some adapters might appear thread safe already but only due to the GIL.
43
- EOF
44
- "multi-process safe" => <<-EOF,
45
- Share a Moneta store between multiple processes using `Moneta::Shared` (See below).
46
- EOF
47
- "atomic increment" => <<-EOF,
48
- If a store provides atomic increment it can be used with `Moneta::Semaphore`. You can add weak
49
- `#increment` support using the `Moneta::WeakIncrement` proxy.
50
- EOF
51
- "atomic create" => <<-EOF,
52
- If a store provides atomic creation it can be used with `Moneta::Mutex`. You can add weak
53
- `#create` support using the `Moneta::WeakCreate` proxy.
54
- EOF
55
- "native expires" => <<-EOF,
56
- Add expiration support by using `Moneta::Expires` or by passing the option `expires: true` to
57
- `Moneta#new`.
58
- EOF
59
- "bulk read" => <<-EOF,
60
- This indicates that there is some performance gain when fetching
61
- multiple values at once using `#values_at`/`#fetch_values` or `#slice`.
62
- For instance, the `MGET` instruction in Redis, or the ability to retrieve
63
- several rows in one query in SQL.
64
- EOF
65
- "bulk write" => <<-EOF
66
- This indicates that there is some performance gain when storing multiple
67
- key/value pairs at once using `#merge!`/`#update`.
68
- EOF
69
- }
70
-
71
- YAML.parse_stream(File.read(File.join(File.dirname(File.dirname(__FILE__)), 'feature_matrix.yaml'))) do |document|
72
- feature_group = document.to_ruby
73
-
74
- output << %{<tr><th colspan="2">#{feature_group['group']}</th><th colspan="12"></th></tr>\n\n}
75
-
76
- feature_group['notes'].each do |k,v|
77
- footnotes[k] = v
78
- end
79
-
80
- feature_group['backends'].each do |backend|
81
- output << '<tr>'
82
- output << "<td>#{backend['adapter']}</td>"
83
- output << "<td>#{backend['gems'] || '-'}</td>"
84
-
85
- features = backend['features'] | (feature_group['features'] || [])
86
- features += backend['platforms'] || []
87
- %w{MRI JRuby threadsafe multiprocess increment create expires persist each_key bulk_read bulk_write}.each do |feature|
88
- supported = if features.include? feature
89
- "yes"
90
- elsif backend['unknown'] && backend['unknown'].include?(feature)
91
- "unknown"
92
- else
93
- "no"
94
- end
95
-
96
- note = if backend['notes'] && backend['notes'][feature]
97
- "<sup>#{footnotes.keys.index(backend['notes'][feature]) + 1}</sup>"
98
- else
99
- ''
100
- end
101
-
102
- mark = case supported
103
- when "yes"
104
- "✓"
105
- when "no"
106
- "✗"
107
- when "unknown"
108
- '?'
109
- end
110
-
111
- colour = case supported
112
- when "yes"
113
- '#5F5'
114
- when "no"
115
- '#F44'
116
- when "unknown"
117
- '#55F'
118
- end
119
-
120
- output << %{<td style="text-align:center;background:#{colour}">#{mark}#{note}</td>}
121
- end
122
-
123
- html_description = if backend['description']
124
- Kramdown::Document.new(backend['description']).to_html.match('<p>(.*)</p>')[1]
125
- else
126
- ''
127
- end
128
- output << "<td>#{html_description}</td>"
129
-
130
- output << '</tr>'
131
- output << "\n\n"
132
- end
133
-
134
-
135
- end
136
-
137
- output << "</table>\n\n"
138
-
139
- footnotes.each_value.each_with_index do |note, idx|
140
- output << "#{idx+1}. #{note.lines.map(&:strip).join(" ")}\n"
141
- end
142
-
143
- readme = File.open('README.md', 'r+')
144
- new_readme = readme.read.sub(/(name="backend-matrix".*?\n).*?(------)/m, "\\1\n#{output}\n\\2")
145
- readme.rewind
146
- readme << new_readme
147
- readme.truncate(readme.tell)
148
-
@@ -1,282 +0,0 @@
1
- require 'moneta'
2
- require 'active_support'
3
- require 'active_support/cache/moneta_store'
4
- require 'ostruct'
5
- require_relative '../moneta/adapters/memcached_helper.rb'
6
-
7
- describe "cache_moneta_store" do
8
- before(:all) do
9
- @events = []
10
- ActiveSupport::Notifications.subscribe(/^cache_(.*)\.active_support$/) do |*args|
11
- @events << ActiveSupport::Notifications::Event.new(*args)
12
- end
13
- end
14
-
15
- before(:each) do
16
- @events.clear
17
- end
18
-
19
- # All stores should implement this basic behavior.
20
- shared_examples :basic_store do
21
- let(:rabbit) { OpenStruct.new name: 'bunny' }
22
- let(:white_rabbit) { OpenStruct.new color: 'white' }
23
-
24
- before(:each) do
25
- store.clear
26
- store.write 'rabbit', rabbit
27
- @events.clear
28
- end
29
-
30
- it 'reads the data' do
31
- expect(store.read('rabbit')).to eq rabbit
32
- end
33
-
34
- it 'writes the data' do
35
- store.write 'rabbit', white_rabbit
36
- expect(store.read('rabbit')).to eq white_rabbit
37
- end
38
-
39
- it 'deletes data' do
40
- store.delete 'rabbit'
41
- expect(store.read('rabbit')).to be_nil
42
- end
43
-
44
- it 'verifies existence of an object in the store' do
45
- expect(store.exist?('rabbit')).to be true
46
- expect(!!store.exist?('rab-a-dub')).to be false
47
- end
48
-
49
- it 'fetches data' do
50
- expect(store.fetch('rabbit')).to eq rabbit
51
- expect(store.fetch('rub-a-dub')).to be_nil
52
- store.fetch('rub-a-dub') { 'Flora de Cana' }
53
- expect(store.fetch('rub-a-dub')).to eq 'Flora de Cana'
54
- end
55
-
56
- it 'reads multiple keys' do
57
- store.write 'irish whisky', 'Jameson'
58
- result = store.read_multi 'rabbit', 'irish whisky'
59
- expect(result['rabbit']).to eq rabbit
60
- expect(result['irish whisky']).to eq 'Jameson'
61
- end
62
-
63
- it 'reads multiple keys and returns only the matched ones' do
64
- store.delete 'irish whisky'
65
- result = store.read_multi 'rabbit', 'irish whisky'
66
- expect(result).not_to include('irish whisky')
67
- expect(result).to include('rabbit')
68
- end
69
-
70
- it 'fetches multiple keys and fills in the missing ones' do
71
- store.delete 'irish whisky'
72
- result = store.fetch_multi('rabbit', 'irish whisky') do |k|
73
- k + ' was missing'
74
- end
75
- expect(result['rabbit']).to eq rabbit
76
- expect(result['irish whisky']).to eq 'irish whisky was missing'
77
- expect(store.fetch('irish whisky')).to eq 'irish whisky was missing'
78
- end
79
- end
80
-
81
- shared_examples :expiry do
82
- it 'writes the data with expiration time' do
83
- store.write 'rabbit', white_rabbit, expires_in: 0.2.second
84
- expect(store.read('rabbit')).to eq white_rabbit
85
- sleep 0.3
86
- expect(store.read('rabbit')).to be_nil
87
- end
88
-
89
- it 'writes multiple values with expiration time' do
90
- store.write_multi({
91
- 'rabbit' => white_rabbit,
92
- 'irish whisky' => 'Jameson'
93
- }, expires_in: 0.2.second)
94
-
95
- expect(store.read_multi('rabbit', 'irish whisky')).to eq \
96
- 'rabbit' => white_rabbit,
97
- 'irish whisky' => 'Jameson'
98
-
99
- sleep 0.3
100
- expect(store.read_multi('rabbit', 'irish whisky')).to be_empty
101
- end
102
-
103
- it "sets expiry on cache miss" do
104
- store.fetch('rabbit', force: true, expires_in: 0.2.second) { white_rabbit }
105
- expect(store.fetch('rabbit')).to eq white_rabbit
106
- sleep 0.3
107
- expect(store.fetch('rabbit')).to be_nil
108
- end
109
-
110
- it 'does not set expiry on cache hit' do
111
- expect(store.fetch('rabbit', expires_in: 0.2.second) { white_rabbit }).to eq rabbit
112
- sleep 0.3
113
- expect(store.fetch('rabbit')).to eq rabbit
114
- end
115
- end
116
-
117
- # A store *may* implement this
118
- shared_examples :increment_decrement do
119
- it 'increments a key' do
120
- store.write 'counter', 0, raw: true
121
- (1..3).each do |i|
122
- expect(store.increment('counter')).to eq i
123
- end
124
- expect(store.read('counter', raw: true).to_i).to eq 3
125
- end
126
-
127
- it 'decrements a key' do
128
- store.write 'counter', 0, raw: true
129
- 3.times { store.increment 'counter' }
130
- 2.times { store.decrement 'counter' }
131
- expect(store.read('counter', raw: true).to_i).to eq 1
132
- end
133
-
134
- it 'increments a key by given value' do
135
- store.write 'counter', 0, raw: true
136
- store.increment 'counter', 3
137
- expect(store.read('counter', raw: true).to_i).to eq 3
138
- end
139
-
140
- it 'decrements a key by given value' do
141
- store.write 'counter', 0, raw: true
142
- 3.times { store.increment 'counter' }
143
- store.decrement 'counter', 2
144
- expect(store.read('counter', raw: true).to_i).to eq 1
145
- end
146
- end
147
-
148
- shared_examples :basic_instrumentation do
149
- it 'notifies on #fetch' do
150
- store.fetch('radiohead') { 'House Of Cards' }
151
-
152
- read = @events.shift
153
- expect(read.name).to eq 'cache_read.active_support'
154
- expect(read.payload).to include(key: 'radiohead', super_operation: :fetch, hit: false)
155
-
156
- generate = @events.shift
157
- expect(generate.name).to eq 'cache_generate.active_support'
158
- expect(generate.payload).to include(key: 'radiohead')
159
-
160
- write = @events.shift
161
- expect(write.name).to eq 'cache_write.active_support'
162
- expect(write.payload).to include(key: 'radiohead')
163
- end
164
-
165
- it 'notifies on #read' do
166
- store.read 'metallica'
167
-
168
- read = @events.shift
169
- expect(read.name).to eq 'cache_read.active_support'
170
- expect(read.payload).to include(key: 'metallica', hit: false)
171
- end
172
-
173
- it 'notifies on #write' do
174
- store.write 'depeche mode', 'Enjoy The Silence'
175
-
176
- write = @events.shift
177
- expect(write.name).to eq 'cache_write.active_support'
178
- expect(write.payload).to include(key: 'depeche mode')
179
- end
180
-
181
- it 'notifies on #delete' do
182
- store.delete 'the new cardigans'
183
-
184
- delete = @events.shift
185
- expect(delete.name).to eq 'cache_delete.active_support'
186
- expect(delete.payload).to include(key: 'the new cardigans')
187
- end
188
-
189
- it 'notifies on #exist?' do
190
- store.exist? 'the smiths'
191
-
192
- exist = @events.shift
193
- expect(exist.name).to eq 'cache_exist?.active_support'
194
- expect(exist.payload).to include(key: 'the smiths')
195
- end
196
- end
197
-
198
- # This doesn't seem to be documented at all, so we follow the
199
- # behavior of MemCacheStore.
200
- shared_examples :increment_decrement_instrumentation do
201
- it 'notifies on #increment' do
202
- store.increment 'pearl jam'
203
-
204
- increment = @events.shift
205
- expect(increment.name).to eq 'cache_increment.active_support'
206
- expect(increment.payload).to eq(key: 'pearl jam', amount: 1)
207
- end
208
-
209
- it 'notifies on #decrement' do
210
- store.decrement 'placebo'
211
- decrement = @events.shift
212
- expect(decrement.name).to eq 'cache_decrement.active_support'
213
- expect(decrement.payload).to eq(key: 'placebo', amount: 1)
214
- end
215
- end
216
-
217
- describe ActiveSupport::Cache::MonetaStore do
218
- shared_examples :moneta_store do
219
- include_examples :basic_store
220
- include_examples :expiry
221
- include_examples :increment_decrement
222
- include_examples :basic_instrumentation
223
- include_examples :increment_decrement_instrumentation
224
-
225
- # FIXME: no other store does this -- perhaps this should be
226
- # removed.
227
- it 'notifies on #clear' do
228
- store.clear
229
-
230
- clear = @events.shift
231
- expect(clear.name).to eq 'cache_clear.active_support'
232
- expect(clear.payload).to eq(key: nil)
233
- end
234
- end
235
-
236
- context "with :Memory store" do
237
- let(:store) { described_class.new(store: :Memory) }
238
- include_examples :moneta_store
239
- end
240
-
241
- context "with existing :Memory store" do
242
- let(:store) { described_class.new(store: ::Moneta.new(:Memory)) }
243
- include_examples :moneta_store
244
- end
245
-
246
- context "with Redis store", adapter: :Redis do
247
- let(:store) { described_class.new(store: :Redis) }
248
- include_examples :moneta_store
249
- end
250
- end
251
-
252
- describe ActiveSupport::Cache::MemoryStore do
253
- let(:store) { described_class.new }
254
-
255
- include_examples :basic_store
256
- include_examples :expiry
257
- include_examples :increment_decrement
258
- include_examples :basic_instrumentation
259
- end
260
-
261
- describe ActiveSupport::Cache::MemCacheStore, memcached: true do
262
- let(:store) { described_class.new('127.0.0.1:11213') }
263
-
264
- include_context :start_memcached, 11213
265
-
266
- include_examples :basic_store
267
- include_examples :expiry
268
- include_examples :increment_decrement
269
- include_examples :basic_instrumentation
270
- include_examples :increment_decrement_instrumentation
271
- end
272
-
273
- describe ActiveSupport::Cache::RedisCacheStore, redis: true do
274
- let(:store) { described_class.new(url: "redis:///3") }
275
-
276
- include_examples :basic_store
277
- include_examples :expiry
278
- include_examples :increment_decrement
279
- include_examples :basic_instrumentation
280
- include_examples :increment_decrement_instrumentation
281
- end
282
- end
@@ -1,42 +0,0 @@
1
- shared_examples :concurrent_create do
2
- # Each thread attempts to create
3
- def create_thread(name)
4
- Thread.new do
5
- s = new_store
6
- begin
7
- (0...1000).map do |i|
8
- s.create(i.to_s, name, expires: false).tap do
9
- Thread.pass if rand(100) >= 99
10
- end
11
- end
12
- ensure
13
- s.close
14
- end
15
- end
16
- end
17
-
18
- it 'have atomic create across multiple threads', isolate: true do
19
- names = %w{a b c}
20
-
21
- # Spawn threads and then group results (lists of true/false values) by
22
- # store index (0...1000)
23
- results = names
24
- .map { |name| create_thread(name) }
25
- .map(&:value)
26
- .transpose.each_with_index
27
- .map { |created_values, i| [i.to_s, created_values] }
28
- .to_h
29
-
30
- # Just a quick sanity check
31
- expect(results.length).to eq 1000
32
-
33
- # Ensure that for each index, one and only one created value is true
34
- expect(results.map { |_, created_values| created_values.inject(:^) }).to all(be true)
35
-
36
- # Check that the when a call to create returned true, that the store
37
- # contains the correct value as a result
38
- expect(store.slice(*results.keys).to_h).to eq(results.map do |i, values|
39
- [i, names[values.index(true)]]
40
- end.to_h)
41
- end
42
- end
@@ -1,39 +0,0 @@
1
- shared_examples :concurrent_increment do
2
- def increment_thread(name)
3
- Thread.new do
4
- s = new_store
5
- begin
6
- # Create an array where each entry is a list of all the return values
7
- # from calling increment for a particular key.
8
- increments = (0...100).map { [] }
9
- 100.times do
10
- 100.times do |j|
11
- increments[j] << s.increment(j.to_s, 1, expires: false)
12
- Thread.pass if rand(1000) >= 995
13
- end
14
- end
15
- increments
16
- ensure
17
- s.close
18
- end
19
- end
20
- end
21
-
22
- it 'have atomic increment across multiple threads', isolate: true do
23
- results = %w{a b c}
24
- .map { |name| increment_thread(name) }
25
- .map(&:value)
26
- .transpose # Now the array is indexed by store key instead of thread
27
-
28
- # Sanity check
29
- expect(results.length).to eq 100
30
-
31
- results.each do |ith_values|
32
- # ensure that for each pair in the triple there are no overlapping values
33
- expect(ith_values.combination(2).map { |a, b| a & b }).to all be_empty
34
-
35
- # ensure that when joined together they cover the full 1..300 range
36
- expect(ith_values.inject(:+)).to contain_exactly(*1..300)
37
- end
38
- end
39
- end