moneta 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -4
  3. data/CHANGES +15 -0
  4. data/CONTRIBUTORS +6 -0
  5. data/Gemfile +21 -14
  6. data/README.md +2 -2
  7. data/lib/moneta/adapters/file.rb +2 -1
  8. data/lib/moneta/adapters/lruhash.rb +14 -11
  9. data/lib/moneta/adapters/memcached/dalli.rb +1 -1
  10. data/lib/moneta/adapters/memcached/native.rb +6 -0
  11. data/lib/moneta/adapters/mongo/base.rb +16 -1
  12. data/lib/moneta/adapters/mongo/moped.rb +2 -8
  13. data/lib/moneta/adapters/mongo/official.rb +31 -35
  14. data/lib/moneta/adapters/sequel.rb +1 -1
  15. data/lib/moneta/adapters/tokyotyrant.rb +13 -4
  16. data/lib/moneta/builder.rb +1 -1
  17. data/lib/moneta/transformer/config.rb +2 -2
  18. data/lib/moneta/transformer/helper.rb +16 -2
  19. data/lib/moneta/transformer/helper/bson.rb +25 -0
  20. data/lib/moneta/version.rb +1 -1
  21. data/lib/rack/cache/moneta.rb +2 -2
  22. data/script/generate-specs +216 -89
  23. data/script/start-services +6 -6
  24. data/spec/helper.rb +1 -1
  25. data/spec/moneta/adapter_datamapper_spec.rb +1 -1
  26. data/spec/moneta/adapter_lruhash_spec.rb +94 -1
  27. data/spec/moneta/adapter_mongo_moped_spec.rb +12 -4
  28. data/spec/moneta/adapter_mongo_moped_with_default_expires_spec.rb +3 -1
  29. data/spec/moneta/adapter_mongo_official_spec.rb +12 -4
  30. data/spec/moneta/adapter_mongo_official_with_default_expires_spec.rb +3 -1
  31. data/spec/moneta/adapter_mongo_spec.rb +2 -1
  32. data/spec/moneta/adapter_mongo_with_default_expires_spec.rb +3 -1
  33. data/spec/moneta/mutex_spec.rb +12 -12
  34. data/spec/moneta/optionmerger_spec.rb +1 -1
  35. data/spec/moneta/semaphore_spec.rb +15 -15
  36. data/spec/moneta/shared_tcp_spec.rb +1 -1
  37. data/spec/moneta/shared_unix_spec.rb +1 -1
  38. data/spec/moneta/standard_mongo_moped_spec.rb +1 -1
  39. data/spec/moneta/standard_mongo_official_spec.rb +1 -1
  40. data/spec/moneta/standard_mongo_spec.rb +1 -1
  41. data/spec/moneta/transformer_bson_spec.rb +6 -1
  42. data/spec/moneta/transformer_bzip2_spec.rb +1 -1
  43. data/spec/monetaspecs.rb +2434 -2434
  44. data/spec/rack/cache_moneta_spec.rb +2 -2
  45. data/spec/rack/moneta_store_spec.rb +1 -1
  46. metadata +196 -12
  47. data/script/install-bundle +0 -38
  48. data/script/upload-bundle +0 -2
  49. data/script/wait-services +0 -15
@@ -28,7 +28,7 @@ module Moneta
28
28
  end
29
29
  @backend.create_table?(table) do
30
30
  String :k, null: false, primary_key: true
31
- Blob :v
31
+ File :v
32
32
  end
33
33
  @table = @backend[table]
34
34
  end
@@ -14,6 +14,9 @@ module Moneta
14
14
  include Defaults
15
15
  include HashAdapter
16
16
 
17
+ # error code: no record found
18
+ ENOREC = 7
19
+
17
20
  supports :create, :increment
18
21
  attr_reader :backend
19
22
 
@@ -29,7 +32,7 @@ module Moneta
29
32
  elsif defined?(::TokyoTyrant::RDB)
30
33
  # Use ruby client
31
34
  @backend = ::TokyoTyrant::RDB.new
32
- @backend.open(options[:host], options[:port]) or raise @backend.errmsg(@backend.ecode)
35
+ @backend.open(options[:host], options[:port]) or error
33
36
  else
34
37
  # Use native client
35
38
  @backend = ::TokyoTyrant::DB.new(options[:host], options[:port])
@@ -44,12 +47,14 @@ module Moneta
44
47
  # (see Proxy#load)
45
48
  def load(key, options = {})
46
49
  value = @backend[key]
50
+ # raise if there is an error and the error is not "no record"
51
+ error if value.nil? && @backend.ecode != ENOREC
47
52
  value && unpack(value)
48
53
  end
49
54
 
50
55
  # (see Proxy#store)
51
56
  def store(key, value, options = {})
52
- @backend[key] = pack(value)
57
+ @backend.put(key, pack(value)) or error
53
58
  value
54
59
  end
55
60
 
@@ -57,14 +62,14 @@ module Moneta
57
62
  def delete(key, options = {})
58
63
  value = load(key, options)
59
64
  if value
60
- @backend.delete(key)
65
+ @backend.delete(key) or error
61
66
  value
62
67
  end
63
68
  end
64
69
 
65
70
  # (see Proxy#increment)
66
71
  def increment(key, amount = 1, options = {})
