any_cache 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffa4d18aa6e7fdabf6cbb94da73a58c5daf2ced4aa74b28a7f16a73ed24cfc3e
4
- data.tar.gz: 3a275c65d65426dfa41ba0fc00ac9b9de2da3684427e6ead5de9586021bcd574
3
+ metadata.gz: 90ca0569d3cc57ab74792f1ba11226b508a7d465c3c7f8a669e46d4a64501fbf
4
+ data.tar.gz: 877f5ec51869e4788a99e2d416a9d818cf53427710e3249b8619304a89e2515f
5
5
  SHA512:
6
- metadata.gz: 01e02bdaa716816ff2be016843337c1968a865b99ac98418ae2b7fa6bc5d7e32b9be986e48ffcd417b65fd6e88dc635b2087d14ee12b057c7e7b1cddf8e7706f
7
- data.tar.gz: cf62adafcbf850fd47147e6b35f2dd9fc8adaf34735bebed6a66b86bb89bbc0d76d035774dfae885a708c5ef542684fea13891d06d7e93d2fb8e50d002d9c488
6
+ metadata.gz: 04a47243ee066a715bb1d6b5116d936168e84f35bf95cf38625a790d652c7a0f613e158d8134f261a1adcda4af765d072adac84ce08cf3a57f6b61b0efa60702
7
+ data.tar.gz: 7cff2361d74b63a00384a1d250d7ba60175c1cd3bc31fa7cf216eadf7d8e332b360bdc41ef5d6ab5af1a2d0c0d020a1b8410f0fdf48fbf729fe4ad8627130b9e
data/.rubocop.yml CHANGED
@@ -5,7 +5,7 @@ inherit_gem:
5
5
 
6
6
  AllCops:
7
7
  UseCache: true
8
- TargetRubyVersion: 2.5.1
8
+ TargetRubyVersion: 2.5.3
9
9
  Include:
10
10
  - bin/console
11
11
  - lib/**/*.rb
data/.travis.yml CHANGED
@@ -10,97 +10,97 @@ services:
10
10
  matrix:
11
11
  fast_finish: true
12
12
  include:
13
- - rvm: 2.3.7
13
+ - rvm: 2.3.8
14
14
  gemfile: gemfiles/active_support.gemfile
15
15
  env: TEST_AS_MEMORY_STORE_CACHE=true
16
- - rvm: 2.4.4
16
+ - rvm: 2.4.5
17
17
  gemfile: gemfiles/active_support.gemfile
18
18
  env: TEST_AS_MEMORY_STORE_CACHE=true
19
- - rvm: 2.5.1
19
+ - rvm: 2.5.3
20
20
  gemfile: gemfiles/active_support.gemfile
21
21
  env: TEST_AS_MEMORY_STORE_CACHE=true
22
22
  - rvm: ruby-head
23
23
  gemfile: gemfiles/active_support.gemfile
24
24
  env: TEST_AS_MEMORY_STORE_CACHE=true
25
- - rvm: 2.3.7
25
+ - rvm: 2.3.8
26
26
  gemfile: gemfiles/active_support.gemfile
27
27
  env: TEST_AS_FILE_STORE_CACHE=true
28
- - rvm: 2.4.4
28
+ - rvm: 2.4.5
29
29
  gemfile: gemfiles/active_support.gemfile
30
30
  env: TEST_AS_FILE_STORE_CACHE=true
31
- - rvm: 2.5.1
31
+ - rvm: 2.5.3
32
32
  gemfile: gemfiles/active_support.gemfile
33
33
  env: TEST_AS_FILE_STORE_CACHE=true
34
34
  - rvm: ruby-head
35
35
  gemfile: gemfiles/active_support.gemfile
36
36
  env: TEST_AS_FILE_STORE_CACHE=true
37
- - rvm: 2.3.7
37
+ - rvm: 2.3.8
38
38
  gemfile: gemfiles/active_support_with_redis.gemfile
39
39
  env: TEST_AS_REDIS_CACHE_STORE_CACHE=true
