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,83 +0,0 @@
1
- require 'helper'
2
- require 'rack/mock'
3
- require 'rack/moneta_store'
4
-
5
- describe Rack::MonetaStore do
6
- def config(store_arg = nil, options = nil, &block)
7
- @store_arg = store_arg
8
- @options = options
9
- @block = block
10
- end
11
-
12
- def app(&block)
13
- @app_block ||= block
14
- end
15
-
16
- def middleware
17
- @middleware ||= Rack::MonetaStore.new(lambda do |env|
18
- @store = env['rack.moneta_store']
19
- app.call(env) if app
20
- [200,{},[]]
21
- end, @store_arg, @options || {}, &@block)
22
- end
23
-
24
- def backend
25
- @backend ||= Rack::MockRequest.new(middleware)
26
- end
27
-
28
- def get(&block)
29
- app(&block)
30
- @response = backend.get('/')
31
- end
32
-
33
- def uncached_store
34
- middleware.instance_variable_get(:@store)
35
- end
36
-
37
- it 'should be able to get a key without caching' do
38
- config :Memory
39
- uncached_store['key'] = 'value'
40
- get do
41
- expect(@store['key']).to eql('value')
42
- end
43
- end
44
-
45
- it 'should be able to get a key with caching' do
46
- config :Memory, :cache => true
47
- uncached_store['key'] = 'value'
48
- get do
49
- expect(@store['key']).to eql('value')
50
- expect(@store.adapter).to equal(uncached_store)
51
- expect(@store.cache['key']).to eql('value')
52
- end
53
- end
54
-
55
- it 'should be able to set a key' do
56
- config :Memory
57
- get do
58
- @store['key'] = 'value'
59
- end
60
- expect( @store['key'] ).to eql('value')
61
- expect(uncached_store['key']).to eql('value')
62
- end
63
-
64
- it 'should be able to get a remove a key' do
65
- config :Memory
66
- uncached_store['key'] = 'value'
67
- get do
68
- expect(@store.delete('key')).to eql('value')
69
- end
70
- expect(uncached_store.key?('key')).to be false
71
- end
72
-
73
- it 'should accept a config block' do
74
- config do
75
- use :Transformer, :key => :prefix, :prefix => 'moneta.'
76
- adapter :Memory
77
- end
78
- uncached_store['key'] = 'value'
79
- get do
80
- expect(@store['key']).to eql('value')
81
- end
82
- end
83
- end
@@ -1,350 +0,0 @@
1
- require 'rack/session/moneta'
2
- require 'rack/lint'
3
- require 'rack/mock'
4
- require 'thread'
5
-
6
- describe Rack::Session::Moneta do
7
- use_timecop
8
-
9
- let(:session_key) { Rack::Session::Moneta::DEFAULT_OPTIONS[:key] }
10
- let(:session_match) { /#{session_key}=([0-9a-fA-F]+);/ }
11
-
12
- let :incrementor_proc do
13
- lambda do |env|
14
- env["rack.session"]["counter"] ||= 0
15
- env["rack.session"]["counter"] += 1
16
- Rack::Response.new(env["rack.session"].inspect).to_a
17
- end
18
- end
19
-
20
- let :drop_session do
21
- Rack::Lint.new(proc do |env|
22
- env['rack.session.options'][:drop] = true
23
- incrementor_proc.call(env)
24
- end)
25
- end
26
-
27
- let :renew_session do
28
- Rack::Lint.new(proc do |env|
29
- env['rack.session.options'][:renew] = true
30
- incrementor_proc.call(env)
31
- end)
32
- end
33
-
34
- let :defer_session do
35
- Rack::Lint.new(proc do |env|
36
- env['rack.session.options'][:defer] = true
37
- incrementor_proc.call(env)
38
- end)
39
- end
40
-
41
- let :skip_session do
42
- Rack::Lint.new(proc do |env|
43
- env['rack.session.options'][:skip] = true
44
- incrementor_proc.call(env)
45
- end)
46
- end
47
-
48
- let :incrementor do
49
- Rack::Lint.new(incrementor_proc)
50
- end
51
-
52
- it 'supports different constructors' do
53
- Rack::Session::Moneta.new(incrementor, :store => :Memory)
54
- Rack::Session::Moneta.new(incrementor, :store => Moneta.new(:Memory, :expires => true))
55
- Rack::Session::Moneta.new(incrementor) do
56
- use :Expires
57
- adapter :Memory
58
- end
59
- end
60
-
61
- it "creates a new cookie" do
62
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
63
- res = Rack::MockRequest.new(pool).get("/")
64
- res["Set-Cookie"].should include("#{session_key}=")
65
- res.body.should == '{"counter"=>1}'
66
- end
67
-
68
- it "determines session from a cookie" do
69
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
70
- req = Rack::MockRequest.new(pool)
71
- res = req.get("/")
72
- cookie = res["Set-Cookie"]
73
- req.get("/", "HTTP_COOKIE" => cookie).
74
- body.should == '{"counter"=>2}'
75
- req.get("/", "HTTP_COOKIE" => cookie).
76
- body.should == '{"counter"=>3}'
77
- end
78
-
79
- it "determines session only from a cookie by default" do
80
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
81
- req = Rack::MockRequest.new(pool)
82
- res = req.get("/")
83
- sid = res["Set-Cookie"][session_match, 1]
84
- req.get("/?rack.session=#{sid}").
85
- body.should == '{"counter"=>1}'
86
- req.get("/?rack.session=#{sid}").
87
- body.should == '{"counter"=>1}'
88
- end
89
-
90
- it "determines session from params" do
91
- pool = Rack::Session::Moneta.new(incrementor, :cookie_only => false, :store => :Memory)
92
- req = Rack::MockRequest.new(pool)
93
- res = req.get("/")
94
- sid = res["Set-Cookie"][session_match, 1]
95
- req.get("/?rack.session=#{sid}").
96
- body.should == '{"counter"=>2}'
97
- req.get("/?rack.session=#{sid}").
98
- body.should == '{"counter"=>3}'
99
- end
100
-
101
- it "survives nonexistant cookies" do
102
- bad_cookie = "rack.session=blarghfasel"
103
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
104
- res = Rack::MockRequest.new(pool).
105
- get("/", "HTTP_COOKIE" => bad_cookie)
106
- res.body.should == '{"counter"=>1}'
107
- cookie = res["Set-Cookie"][session_match]
108
- cookie.should_not match(/#{bad_cookie}/)
109
- end
110
-
111
- it "maintains freshness" do
112
- pool = Rack::Session::Moneta.new(incrementor, :expire_after => 3, :store => :Memory)
113
- res = Rack::MockRequest.new(pool).get('/')
114
- res.body.should include '"counter"=>1'
115
- cookie = res["Set-Cookie"]
116
- res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
117
- res["Set-Cookie"].should == cookie
118
- res.body.should include '"counter"=>2'
119
- advance 4
120
- res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
121
- res["Set-Cookie"].should_not == cookie
122
- res.body.should include '"counter"=>1'
123
- end
124
-
125
- it "does not send the same session id if it did not change" do
126
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
127
- req = Rack::MockRequest.new(pool)
128
-
129
- res0 = req.get("/")
130
- cookie = res0["Set-Cookie"][session_match]
131
- res0.body.should == '{"counter"=>1}'
132
-
133
- res1 = req.get("/", "HTTP_COOKIE" => cookie)
134
- res1["Set-Cookie"].should be_nil
135
- res1.body.should == '{"counter"=>2}'
136
-
137
- res2 = req.get("/", "HTTP_COOKIE" => cookie)
138
- res2["Set-Cookie"].should be_nil
139
- res2.body.should == '{"counter"=>3}'
140
- end
141
-
142
- it "deletes cookies with :drop option" do
143
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
144
- req = Rack::MockRequest.new(pool)
145
- drop = Rack::Utils::Context.new(pool, drop_session)
146
- dreq = Rack::MockRequest.new(drop)
147
-
148
- res1 = req.get("/")
149
- session = (cookie = res1["Set-Cookie"])[session_match]
150
- res1.body.should == '{"counter"=>1}'
151
-
152
- res2 = dreq.get("/", "HTTP_COOKIE" => cookie)
153
- res2["Set-Cookie"].should == nil
154
- res2.body.should == '{"counter"=>2}'
155
-
156
- res3 = req.get("/", "HTTP_COOKIE" => cookie)
157
- res3["Set-Cookie"][session_match].should_not == session
158
- res3.body.should == '{"counter"=>1}'
159
- end
160
-
161
- it "provides new session id with :renew option" do
162
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
163
- req = Rack::MockRequest.new(pool)
164
- renew = Rack::Utils::Context.new(pool, renew_session)
165
- rreq = Rack::MockRequest.new(renew)
166
-
167
- res1 = req.get("/")
168
- session = (cookie = res1["Set-Cookie"])[session_match]
169
- res1.body.should == '{"counter"=>1}'
170
-
171
- res2 = rreq.get("/", "HTTP_COOKIE" => cookie)
172
- new_cookie = res2["Set-Cookie"]
173
- new_session = new_cookie[session_match]
174
- new_session.should_not == session
175
- res2.body.should == '{"counter"=>2}'
176
-
177
- res3 = req.get("/", "HTTP_COOKIE" => new_cookie)
178
- res3.body.should == '{"counter"=>3}'
179
-
180
- # Old cookie was deleted
181
- res4 = req.get("/", "HTTP_COOKIE" => cookie)
182
- res4.body.should == '{"counter"=>1}'
183
- end
184
-
185
- it "omits cookie with :defer option but still updates the state" do
186
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
187
- count = Rack::Utils::Context.new(pool, incrementor)
188
- defer = Rack::Utils::Context.new(pool, defer_session)
189
- dreq = Rack::MockRequest.new(defer)
190
- creq = Rack::MockRequest.new(count)
191
-
192
- res0 = dreq.get("/")
193
- res0["Set-Cookie"].should == nil
194
- res0.body.should == '{"counter"=>1}'
195
-
196
- res0 = creq.get("/")
197
- res1 = dreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
198
- res1.body.should == '{"counter"=>2}'
199
- res2 = dreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
200
- res2.body.should == '{"counter"=>3}'
201
- end
202
-
203
- it "omits cookie and state update with :skip option" do
204
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
205
- count = Rack::Utils::Context.new(pool, incrementor)
206
- skip = Rack::Utils::Context.new(pool, skip_session)
207
- sreq = Rack::MockRequest.new(skip)
208
- creq = Rack::MockRequest.new(count)
209
-
210
- res0 = sreq.get("/")
211
- res0["Set-Cookie"].should == nil
212
- res0.body.should == '{"counter"=>1}'
213
-
214
- res0 = creq.get("/")
215
- res1 = sreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
216
- res1.body.should == '{"counter"=>2}'
217
- res2 = sreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
218
- res2.body.should == '{"counter"=>2}'
219
- end
220
-
221
- it "updates deep hashes correctly" do
222
- hash_check = proc do |env|
223
- session = env['rack.session']
224
- unless session.include? 'test'
225
- session.update :a => :b, :c => { :d => :e },
226
- :f => { :g => { :h => :i} }, 'test' => true
227
- else
228
- session[:f][:g][:h] = :j
229
- end
230
- [200, {}, [session.inspect]]
231
- end
232
- pool = Rack::Session::Moneta.new(hash_check, :store => :Memory)
233
- req = Rack::MockRequest.new(pool)
234
-
235
- res0 = req.get("/")
236
- session_id = (cookie = res0["Set-Cookie"])[session_match, 1]
237
- ses0 = pool.pool[session_id]
238
-
239
- req.get("/", "HTTP_COOKIE" => cookie)
240
- ses1 = pool.pool[session_id]
241
-
242
- ses1.should_not == ses0
243
- end
244
-
245
- # anyone know how to do this better?
246
- it "cleanly merges sessions when multithreaded" do
247
- unless $DEBUG
248
- 1.should == 1 # fake assertion to appease the mighty bacon
249
- next
250
- end
251
- warn 'Running multithread test for Session::Memcache'
252
- pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
253
- req = Rack::MockRequest.new(pool)
254
-
255
- res = req.get('/')
256
- res.body.should == '{"counter"=>1}'
257
- cookie = res["Set-Cookie"]
258
- session_id = cookie[session_match, 1]
259
-
260
- delta_incrementor = lambda do |env|
261
- # emulate disconjoinment of threading
262
- env['rack.session'] = env['rack.session'].dup
263
- Thread.stop
264
- env['rack.session'][(Time.now.usec*rand).to_i] = true
265
- incrementor.call(env)
266
- end
267
- tses = Rack::Utils::Context.new pool, delta_incrementor
268
- treq = Rack::MockRequest.new(tses)
269
- tnum = rand(7).to_i+5
270
- r = Array.new(tnum) do
271
- Thread.new(treq) do |run|
272
- run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
273
- end
274
- end.reverse.map{|t| t.run.join.value }
275
- r.each do |request|
276
- request['Set-Cookie'].should == cookie
277
- request.body.should include '"counter"=>2'
278
- end
279
-
280
- session = pool.pool[session_id]
281
- session.size.should == tnum+1 # counter
282
- session['counter'].should == 2 # meeeh
283
-
284
- tnum = rand(7).to_i+5
285
- r = Array.new(tnum) do |i|
286
- app = Rack::Utils::Context.new pool, time_delta
287
- req = Rack::MockRequest.new app
288
- Thread.new(req) do |run|
289
- run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
290
- end
291
- end.reverse.map{|t| t.run.join.value }
292
- r.each do |request|
293
- request['Set-Cookie'].should == cookie
294
- request.body.should include '"counter"=>3'
295
- end
296
-
297
- session = pool.pool[session_id]
298
- session.size.should.be tnum+1
299
- session['counter'].should.be 3
300
-
301
- drop_counter = proc do |env|
302
- env['rack.session'].delete 'counter'
303
- env['rack.session']['foo'] = 'bar'
304
- [200, {'Content-Type'=>'text/plain'}, env['rack.session'].inspect]
305
- end
306
- tses = Rack::Utils::Context.new pool, drop_counter
307
- treq = Rack::MockRequest.new(tses)
308
- tnum = rand(7).to_i+5
309
- r = Array.new(tnum) do
310
- Thread.new(treq) do |run|
311
- run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
312
- end
313
- end.reverse.map{|t| t.run.join.value }
314
- r.each do |request|
315
- request['Set-Cookie'].should == cookie
316
- request.body.should include '"foo"=>"bar"'
317
- end
318
-
319
- session = pool.pool[session_id]
320
- session.size.should.be r.size+1
321
- session['counter'].should.be.nil?
322
- session['foo'].should == 'bar'
323
- end
324
-
325
- it "does not suffer a race-condition in get_session" do
326
- # By lying about existence of a key this proxy tricks the session
327
- # to overwrite values when it wouldn't normally.
328
- broken_key = Class.new(::Moneta::Proxy) do
329
- def key?(key, *args)
330
- false
331
- end
332
- end
333
-
334
- pool = Rack::Session::Moneta.new(incrementor) do
335
- use broken_key
336
- adapter :Memory
337
- end
338
-
339
- # Override the SID generator with one that returns predefined values.
340
- def pool.generate_sid(*)
341
- @fake_sid ||= %w(deadbeef deadbeef caffee)
342
- @fake_sid.shift || raise('Empty!')
343
- end
344
-
345
- req = Rack::MockRequest.new(pool)
346
- req.get('/')
347
- res = req.get('/')
348
- res['Set-Cookie'].should =~ /\Arack.session=caffee; /
349
- end
350
- end
data/spec/restserver.rb DELETED
@@ -1,44 +0,0 @@
1
- require 'faraday'
2
- require 'rack'
3
- require 'rack/moneta_rest'
4
- require 'webrick'
5
-
6
- class MonetaRestServerShutdown < StandardError; end
7
-
8
- def start_restserver(port)
9
- server = Rack::Server.new(
10
- :app => Rack::Builder.app do
11
- use Rack::Lint
12
- map '/moneta' do
13
- run Rack::MonetaRest.new(:Memory)
14
- end
15
- end,
16
- :environment => 'none',
17
- :server => :webrick,
18
- :Port => port,
19
- :AccessLog => [],
20
- :Logger => WEBrick::Log.new($stderr, WEBrick::BasicLog::ERROR)
21
- )
22
-
23
- Thread.start { server.start }
24
-
25
- begin
26
- Faraday.get("http://127.0.0.1:#{port}")
27
- rescue Faraday::ConnectionFailed
28
- tries ||= 5
29
- tries -= 1
30
- if tries > 0
31
- sleep 0.1
32
- retry
33
- else
34
- raise
35
- end
36
- end
37
-
38
- server
39
- end
40
-
41
- def stop_restserver(server)
42
- server.server.shutdown
43
- end
44
-
@@ -1,10 +0,0 @@
1
- module SessionAutoloadTest
2
- class Foo
3
- def initialize(bar='baz')
4
- @bar = bar
5
- end
6
- def inspect
7
- "#<#{self.class} bar:#{@bar.inspect}>"
8
- end
9
- end
10
- end
@@ -1,204 +0,0 @@
1
- require 'action_dispatch'
2
- require 'action_controller'
3
- require 'action_dispatch/middleware/session/moneta_store'
4
- require 'minitest/autorun'
5
-
6
- class MonetaStoreTest < ActionDispatch::IntegrationTest
7
- class TestController < ActionController::Base
8
- def no_session_access
9
- head :ok
10
- end
11
-
12
- def set_session_value
13
- session[:foo] = "bar"
14
- head :ok
15
- end
16
-
17
- def set_serialized_session_value
18
- session[:foo] = SessionAutoloadTest::Foo.new
19
- head :ok
20
- end
21
-
22
- def get_session_value
23
- render plain: "foo: #{session[:foo].inspect}"
24
- end
25
-
26
- def get_session_id
27
- render plain: request.cookies['_session_id'].to_s
28
- end
29
-
30
- def call_reset_session
31
- session[:bar]
32
- reset_session
33
- session[:bar] = "baz"
34
- head :ok
35
- end
36
- end
37
-
38
- def test_setting_and_getting_session_value
39
- with_test_route_set do
40
- get '/set_session_value'
41
- assert_response :success
42
- assert cookies['_session_id']
43
-
44
- get '/get_session_value'
45
- assert_response :success
46
- assert_equal 'foo: "bar"', response.body
47
- end
48
- end
49
-
50
- def test_getting_nil_session_value
51
- with_test_route_set do
52
- get '/get_session_value'
53
- assert_response :success
54
- assert_equal 'foo: nil', response.body
55
- end
56
- end
57
-
58
- def test_getting_session_value_after_session_reset
59
- with_test_route_set do
60
- get '/set_session_value'
61
- assert_response :success
62
- assert cookies['_session_id']
63
- session_cookie = cookies.to_hash['_session_id']
64
-
65
- get '/call_reset_session'
66
- assert_response :success
67
- assert_not_equal [], headers['Set-Cookie']
68
-
69
- cookies.merge(session_cookie) # replace our new session_id with our old, pre-reset session_id
70
-
71
- get '/get_session_value'
72
- assert_response :success
73
- assert_equal 'foo: nil', response.body, "data for this session should have been obliterated from cache"
74
- end
75
- end
76
-
77
- def test_getting_from_nonexistent_session
78
- with_test_route_set do
79
- get '/get_session_value'
80
- assert_response :success
81
- assert_equal 'foo: nil', response.body
82
- assert_nil cookies['_session_id'], "should only create session on write, not read"
83
- end
84
- end
85
-
86
- def test_setting_session_value_after_session_reset
87
- with_test_route_set do
88
- get '/set_session_value'
89
- assert_response :success
90
- assert cookies['_session_id']
91
- session_id = cookies['_session_id']
92
-
93
- get '/call_reset_session'
94
- assert_response :success
95
- assert_not_equal [], headers['Set-Cookie']
96
-
97
- get '/get_session_value'
98
- assert_response :success
99
- assert_equal 'foo: nil', response.body
100
-
101
- get '/get_session_id'
102
- assert_response :success
103
- assert_not_equal session_id, response.body
104
- end
105
- end
106
-
107
- def test_getting_session_id
108
- with_test_route_set do
109
- get '/set_session_value'
110
- assert_response :success
111
- assert cookies['_session_id']
112
- session_id = cookies['_session_id']
113
-
114
- get '/get_session_id'
115
- assert_response :success
116
- assert_equal session_id, response.body, "should be able to read session id without accessing the session hash"
117
- end
118
- end
119
-
120
- def test_deserializes_unloaded_class
121
- with_test_route_set do
122
- with_autoload_path do
123
- get '/set_serialized_session_value'
124
- assert_response :success
125
- assert cookies['_session_id']
126
- end
127
- with_autoload_path do
128
- get '/get_session_id'
129
- assert_response :success
130
- end
131
- with_autoload_path do
132
- get '/get_session_value'
133
- assert_response :success
134
- assert_equal 'foo: #<SessionAutoloadTest::Foo bar:"baz">', response.body, "should auto-load unloaded class"
135
- end
136
- end
137
- end
138
-
139
- def test_doesnt_write_session_cookie_if_session_id_is_already_exists
140
- with_test_route_set do
141
- get '/set_session_value'
142
- assert_response :success
143
- assert cookies['_session_id']
144
-
145
- get '/get_session_value'
146
- assert_response :success
147
- assert_nil headers['Set-Cookie'], "should not resend the cookie again if session_id cookie is already exists"
148
- end
149
- end
150
-
151
- def test_prevents_session_fixation
152
- with_test_route_set do
153
- get '/get_session_value'
154
- assert_response :success
155
- assert_equal 'foo: nil', response.body
156
- session_id = cookies['_session_id']
157
-
158
- reset!
159
-
160
- get "/set_session_value?_session_id=#{session_id}"
161
- assert_response :success
162
- assert_not_equal session_id, cookies['_session_id']
163
- end
164
- end
165
-
166
- private
167
-
168
- def with_autoload_path
169
- path = File.join(File.dirname(__FILE__), 'fixtures')
170
- if ActiveSupport::Dependencies.autoload_paths.include?(path)
171
- yield
172
- else
173
- begin
174
- ActiveSupport::Dependencies.autoload_paths << path
175
- yield
176
- ensure
177
- ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
178
- ActiveSupport::Dependencies.clear
179
- end
180
- end
181
- end
182
-
183
- def with_test_route_set
184
- with_routing do |set|
185
- set.draw do
186
- scope module: "moneta_store_test" do
187
- controller "test" do
188
- get 'set_session_value'
189
- get 'get_session_value'
190
- get 'call_reset_session'
191
- get 'get_session_id'
192
- get 'set_serialized_session_value'
193
- end
194
- end
195
- end
196
-
197
- @app = ActionDispatch::MiddlewareStack.new do |middleware|
198
- middleware.use ActionDispatch::Session::MonetaStore, key: '_session_id', store: :Memory
199
- end.build(set)
200
-
201
- yield
202
- end
203
- end
204
- end