67
- @backend.addint(key, amount) || raise('Tried to increment non integer value')
72
+ @backend.addint(key, amount) or error
68
73
  end
69
74
 
70
75
  # (see Proxy#create)
@@ -113,6 +118,10 @@ module Moneta
113
118
  value
114
119
  end
115
120
  end
121
+
122
+ def error
123
+ raise "#{@backend.class.name} error: #{@backend.errmsg}"
124
+ end
116
125
  end
117
126
  end
118
127
  end
@@ -63,7 +63,7 @@ module Moneta
63
63
 
64
64
  def new_proxy(klass, *args, &block)
65
65
  klass.new(*args, &block)
66
- rescue ArgumentError => ex
66
+ rescue ArgumentError
67
67
  check_arity(klass, klass.allocate, args.size)
68
68
  raise
69
69
  end
@@ -5,7 +5,7 @@ module Moneta
5
5
  # Name: [ Type, Load, Dump, Library ],
6
6
  bencode: [ :serialize, '::BEncode.load(%s)', '::BEncode.dump(%s)', 'bencode' ],
7
7
  bert: [ :serialize, '::BERT.decode(%s)', '::BERT.encode(%s)', 'bert' ],
8
- bson: [ :serialize, "::BSON.deserialize(%s)['v']", "::BSON.serialize('v'=>%s).to_s", 'bson' ],
8
+ bson: [ :serialize, 'Helper::BSON.load(%s)', 'Helper::BSON.dump(%s)', 'bson' ],
9
9
  json: [ :serialize, '::MultiJson.load(%s)', '::MultiJson.dump(%s)', 'multi_json' ],
10
10
  marshal: [ :serialize, '::Marshal.load(%s)', '::Marshal.dump(%s)' ],
11
11
  msgpack: [ :serialize, '::MessagePack.unpack(%s)', '::MessagePack.pack(%s)', 'msgpack' ],
@@ -13,7 +13,7 @@ module Moneta
13
13
  php: [ :serialize, '::PHP.unserialize(%s)', '::PHP.serialize(%s)', 'php_serialize' ],
14
14
  tnet: [ :serialize, '::TNetstring.parse(%s).first', '::TNetstring.dump(%s)', 'tnetstring' ],
15
15
  yaml: [ :serialize, '::YAML.load(%s)', '::YAML.dump(%s)', 'yaml' ],
16
- bzip2: [ :compress, '::Bzip2.uncompress(%s)', '::Bzip2.compress(%s)', 'bzip2' ],
16
+ bzip2: [ :compress, 'Helper.bunzip2(%s)', 'Helper.bzip2(%s)', 'rbzip2' ],
17
17
  lz4: [ :compress, '::LZ4.uncompress(%s)', '::LZ4.compress(%s)', 'lz4-ruby' ],
18
18
  lzma: [ :compress, '::LZMA.decompress(%s)', '::LZMA.compress(%s)', 'lzma' ],
19
19
  lzo: [ :compress, '::LZO.decompress(%s)', '::LZO.compress(%s)', 'lzoruby' ],
@@ -14,11 +14,11 @@ module Moneta
14
14
 
15
15
  def hmacverify(value, secret)
16
16
  hash, value = value[0..31], value[32..-1]
17
- value if hash == OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), secret, value)
17
+ value if hash == OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), secret, value)
18
18
  end
19
19
 
20
20
  def hmacsign(value, secret)
21
- OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), secret, value) << value
21
+ OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), secret, value) << value
22
22
  end
23
23
 
24
24
  def truncate(value, maxlen)
@@ -32,6 +32,20 @@ module Moneta
32
32
  def spread(value)
33
33
  ::File.join(value[0..1], value[2..-1])
34
34
  end
35
+
36
+ def bzip2(value)
37
+ io = ::StringIO.new
38
+ bz = ::RBzip2::Compressor.new(io)
39
+ bz.write(value)
40
+ bz.close
41
+ io.string
42
+ end
43
+
44
+ def bunzip2(value)
45
+ ::RBzip2::Decompressor.new(::StringIO.new(value)).read
46
+ end
47
+
48
+ autoload :BSON, 'moneta/transformer/helper/bson'
35
49
  end
36
50
  end
37
51
  end
@@ -0,0 +1,25 @@
1
+ module Moneta
2
+ class Transformer
3
+ module Helper::BSON
4
+ extend self
5
+
6
+ if ::BSON::VERSION >= '4.0.0'
7
+ def load value
8
+ ::BSON::Document.from_bson(::BSON::ByteBuffer.new(value))['v']
9
+ end
10
+
11
+ def dump value
12
+ ::BSON::Document['v'=>value].to_bson.to_s
13
+ end
14
+ else
15
+ def load value
16
+ ::BSON::Document.from_bson(::StringIO.new(value))['v']
17
+ end
18
+
19
+ def dump value
20
+ ::BSON::Document['v'=>value].to_bson
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
1
  module Moneta
2
2
  # Moneta version number
3
3
  # @api public
4
- VERSION = '0.8.0'
4
+ VERSION = '0.8.1'
5
5
  end
@@ -1,7 +1,7 @@
1
1
  require 'moneta'
2
2
  require 'rack/cache/key'
3
- require 'rack/cache/metastore'
4
- require 'rack/cache/entitystore'
3
+ require 'rack/cache/meta_store'
4
+ require 'rack/cache/entity_store'
5
5
 