40
- - rvm: 2.4.4
40
+ - rvm: 2.4.5
41
41
  gemfile: gemfiles/active_support_with_redis.gemfile
42
42
  env: TEST_AS_REDIS_CACHE_STORE_CACHE=true
43
- - rvm: 2.5.1
43
+ - rvm: 2.5.3
44
44
  gemfile: gemfiles/active_support_with_redis.gemfile
45
45
  env: TEST_AS_REDIS_CACHE_STORE_CACHE=true
46
46
  - rvm: ruby-head
47
47
  gemfile: gemfiles/active_support_with_redis.gemfile
48
48
  env: TEST_AS_REDIS_CACHE_STORE_CACHE=true
49
- - rvm: 2.3.7
49
+ - rvm: 2.3.8
50
50
  gemfile: gemfiles/dalli.gemfile
51
51
  env: TEST_DALLI_CACHE=true
52
- - rvm: 2.4.4
52
+ - rvm: 2.4.5
53
53
  gemfile: gemfiles/dalli.gemfile
54
54
  env: TEST_DALLI_CACHE=true
55
- - rvm: 2.5.1
55
+ - rvm: 2.5.3
56
56
  gemfile: gemfiles/dalli.gemfile
57
57
  env: TEST_DALLI_CACHE=true
58
58
  - rvm: ruby-head
59
59
  gemfile: gemfiles/dalli.gemfile
60
60
  env: TEST_DALLI_CACHE=true
61
- - rvm: 2.3.7
61
+ - rvm: 2.3.8
62
62
  gemfile: gemfiles/redis_store.gemfile
63
63
  env: TEST_REDIS_STORE_CACHE=true
64
- - rvm: 2.4.4
64
+ - rvm: 2.4.5
65
65
  gemfile: gemfiles/redis_store.gemfile
66
66
  env: TEST_REDIS_STORE_CACHE=true
67
- - rvm: 2.5.1
67
+ - rvm: 2.5.3
68
68
  gemfile: gemfiles/redis_store.gemfile
69
69
  env: TEST_REDIS_STORE_CACHE=true
70
70
  - rvm: ruby-head
71
71
  gemfile: gemfiles/redis_store.gemfile
72
72
  env: TEST_REDIS_STORE_CACHE=true
73
- - rvm: 2.3.7
73
+ - rvm: 2.3.8
74
74
  gemfile: gemfiles/active_support_with_dalli.gemfile
75
75
  env: TEST_AS_DALLI_STORE=true
76
- - rvm: 2.4.4
76
+ - rvm: 2.4.5
77
77
  gemfile: gemfiles/active_support_with_dalli.gemfile
78
78
  env: TEST_AS_DALLI_STORE=true
79
- - rvm: 2.5.1
79
+ - rvm: 2.5.3
80
80
  gemfile: gemfiles/active_support_with_dalli.gemfile
81
81
  env: TEST_AS_DALLI_STORE=true
82
82
  - rvm: ruby-head
83
83
  gemfile: gemfiles/active_support_with_dalli.gemfile
84
84
  env: TEST_AS_DALLI_STORE=true
85
- - rvm: 2.3.7
85
+ - rvm: 2.3.8
86
86
  gemfile: gemfiles/redis_store.gemfile
87
87
  env: TEST_REDIS_CACHE=true
88
- - rvm: 2.4.4
88
+ - rvm: 2.4.5
89
89
  gemfile: gemfiles/redis_store.gemfile
90
90
  env: TEST_REDIS_CACHE=true
91
- - rvm: 2.5.1
91
+ - rvm: 2.5.3
92
92
  gemfile: gemfiles/redis_store.gemfile
93
93
  env: TEST_REDIS_CACHE=true
94
94
  - rvm: ruby-head
95
95
  gemfile: gemfiles/redis_store.gemfile
96
96
  env: TEST_REDIS_CACHE=true
97
- - rvm: 2.3.7
97
+ - rvm: 2.3.8
98
98
  gemfile: gemfiles/active_support_with_dalli.gemfile
99
99
  env: TEST_AS_MEM_CACHE_STORE_CACHE=true