6
6
  module Rack
7
7
  module Cache
@@ -425,17 +425,17 @@ end
425
425
  },
426
426
  'standard_mongo' => {
427
427
  store: :Mongo,
428
- options: "db: 'standard_mongo'",
428
+ options: "db: 'standard_mongo', collection: 'default'",
429
429
  specs: STANDARD_SPECS.with_native_expires
430
430
  },
431
431
  'standard_mongo_moped' => {
432
432
  store: :MongoMoped,
433
- options: "db: 'standard_mongo_moped'",
433
+ options: "db: 'standard_mongo', collection: 'moped'",
434
434
  specs: STANDARD_SPECS.with_native_expires
435
435
  },
436
436
  'standard_mongo_official' => {
437
437
  store: :MongoOfficial,
438
- options: "db: 'standard_mongo_official'",
438
+ options: "db: 'standard_mongo', collection: 'official'",
439
439
  specs: STANDARD_SPECS.with_native_expires
440
440
  },
441
441
  'standard_null' => {
@@ -633,7 +633,7 @@ end},
633
633
  it 'shares values' do
634
634
  store['shared_key'] = 'shared_value'
635
635
  second = new_store
636
- second.key?('shared_key').should be_true
636
+ second.key?('shared_key').should be true
637
637
  second['shared_key'].should == 'shared_value'
638
638
  second.close
639
639
  end
@@ -650,7 +650,7 @@ end},
650
650
  it 'shares values' do
651
651
  store['shared_key'] = 'shared_value'
652
652
  second = new_store
653
- second.key?('shared_key').should be_true
653
+ second.key?('shared_key').should be true
654
654
  second['shared_key'].should == 'shared_value'
655
655
  second.close
656
656
  end
@@ -710,7 +710,7 @@ end}
710
710
  adapter :Memory
711
711
  end},
712
712
  specs: TRANSFORMER_SPECS.stringvalues_only,
713
- load_value: '::Bzip2.uncompress(value)',
713
+ load_value: '::RBzip2::Decompressor.new(::StringIO.new(value)).read',
714
714
  tests: %{
715
715
  it 'compile transformer class' do
716
716
  store.should_not be_nil
@@ -828,7 +828,12 @@ end}
828
828
  adapter :Memory
829
829
  end},
830
830
  specs: TRANSFORMER_SPECS.simplekeys_only.simplevalues_only,
831
- load_value: "::BSON.deserialize(value)['v']",
831
+ load_value: %{
832
+ if ::BSON::VERSION >= '4.0.0'
833
+ ::BSON::Document.from_bson(::BSON::ByteBuffer.new(value))['v']
834
+ else
835
+ ::BSON::Document.from_bson(::StringIO.new(value))['v']
836
+ end},
832
837
  tests: %{
833
838
  it 'compile transformer class' do
834
839
  store.should_not be_nil
@@ -1314,7 +1319,7 @@ it 'does not cross contaminate when deleting' do
1314
1319
  second['key'] = 'value2'
1315
1320
 
1316
1321
  first.delete('key').should == 'value'
1317
- first.key?('key').should be_false
1322
+ first.key?('key').should be false
1318
1323
  second['key'].should == 'value2'
1319
1324
  end
1320
1325
  }
@@ -1395,46 +1400,168 @@ it 'deletes oldest' do
1395
1400
  (0...[9, i-1].min).each do |j|
1396
1401
  store.instance_variable_get(:@entry)[i-j].should_not be_nil
1397
1402
  end
1398
- store.key?(i-9).should be_false if i > 9
1403
+ store.key?(i-9).should be false if i > 9
1399
1404
  end
1405
+ end
1406
+
1407
+ it 'adds a value that is the same as max_size' do
1408
+ store = Moneta::Adapters::LRUHash.new(max_size: 21)
1409
+ store[:a_key] = 'This is 21 bytes long'
1410
+ store[:a_key].should eq('This is 21 bytes long')
1411
+ end
1412
+
1413
+ it 'does not add a value that is larger than max_size' do
1414
+ store = Moneta::Adapters::LRUHash.new(max_size: 20)
1415
+ store[:too_long] = 'This is 21 bytes long'
1416
+ store[:too_long].should be_nil
1417
+ end
1418
+
1419
+ it 'removes an existing key that is replaced by an item that is larger than max_size' do
1420
+ store = Moneta::Adapters::LRUHash.new(max_size: 20)
1421
+ store[:a_key] = 'This will fit'
1422
+ store[:a_key] = 'This is 21 bytes long'
1423
+ store[:a_key].should be_nil
1424
+ end
1425
+
1426
+ it 'does not add a value that is larger than max_size, when max_value is explicitly missing' do
1427
+ store = Moneta::Adapters::LRUHash.new(max_size: 20, max_value: nil)
1428
+ store[:too_long] = 'This is 21 bytes long'
1429
+ store[:too_long].should be_nil
1430
+ end
1431
+
1432
+ it 'does not add a value that is larger than max_size, even if max_value is larger than max_size' do
1433
+ store = Moneta::Adapters::LRUHash.new(max_size: 20, max_value: 25)
1434
+ store[:too_long] = 'This is 21 bytes long'
1435
+ store[:too_long].should be_nil
1436
+ end
1437
+
1438
+ it 'adds a value that is as large as the default max_size when max_size is missing' do
1439
+ store = Moneta::Adapters::LRUHash.new
1440
+ large_item = 'Really big'
1441
+ allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE)
1442
+ store[:really_big] = large_item
1443
+ store[:really_big].should eq(large_item)
1444
+ end
1445
+
1446
+ it 'does not add values that are larger than the default max_size when max_size is missing' do
1447
+ store = Moneta::Adapters::LRUHash.new
1448
+ large_item = 'Really big'
1449
+ allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE + 1)
1450
+ store[:really_big] = large_item
1451
+ store[:really_big].should be_nil
1452
+ end
1453
+
1454
+ it 'adds values that are larger than the default max_size when max_size is nil' do
1455
+ store = Moneta::Adapters::LRUHash.new(max_size: nil)
1456
+ large_item = 'Really big'
1457
+ allow(large_item).to receive(:bytesize).and_return(Moneta::Adapters::LRUHash::DEFAULT_MAX_SIZE + 1)
1458
+ store[:really_big] = large_item
1459
+ store[:really_big].should eq(large_item)
1460
+ end
1461
+
1462
+ it 'adds an individual value that is equal to max_value' do
1463
+ store = Moneta::Adapters::LRUHash.new(max_value: 13)
1464
+ store[:a_key] = '13 bytes long'
1465
+ store[:a_key].should eq('13 bytes long')
1466
+ end
1467
+
1468
+ it 'does not add a value that is larger than max_value' do
1469
+ store = Moneta::Adapters::LRUHash.new(max_value: 20)
1470
+ store[:too_long] = 'This is 21 bytes long'
1471
+ store[:too_long].should be_nil
1472
+ end
1473
+
1474
+ it 'removes keys that are replaced by values larger than max_value' do
1475
+ store = Moneta::Adapters::LRUHash.new(max_value: 20)
1476
+ store[:too_long] = 'This will fit'
1477
+ store[:too_long] = 'This is 21 bytes long'
1478
+ store[:too_long].should be_nil
1479
+ end
1480
+
1481
+ it 'only allows the default number of items when max_count is missing' do
1482
+ stub_const('Moneta::Adapters::LRUHash::DEFAULT_MAX_COUNT', 5)
1483
+ store = Moneta::Adapters::LRUHash.new(max_value: nil, max_size: nil)
1484
+ (1..6).each { |n| store[n] = n }
1485
+ store.key?(1).should be false
1486
+ store[1].should be_nil
1487
+ store[2].should eq(2)
1488
+ store[6].should eq(6)
1489
+ end
1490
+
1491
+ it 'adds more values than DEFAULT_MAX_COUNT allows when max_count is nil' do
1492
+ stub_const('Moneta::Adapters::LRUHash::DEFAULT_MAX_COUNT', 5)
1493
+ store = Moneta::Adapters::LRUHash.new(max_count: nil, max_value: nil, max_size: nil)
1494
+ (1..6).each { |n| store[n] = n }
1495
+ store[1].should eq(1)
1496
+ store[2].should eq(2)
1497
+ store[6].should eq(6)
1400
1498
  end}
1401
1499
  },
1402
1500
  'adapter_mongo' => {
1403
- build: 'Moneta::Adapters::Mongo.new(db: "adapter_mongo")',
1501
+ build: %{\
1502
+ Moneta::Adapters::Mongo.new(db: "adapter_mongo",
1503
+ collection: 'default')},
1404
1504
  specs: ADAPTER_SPECS.with_native_expires.simplevalues_only
1405
1505
  },
1406
1506
  'adapter_mongo_with_default_expires' => {
1407
- build: %{Moneta::Adapters::Mongo.new(expires: 1)},
1507
+ build: %{\
1508
+ Moneta::Adapters::Mongo.new(db: "adapter_mongo",
1509
+ collection: 'with_default_expires',
1510
+ expires: 1)},
1408
1511
  specs: ADAPTER_SPECS.with_expires.with_default_expires.simplevalues_only
1409
1512
  },
1410
1513
  'adapter_mongo_moped' => {
1411
- build: 'Moneta::Adapters::MongoMoped.new(db: "adapter_mongo")',
1514
+ build: %{\
1515
+ Moneta::Adapters::MongoMoped.new(db: "adapter_mongo",
1516
+ collection: 'moped')},
1412
1517
  specs: ADAPTER_SPECS.with_native_expires.simplevalues_only,
1413
1518
  tests: %{
1414
1519
  it 'automatically deletes expired document' do
1415
1520
  store.store('key', 'val', expires: 5)
1416
- store.instance_variable_get(:@collection).find('_id' => ::Moped::BSON::Binary.new(:generic, 'key')).one.should_not be_nil
1417
- sleep 70 # Mongo needs up to 60 seconds
1418
- store.instance_variable_get(:@collection).find('_id' => ::Moped::BSON::Binary.new(:generic, 'key')).one.should be_nil
1521
+
1522
+ i = 0
1523
+ query = store.instance_variable_get(:@collection).find(_id: ::BSON::Binary.new('key'))
1524
+ while i < 70 && query.first
1525
+ i += 1
1526
+ sleep 1 # Mongo needs up to 60 seconds
1527
+ end
1528
+
1529
+ i.should be > 0 # Indicates that it took at least one sleep to expire
1530
+ query.count.should == 0
1419
1531
  end}
1420
1532
  },