100
- - rvm: 2.4.4
100
+ - rvm: 2.4.5
101
101
  gemfile: gemfiles/active_support_with_dalli.gemfile
102
102
  env: TEST_AS_MEM_CACHE_STORE_CACHE=true
103
- - rvm: 2.5.1
103
+ - rvm: 2.5.3
104
104
  gemfile: gemfiles/active_support_with_dalli.gemfile
105
105
  env: TEST_AS_MEM_CACHE_STORE_CACHE=true
106
106
  - rvm: ruby-head
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.4.0] - 2018-12-04
5
+ - `AnyCache#cleanup` - remove expired entries manually
6
+ (make sence only for `:as_file_store` and `:as_memory_store` at this moment);
7
+ - automatic object marshaling (used in `fetch`, `fetch_multi`, `write`, `write_multi`, `read`, `read_multi`):
8
+ - used by default (`raw: false`);
9
+ - can be disabled via `raw: true` option;
10
+ - `raw: true` is required for incrementable/decrementable entries;
11
+
4
12
  ## [0.3.1] - 2018-10-08
5
13
  ### Added
6
14
  - patch interface `AnyCache.enable_patch!(:patch_series_name)`:
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # AnyCache · [![Gem Version](https://badge.fury.io/rb/any_cache.svg)](https://badge.fury.io/rb/any_cache) [![Build Status](https://travis-ci.org/0exp/any_cache.svg?branch=master)](https://travis-ci.org/0exp/any_cache) [![Coverage Status](https://coveralls.io/repos/github/0exp/any_cache/badge.svg?branch=master)](https://coveralls.io/github/0exp/any_cache?branch=master)
2
2
 
3
3
  AnyCache - a simplest cache wrapper that provides a minimalistic generic interface for all well-known cache storages and includes a minimal set of necessary operations:
4
- `fetch`, `read`, `write`, `delete`, `fetch_multi`, `read_multi`, `write_multi`, `delete_matched`, `expire`, `persist`, `exist?`, `clear`, `increment`, `decrement`.
4
+ `fetch`, `read`, `write`, `delete`, `fetch_multi`, `read_multi`, `write_multi`, `delete_matched`, `expire`, `persist`, `exist?`, `clear`, `cleanup`, `increment`, `decrement`.
5
5
 
6
6
  Supported clients:
7
7
 