1421
1533
  'adapter_mongo_moped_with_default_expires' => {
1422
- build: %{Moneta::Adapters::MongoMoped.new(expires: 1)},
1534
+ build: %{\
1535
+ Moneta::Adapters::MongoMoped.new(db: "adapter_mongo",
1536
+ collection: 'moped_with_default_expires',
1537
+ expires: 1)},
1423
1538
  specs: ADAPTER_SPECS.with_expires.with_default_expires.simplevalues_only
1424
1539
  },
1425
1540
  'adapter_mongo_official' => {
1426
- build: 'Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo")',
1541
+ build: %{\
1542
+ Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo",
1543
+ collection: 'official')},
1427
1544
  specs: ADAPTER_SPECS.with_native_expires.simplevalues_only,
1428
1545
  tests: %{
1429
1546
  it 'automatically deletes expired document' do
1430
1547
  store.store('key', 'val', expires: 5)
1431
- store.instance_variable_get(:@collection).find_one('_id' => ::BSON::Binary.new('key')).should_not be_nil
1432
- sleep 70 # Mongo needs up to 60 seconds
1433
- store.instance_variable_get(:@collection).find_one('_id' => ::BSON::Binary.new('key')).should be_nil
1548
+
1549
+ i = 0
1550
+ query = store.instance_variable_get(:@collection).find(_id: ::BSON::Binary.new('key'))
1551
+ while i < 70 && query.first
1552
+ i += 1
1553
+ sleep 1 # Mongo needs up to 60 seconds
1554
+ end
1555
+
1556
+ i.should be > 0 # Indicates that it took at least one sleep to expire
1557
+ query.count.should == 0
1434
1558
  end}
1435
1559
  },
1436
1560
  'adapter_mongo_official_with_default_expires' => {
1437
- build: %{Moneta::Adapters::MongoOfficial.new(expires: 1)},
1561
+ build: %{\
1562
+ Moneta::Adapters::MongoOfficial.new(db: "adapter_mongo",
1563
+ collection: 'official_with_default_expires',
1564
+ expires: 1)},
1438
1565
  specs: ADAPTER_SPECS.with_expires.with_default_expires.simplevalues_only
1439
1566
  },
1440
1567
  'adapter_pstore' => {
@@ -1506,8 +1633,8 @@ end}
1506
1633
  tests: %{
1507
1634
  it 'should have #lock' do
1508
1635
  mutex = Moneta::Mutex.new(store, 'mutex')
1509
- mutex.lock.should be_true
1510
- mutex.locked?.should be_true
1636
+ mutex.lock.should be true
1637
+ mutex.locked?.should be true
1511
1638
  expect do
1512
1639
  mutex.lock
1513
1640
  end.to raise_error(RuntimeError)
@@ -1515,13 +1642,13 @@ it 'should have #lock' do
1515
1642
  mutex.try_lock
1516
1643
  end.to raise_error(RuntimeError)
1517
1644
  mutex.unlock.should be_nil
1518
- mutex.locked?.should be_false
1645
+ mutex.locked?.should be false
1519
1646
  end
1520
1647
 
1521
1648
  it 'should have #enter' do
1522
1649
  mutex = Moneta::Mutex.new(store, 'mutex')
1523
- mutex.enter.should be_true
1524
- mutex.locked?.should be_true
1650
+ mutex.enter.should be true
1651
+ mutex.locked?.should be true
1525
1652
  expect do
1526
1653
  mutex.enter
1527
1654
  end.to raise_error(RuntimeError)
@@ -1529,31 +1656,31 @@ it 'should have #enter' do
1529
1656
  mutex.try_enter
1530
1657
  end.to raise_error(RuntimeError)
1531
1658
  mutex.leave.should be_nil
1532
- mutex.locked?.should be_false
1659
+ mutex.locked?.should be false
1533
1660
  end
1534
1661
 
1535
1662
  it 'should lock with #lock' do
1536
1663
  a = Moneta::Mutex.new(store, 'mutex')
1537
1664
  b = Moneta::Mutex.new(store, 'mutex')
1538
- a.lock.should be_true
1539
- b.try_lock.should be_false
1665
+ a.lock.should be true
1666
+ b.try_lock.should be false
1540
1667
  a.unlock.should be_nil
1541
1668
  end
1542
1669
 
1543
1670
  it 'should have lock timeout' do
1544
1671
  a = Moneta::Mutex.new(store, 'mutex')
1545
1672
  b = Moneta::Mutex.new(store, 'mutex')
1546
- a.lock.should be_true
1547
- b.lock(1).should be_false
1673
+ a.lock.should be true
1674
+ b.lock(1).should be false
1548
1675
  a.unlock.should be_nil
1549
1676
  end
1550
1677
 
1551
1678
  it 'should have #synchronize' do
1552
1679
  mutex = Moneta::Mutex.new(store, 'mutex')
1553
1680
  mutex.synchronize do
1554
- mutex.locked?.should be_true
1681
+ mutex.locked?.should be true
1555
1682
  end
1556
- mutex.locked?.should be_false
1683
+ mutex.locked?.should be false
1557
1684
  end
1558
1685
  }
1559
1686
  },
@@ -1563,8 +1690,8 @@ end
1563
1690
  tests: %{
1564
1691
  it 'should have #lock' do
1565
1692
  mutex = Moneta::Semaphore.new(store, 'semaphore')
1566
- mutex.lock.should be_true
1567
- mutex.locked?.should be_true
1693
+ mutex.lock.should be true
1694
+ mutex.locked?.should be true
1568
1695
  expect do
1569
1696
  mutex.lock
1570
1697
  end.to raise_error(RuntimeError)
@@ -1572,13 +1699,13 @@ it 'should have #lock' do
1572
1699
  mutex.try_lock
1573
1700
  end.to raise_error(RuntimeError)
1574
1701
  mutex.unlock.should be_nil
1575
- mutex.locked?.should be_false
1702
+ mutex.locked?.should be false
1576
1703
  end
1577
1704
 
1578
1705
  it 'should have #enter' do
1579
1706
  mutex = Moneta::Semaphore.new(store, 'semaphore')
1580
- mutex.enter.should be_true
1581
- mutex.locked?.should be_true
1707
+ mutex.enter.should be true
1708
+ mutex.locked?.should be true
1582
1709
  expect do
1583
1710
  mutex.enter
1584
1711
  end.to raise_error(RuntimeError)
@@ -1586,22 +1713,22 @@ it 'should have #enter' do
1586
1713
  mutex.try_enter
1587
1714
  end.to raise_error(RuntimeError)
1588
1715
  mutex.leave.should be_nil
1589
- mutex.locked?.should be_false
1716
+ mutex.locked?.should be false
1590
1717
  end
1591
1718
 
1592
1719
  it 'should lock with #lock' do
1593
1720
  a = Moneta::Semaphore.new(store, 'semaphore')
1594
1721
  b = Moneta::Semaphore.new(store, 'semaphore')
1595
- a.lock.should be_true
1596
- b.try_lock.should be_false
1722
+ a.lock.should be true
1723
+ b.try_lock.should be false
1597
1724
  a.unlock.should be_nil
1598
1725
  end
1599
1726
 
1600
1727
  it 'should have lock timeout' do
1601
1728
  a = Moneta::Semaphore.new(store, 'semaphore')
1602
1729
  b = Moneta::Semaphore.new(store, 'semaphore')
1603
- a.lock.should be_true
1604
- b.lock(1).should be_false
1730
+ a.lock.should be true
1731
+ b.lock(1).should be false
1605
1732
  a.unlock.should be_nil
1606
1733
  end
1607
1734
 
@@ -1610,10 +1737,10 @@ it 'should count concurrent accesses' do
1610
1737
  b = Moneta::Semaphore.new(store, 'semaphore', 2)
1611
1738
  c = Moneta::Semaphore.new(store, 'semaphore', 2)
1612
1739
  a.synchronize do
1613
- a.locked?.should be_true
1740
+ a.locked?.should be true
1614
1741
  b.synchronize do
1615
- b.locked?.should be_true
1616
- c.try_lock.should be_false
1742
+ b.locked?.should be true
1743
+ c.try_lock.should be false
1617
1744
  end
1618
1745
  end
1619
1746
  end
@@ -1621,9 +1748,9 @@ end
1621
1748
  it 'should have #synchronize' do
1622
1749
  semaphore = Moneta::Semaphore.new(store, 'semaphore')
1623
1750
  semaphore.synchronize do
1624
- semaphore.locked?.should be_true
1751
+ semaphore.locked?.should be true
1625
1752
  end
1626
- semaphore.locked?.should be_false
1753
+ semaphore.locked?.should be false
1627
1754
  end
1628
1755
  }
1629
1756
  },
@@ -1719,7 +1846,7 @@ it 'supports adding proxis using #with' do
1719
1846
  compressed_store['key'] = 'compressed value'
1720
1847
  store['key'].should == 'uncompressed value'
1721
1848
  compressed_store['key'].should == 'compressed value'
1722
- store.key?('compressedkey').should be_true
1849
+ store.key?('compressedkey').should be true
1723
1850
  # Check if value is compressed
1724
1851
  compressed_store['key'].should_not == store['compressedkey']
1725
1852
  end}
@@ -1772,7 +1899,7 @@ it 'guarantees that the same value is returned when setting a key' do
1772
1899
  end
1773
1900
 
1774
1901
  it 'returns false from #key? if a key is not available' do