@@ -60,6 +60,7 @@ require 'any_cache'
60
60
  - [Persist](#persist)
61
61
  - [Existence](#existence)
62
62
  - [Clear](#clear)
63
+ - [Cleanup](#cleanup)
63
64
  - [Roadmap](#roadmap)
64
65
 
65
66
  ---
@@ -196,7 +197,7 @@ require 'dalli'
196
197
  require 'active_support'
197
198
  require 'any_cache'
198
199
 
199
- AnyCache.enable_patch!(:dalli_store)
200
+ AnyCache.enable_patch!(:dalli_store) # NOTE: actual for Dalli <= 2.7.8
200
201
 
201
202
  AnyCache.configure do |conf|
202
203
  conf.driver = :as_dalli_store
@@ -290,6 +291,7 @@ If you want to use your own cache client implementation, you should provide an o
290
291
  - `#persist(key, [**options])` ([doc](#persist))
291
292
  - `#exist?(key, [**options])` ([doc](#existence))
292
293
  - `#clear([**options])` ([doc](#clear))
294
+ - `#cleanup([**options])` ([doc](#cleanup))
293
295
 
294
296
  ```ruby
295
297
  class MyCacheClient
@@ -351,10 +353,10 @@ params: INSPECTED_ARGUMENTS and options: INSPECTED_OPTIONS
351
353
 
352
354
  ```ruby
353
355
  any_cache.write("data", 123, expires_in: 60)
354
- # I, [2018-09-07T10:04:56.649960 #15761] INFO -- [AnyCache<AnyCache>/Activity<write>]: performed <write> operation with params: ["data", 123] and options: {:expires_in=>60}.
356
+ # I, [2018-09-07T10:04:56.649960 #15761] INFO -- [AnyCache<AnyCache>/Activity<write>]: performed <write> operation with attributes: ["data", 123] and options: {:expires_in=>60}.
355
357
 
356
358
  any_cache.clear
357
- # I, [2018-09-07T10:05:26.999847 #15761] INFO -- [AnyCache<AnyCache>/Activity<clear>]: performed <clear> operation with params: [] and options: {}.
359
+ # I, [2018-09-07T10:05:26.999847 #15761] INFO -- [AnyCache<AnyCache>/Activity<clear>]: performed <clear> operation with attributes: [] and options: {}.
358
360
  ```
359
361
 
360
362
  ## Operations
@@ -380,6 +382,7 @@ any_cache.clear
380
382
  - fetches data from the cache using the given key;
381
383
  - if a `fallback` block has been passed and data with the given key does not exist - that block
382
384
  will be called with the given key and the return value will be written to the cache;
385
+ - use `raw: true` if you want to fetch incrementable/decrementable entry;
383
386
 
384
387
  ```ruby
385
388
  # --- entry exists ---
@@ -414,6 +417,7 @@ cache_store.fetch("data") # => nil
414
417
  - get a set of entries in hash form from the cache storage using given keys;
415
418
  - works in `#fetch` manner but with a series of entries;
416
419
  - nonexistent entries will be fetched with `nil` values;
420
+ - use `raw: true` if you want to fetch incrementable/decrementable entries;
417
421
 
418
422
  ```ruby
419
423
  # --- fetch entries ---
@@ -449,6 +453,7 @@ cache_store.fetch_multi("data", "second_data", "last_data", force: true) { |key|
449
453
  ### Read
450
454
 
451
455
  - `AnyCache#read(key)` - get an entry value from the cache storage
456
+ - pass `raw: true` if you want to read incrementable/decrementable entries;
452
457
 
453
458
  ```ruby
454
459
  # --- entry exists ---
@@ -456,6 +461,9 @@ cache_store.read("data") # => "some_data"
456
461
 
457
462
  # --- entry doesnt exist ---
458
463
  cache_store.read("data") # => nil
464
+
465
+ # --- read incrementable/decrementable entry ---
466
+ cache_store.read("data", raw: true) # => "2" (for example)
459
467
  ```
460
468
 
461
469
  ---
@@ -465,6 +473,7 @@ cache_store.read("data") # => nil
465
473
  - `AnyCache#read_multi(*keys)`
466
474
  - get entries from the cache storage in hash form;
467
475
  - nonexistent entries will be fetched with `nil` values;
476
+ - pass `raw: true` if you want to read incrementable/decrementable entries;
468
477
 
469
478
  ```ruby
470
479
  cache_store.read_multi("data", "another_data", "last_data", "super_data")
@@ -475,13 +484,22 @@ cache_store.read_multi("data", "another_data", "last_data", "super_data")
475
484
  "last_data" => "some_data", # exisitng enry
476
485
  "super_data" => nil # existing entry
477
486
  }
487
+
488
+ # --- read incrementable/decrementable entries ---
489
+ cache_store.read_multi("data", "another_data", raw: true)
490
+ # => returns
491
+ {
492
+ "data" => "1",
493
+ "another_data" => "2",
494
+ }
478
495
  ```
479
496
 
480
497
  ---
481
498
 
482
499
  ### Write
483
500
 
484
- - `AnyCache#write(key, value, [expires_in:])` - write a new entry to the cache storage
501
+ - `AnyCache#write(key, value, [expires_in:])` - write a new entry to the cache storage;
502
+ - pass `raw: true` if you want to store incrementable/decrementable entries;
485
503
 
486
504
  ```ruby
487
505
  # --- permanent entry ---
@@ -489,23 +507,30 @@ cache_store.write("data", 123)
489
507
 
490
508
  # --- temporal entry (expires in 60 seconds) ---
491
509
  cache_store.write("data", 123, expires_in: 60)
510
+
511
+ # --- incrementable/decrementable entry ---
512
+ cache_store.write("data", 123, raw: true)
492
513
  ```
493
514
 
494
515
  ---
495
516
 
496
517
  ### Write Multi
497
518
 
498
- - `AnyCache#write_multi(**entries)` - write a set of permanent entries to the cache storage
519
+ - `AnyCache#write_multi(**entries)` - write a set of permanent entries to the cache storage;
520
+ - pass `raw: true` if you want to store incrementable/decrementable entries;
499
521
 
500
522
  ```ruby
501
523
  cache_store.write_multi("data" => "test", "another_data" => 123)
524
+
525
+ # --- incrementable/decrementable entries ---
526
+ cache_store.write_multi("data" => 1, "another_data" => 2, raw: true)
502
527
  ```
503
528
 
504
529
  ---
505
530
 
506
531
  ### Delete
507
532
 
508
- - `AnyCache#delete(key)` - remove entry from the cache storage
533
+ - `AnyCache#delete(key)` - remove entry from the cache storage;
509
534
 
510
535
  ```ruby
511
536
  cache_store.delete("data")
@@ -517,7 +542,7 @@ cache_store.delete("data")
517
542
 
518
543
  - `AnyCache#delete_matched(pattern)`
519
544
  - removes all entries with keys matching the pattern;
520
- - currently unsupported: `:dalli`, `:as_mem_cache_store`, `:as_dalli_Store`;
545
+ - currently unsupported: `:dalli`, `:as_mem_cache_store`, `:as_dalli_store`;
521
546
 
522
547
  ```ruby
523
548
  # --- using a regepx ---
@@ -532,11 +557,12 @@ cache_store.delete_matched("data")
532
557
  ### Increment
533
558
 
534
559
  - `AnyCache#increment(key, amount = 1, [expires_in:])` - increment entry's value by the given amount
535
- and set the new expiration time if needed
560
+ and set the new expiration time if needed;
561
+ - can increment only nonexistent entries OR entries that were written with `raw: true` option;
536
562
 
537
563
  ```ruby
538
564
  # --- increment existing entry ---
539
- cache_store.write("data", 1)
565
+ cache_store.write("data", 1, raw: true) # you must provide :raw => true for incrementable entries
540
566
 
541
567
  # --- increment by default value (1) ---
542
568
  cache_store.increment("data") # => 2
@@ -549,6 +575,9 @@ cache_store.incrmeent("data", expires_in: 31) # => 15
549
575
 
550
576
  # --- increment nonexistent entry (create new entry) ---
551
577
  cache_store.increment("another_data", 5, expires_in: 5) # => 5
578
+
579
+ # --- read incrementable entry ---
580
+ cache_store.read("data", raw: true) # you must provide :raw => true for incrementable entries
552
581
  ```
553
582
 
554
583
  ---
@@ -556,11 +585,12 @@ cache_store.increment("another_data", 5, expires_in: 5) # => 5
556
585
  ### Decrement
557
586
 
558
587
  - `AnyCache#decrement(key, amount = 1, [expires_in:])` - decrement entry's value by the given amount
559
- and set the new expiration time if needed
588
+ and set the new expiration time if needed;
589
+ - can decrement only nonexistent entries OR entries that were written with `raw: true` option;
560
590
 
561
591
  ```ruby
562
592
  # --- decrement existing entry ---
563
- cache_store.write("data", 15)
593
+ cache_store.write("data", 15, raw: true) # you must provide :raw => true for decrementable entries
564
594
 
565
595
  # --- decrement by default value (1) ---
566
596
  cache_store.decrement("data") # => 14
@@ -573,13 +603,16 @@ cache_store.decrememnt("data", expirs_in: 5) # => 3
573
603
 
574
604
  # --- decrement nonexistent entry (create new entry) ---
575
605
  cache_store.decrememnt("another_data", 2, expires_in: 10) # => -2 (or 0 for Dalli::Client)
606
+
607
+ # --- read decrementable entry ---
608
+ cache_store.read("data", raw: true) # you must provide :raw => true for decrementable entries
576
609
  ```
577
610
 
578
611
  ---
579
612
 
580
613
  ### Expire
581
614
 
582
- - `AnyCache#expire(key, [expires_in:])` - expire entry immediately or set the new expiration time
615
+ - `AnyCache#expire(key, [expires_in:])` - expire entry immediately or set the new expiration time;
583
616
 
584
617
  ```ruby
585
618
  # --- expire immediately ---
@@ -593,7 +626,7 @@ cache_store.expire("data", expires_in: 36)
593
626
 
594
627
  ### Persist
595
628
 
596
- - `AnyCache#persist(key)` - change entry's expiration time to permanent
629
+ - `AnyCache#persist(key)` - change entry's expiration time to permanent;
597
630
 
598
631
  ```ruby
599
632
  # --- create temporal entry (30 seconds) ---
@@ -607,7 +640,7 @@ cache_store.persist("data")
607
640
 
608
641
  ### Existence
609
642
 
610
- - `AnyCache#exist?(key)` - determine if an entry exists
643
+ - `AnyCache#exist?(key)` - determine if an entry exists;
611
644
 
612
645
  ```ruby
613
646
  # --- entry exists ---
@@ -621,7 +654,7 @@ cache_store.exist?("another-data") # => false
621
654
 
622
655
  ### Clear
623
656
 
624
- - `AnyCache#clear()` - clear cache database
657
+ - `AnyCache#clear()` - clear cache database;
625
658
 
626
659
  ```ruby
627
660
  # --- prepare cache data ---
@@ -640,6 +673,22 @@ cache_store.read("another_data") # => nil
640
673
 
641
674
  ---
642
675
 
676
+ ### Cleanup
677
+
678
+ - `AnyCache#cleanup()` - remove expired entries from cache database
679
+ (make sense only for `:as_file_store` and `:as_memory_store` cache clients);
680
+
681
+ ```ruby
682
+ # --- prepare cache data ---
683
+ cache_store.write("data", "123", expires_in: 5)
684
+ cache_store.write("another_data", "456", expires_in: 10)
685
+
686
+ # --- waiting for cache exiration (10 seconds) ---
687
+ cache_store.cleanup # remove expired entries from database (release disk space for example)
688
+ ```
689
+
690
+ ---
691
+
643
692
  ## Build
644
693
 
645
694
  - see [bin/rspec](bin/rspec)
@@ -662,6 +711,7 @@ bin/rspec --test-as-memory-store # run specs with ActiveSupport::Cache::MemorySt
662
711
  - instrumentation layer;
663
712
  - global and configurable default expiration time;
664
713
  - `#delete_matched` for memcached-based cache storages;
714
+ - rails integration;
665
715
 
666
716
  ---
667
717
 
data/any_cache.gemspec CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'any_cache/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.required_ruby_version = '>= 2.3.7'
8
+ spec.required_ruby_version = '>= 2.3.8'
9
9
 
10
10
  spec.name = 'any_cache'
11
11
  spec.version = AnyCache::VERSION
@@ -28,11 +28,11 @@ Gem::Specification.new do |spec|
28
28
  end
29
29
 
30
30
  spec.add_dependency 'concurrent-ruby', '~> 1.0'
31
- spec.add_dependency 'qonfig', '~> 0.6'
31
+ spec.add_dependency 'qonfig', '~> 0.8'
32
32
 
33
33
  spec.add_development_dependency 'coveralls', '~> 0.8'
34
34
  spec.add_development_dependency 'simplecov', '~> 0.16'
35
- spec.add_development_dependency 'armitage-rubocop', '~> 0.9'
35
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.13'
36
36
  spec.add_development_dependency 'rspec', '~> 3.8'
37
37
 
38
38
  spec.add_development_dependency 'bundler'
data/bin/rspec CHANGED
@@ -56,7 +56,7 @@ module AnyCacheSpecRunner
56
56
  ) { run_as_memory_store_cache_specs! }
57
57
 
58
58
  opts.on(
59
- '--test-as-mem-cache-store',
59
+ '--test-as-memcache-store',
60
60
  'Run specs with ActiveSupport::Cache::MemCacheStore cache storage'
61
61
  ) { run_as_mem_cache_store_cache_specs! }
62
62