1775
- store.key?(#{key1}).should be_false
1902
+ store.key?(#{key1}).should be false
1776
1903
  end
1777
1904
 
1778
1905
  it 'returns nil from delete if a value for a key does not exist' do
@@ -1783,8 +1910,8 @@ it 'removes all keys from the store with clear' do
1783
1910
  store[#{key1}] = #{val1}
1784
1911
  store[#{key2}] = #{val2}
1785
1912
  store.clear.should equal(store)
1786
- store.key?(#{key1}).should be_false
1787
- store.key?(#{key2}).should be_false
1913
+ store.key?(#{key1}).should be false
1914
+ store.key?(#{key2}).should be false
1788
1915
  end
1789
1916
 
1790
1917
  it 'fetches a key with a default value with fetch, if the key is not available' do
@@ -1803,7 +1930,7 @@ end
1803
1930
  it 'accepts frozen options' do
1804
1931
  options = {option1: 1, options2: 2}
1805
1932
  options.freeze
1806
- store.key?(#{key1}, options).should be_false
1933
+ store.key?(#{key1}, options).should be false
1807
1934
  store.load(#{key1}, options).should be_nil
1808
1935
  store.fetch(#{key1}, 42, options).should == 42
1809
1936
  store.fetch(#{key1}, options) { 42 }.should == 42
@@ -1821,7 +1948,7 @@ end
1821
1948
 
1822
1949
  it 'returns true from #key? if a key is available' do
1823
1950
  store[#{key1}] = #{val1}
1824
- store.key?(#{key1}).should be_true
1951
+ store.key?(#{key1}).should be true
1825
1952
  end
1826
1953
 
1827
1954
  it 'stores values with #store' do
@@ -1843,7 +1970,7 @@ end
1843
1970
  it 'removes and returns a value from the backing store via delete if it exists' do
1844
1971
  store[#{key1}] = #{val1}
1845
1972
  store.delete(#{key1}).should == #{val1}
1846
- store.key?(#{key1}).should be_false
1973
+ store.key?(#{key1}).should be false
1847
1974
  end
1848
1975
 
1849
1976
  it 'overwrites existing values' do
@@ -1999,18 +2126,18 @@ end
1999
2126
 
2000
2127
  it 'supports expires on store and #key?', retry: 3 do
2001
2128
  store.store('key1', 'val1', expires: 3)
2002
- store.key?('key1').should be_true
2129
+ store.key?('key1').should be true
2003
2130
  sleep 1
2004
- store.key?('key1').should be_true
2131
+ store.key?('key1').should be true
2005
2132
  sleep 3
2006
- store.key?('key1').should be_false
2133
+ store.key?('key1').should be false
2007
2134
  end
2008
2135
 
2009
2136
  it 'supports strict expires on store and #key?' do
2010
2137
  store.store('key1', 'val1', expires: 2)
2011
- store.key?('key1').should be_true
2138
+ store.key?('key1').should be true
2012
2139
  sleep 3 # Sleep 3 seconds because after 2 seconds the value can still exist!
2013
- store.key?('key1').should be_false
2140
+ store.key?('key1').should be false
2014
2141
  end
2015
2142
 
2016
2143
  it 'supports updating the expiration time in load', retry: 3 do
@@ -2043,7 +2170,7 @@ it 'supports updating the expiration time in #key?', retry: 3 do
2043
2170
  store.store('key2', 'val2', expires: 3)
2044
2171
  store['key2'].should == 'val2'
2045
2172
  sleep 1
2046
- store.key?('key2', expires: 5).should be_true
2173
+ store.key?('key2', expires: 5).should be true
2047
2174
  store['key2'].should == 'val2'
2048
2175
  sleep 3
2049
2176
  store['key2'].should == 'val2'
@@ -2053,14 +2180,14 @@ end
2053
2180
 
2054
2181
  it 'supports 0 as no-expires in #key?' do
2055
2182
  store.store('key1', 'val1', expires: 2)
2056
- store.key?('key1', expires: 0).should be_true
2183
+ store.key?('key1', expires: 0).should be true
2057
2184
  sleep 3
2058
2185
  store['key1'].should == 'val1'
2059
2186
  end
2060
2187
 
2061
2188
  it 'supports false as no-expires in #key?' do
2062
2189
  store.store('key1', 'val1', expires: 2)
2063
- store.key?('key1', expires: false ).should be_true
2190
+ store.key?('key1', expires: false ).should be true
2064
2191
  sleep 3
2065
2192
  store['key1'].should == 'val1'
2066
2193
  end
@@ -2125,10 +2252,10 @@ end
2125
2252
 
2126
2253
  it 'does not update the expiration time in #key? when not asked to do so', retry: 3 do
2127
2254
  store.store('key1', 'val1', expires: 1)
2128
- store.key?('key1').should be_true
2129
- store.key?('key1', expires: nil).should be_true
2255
+ store.key?('key1').should be true
2256
+ store.key?('key1', expires: nil).should be true
2130
2257
  sleep 2
2131
- store.key?('key1').should be_false
2258
+ store.key?('key1').should be false
2132
2259
  end
2133
2260
 
2134
2261
  it 'does not update the expiration time in fetch when not asked to do so', retry: 3 do
@@ -2149,11 +2276,11 @@ end}
2149
2276
 
2150
2277
  SPECS['default_expires'] = %{it 'does set default expiration time' do
2151
2278
  store['key1'] = 'val1'
2152
- store.key?('key1').should be_true
2279
+ store.key?('key1').should be true
2153
2280
  store.fetch('key1').should == 'val1'
2154
2281
  store.load('key1').should == 'val1'
2155
2282
  sleep 2
2156
- store.key?('key1').should be_false
2283
+ store.key?('key1').should be false
2157
2284
  store.fetch('key1').should be_nil
2158
2285
  store.load('key1').should be_nil
2159
2286
  end}
@@ -2222,27 +2349,27 @@ it 'have atomic create across multiple processes' do
2222
2349
  end}
2223
2350
 
2224
2351
  SPECS['increment'] = %{it 'initializes in #increment with 1' do
2225
- store.key?('inckey').should be_false
2352
+ store.key?('inckey').should be false
2226
2353
  store.increment('inckey').should == 1
2227
- store.key?('inckey').should be_true
2354
+ store.key?('inckey').should be true
2228
2355
  store.raw['inckey'].should == '1'
2229
2356
  store.raw.load('inckey').should == '1'
2230
2357
  store.load('inckey', raw: true).should == '1'
2231
2358
 
2232
2359
  store.delete('inckey', raw: true).should == '1'
2233
- store.key?('inckey').should be_false
2360
+ store.key?('inckey').should be false
2234
2361
  end
2235
2362
 
2236
2363
  it 'initializes in #increment with higher value' do
2237
2364
  store.increment('inckey', 42).should == 42
2238
- store.key?('inckey').should be_true
2365
+ store.key?('inckey').should be true
2239
2366
  store.raw['inckey'].should == '42'
2240
2367
  store.delete('inckey', raw: true).should == '42'
2241
2368
  end
2242
2369
 
2243
2370
  it 'initializes in #increment with 0' do
2244
2371
  store.increment('inckey', 0).should == 0
2245
- store.key?('inckey').should be_true
2372
+ store.key?('inckey').should be true
2246
2373
  store.raw['inckey'].should == '0'
2247
2374
  store.delete('inckey', raw: true).should == '0'
2248
2375
  end
@@ -2310,36 +2437,36 @@ it 'supports Semaphore' do
2310
2437
  b = Moneta::Semaphore.new(store, 'semaphore', 2)
2311
2438
  c = Moneta::Semaphore.new(store, 'semaphore', 2)
2312
2439
  a.synchronize do
2313
- a.locked?.should be_true
2440
+ a.locked?.should be true
2314
2441
  b.synchronize do
2315
- b.locked?.should be_true
2316
- c.try_lock.should be_false
2442
+ b.locked?.should be true
2443
+ c.try_lock.should be false
2317
2444
  end
2318
2445
  end
2319
2446
  end
2320
2447
  }
2321
2448
 
2322
2449
  SPECS['create'] = %{it 'creates the given key' do
2323
- store.create('key','value').should be_true
2450
+ store.create('key','value').should be true
2324
2451
  store['key'].should == 'value'
2325
2452
  end
2326
2453
 
2327
2454
  it 'creates raw value with the given key' do
2328
- store.raw.create('key','value').should be_true
2455
+ store.raw.create('key','value').should be true
2329
2456
  store.raw['key'].should == 'value'
2330
2457
  end
2331
2458
 
2332
2459
  it 'does not create a key if it exists' do
2333
2460
  store['key'] = 'value'
2334
- store.create('key','another value').should be_false
2461
+ store.create('key','another value').should be false
2335
2462
  store['key'].should == 'value'
2336
2463
  end
2337
2464
 
2338
2465
  it 'supports Mutex' do
2339
2466
  a = Moneta::Mutex.new(store, 'mutex')
2340
2467
  b = Moneta::Mutex.new(store, 'mutex')
2341
- a.lock.should be_true
2342
- b.try_lock.should be_false
2468
+ a.lock.should be true
2469
+ b.try_lock.should be false
2343
2470
  a.unlock.should be_nil
2344
2471
  end
2345
2472
  }
@@ -2351,19 +2478,19 @@ SPECS['not_create'] = %{it 'does not support #create' do
2351
2478
  end}
2352
2479
 
2353
2480
  SPECS['create_expires'] = %{it 'creates the given key and expires it' do
2354
- store.create('key','value', expires: 1).should be_true
2481
+ store.create('key','value', expires: 1).should be true
2355
2482
  store['key'].should == 'value'
2356
2483
  sleep 2
2357
- store.key?('key').should be_false
2484
+ store.key?('key').should be false
2358
2485
  end
2359
2486
 
2360
2487
  it 'does not change expires if the key exists' do
2361
2488
  store.store('key', 'value', expires: false).should == 'value'
2362
- store.create('key','another value', expires: 1).should be_false
2489
+ store.create('key','another value', expires: 1).should be false
2363
2490
  store['key'].should == 'value'
2364
2491
  sleep 2
2365
2492
  store['key'].should == 'value'
2366
- store.key?('key').should be_true
2493
+ store.key?('key').should be true
2367
2494
  end}
2368
2495
 
2369
2496
  SPECS['marshallable_key'] = %{it 'refuses to #[] from keys that cannot be marshalled' do
@@ -2465,7 +2592,7 @@ SPECS['transform_value_expires'] = %{it 'allows to bypass transformer with :raw
2465
2592
  store['key'] = nil
2466
2593
  load_value(store.load('key', raw: true)).should == [nil]
2467
2594
  store['key'] = false
2468
- load_value(store.load('key', raw: true)).should be_false
2595
+ load_value(store.load('key', raw: true)).should be false
2469
2596
 
2470
2597
  store.store('key', 'value', expires: 10)
2471
2598
  load_value(store.load('key', raw: true)).first.should == 'value'
@@ -2502,14 +2629,14 @@ SPECS['features'] = %{it 'should report correct features' do
2502
2629
  end
2503
2630
 
2504
2631
  it 'should have frozen features' do
2505
- store.features.frozen?.should be_true
2632
+ store.features.frozen?.should be true
2506
2633
  end
2507
2634
 
2508
2635
  it 'should have #supports?' do
2509
2636
  features.each do |f|
2510
- store.supports?(f).should be_true
2637
+ store.supports?(f).should be true
2511
2638
  end
2512
- store.supports?(:unknown).should be_false
2639
+ store.supports?(:unknown).should be false
2513
2640
  end}
2514
2641
 
2515
2642
  specs_code = "#{header}\n"