legion-cache 1.3.11 → 1.3.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6290bf41f9c5aad922d9ff00e8fe1cac6f6ac5118757ffc1acc55b0aaac05a18
4
- data.tar.gz: da4e9d085dd567bb262a58be3d08cf81de1575ddc9b0a0d7db569dc67d81c923
3
+ metadata.gz: 84f54b95a9a31607080afb2afbad2e85d713cb2d24b0a126dd97cea864d443a6
4
+ data.tar.gz: 0be1410d11a82efb137f050b7236f6e7d8cde91d4d75cf1275c0ccc22fbc1ed7
5
5
  SHA512:
6
- metadata.gz: aba95d900562d5f09c9ff9283e4306c5f66c0e56b66bea60b4720eacaa4744239f6a758dca1061f3e18053ecd9df45b386ad986ba91e228a5ffdb750f32b5068
7
- data.tar.gz: 3a1e54d25d17354b4c3a6ec30e2f977bf36e2d89efd2b16d483e86a4a0cf47ad115497b865706060f5f309941135f028d8331dd05178e54fc616da19b5465b88
6
+ metadata.gz: e581d3e4d49937215c091f309939985b174516a5fa78619e499bc5a2d01e6ac389c438fcf5bdc63d883ca72b08bc082e0926f88ffbc7fbae2578198ca6aad954
7
+ data.tar.gz: a1618ccbad942d1c73bb0f549a6485f2883371b67d9bd3beded87aa58eb71bcdf092579c1d640afa80e3e98567c49e4e5cd6e4cd40f1bc0cf179ee188f219688
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.3.12] - 2026-03-24
4
+
5
+ ### Added
6
+ - `Legion::Cache::Memory` adapter module for lite mode: pure in-memory cache with TTL expiry and thread-safe Mutex synchronization
7
+ - Cache `setup` auto-detects `LEGION_MODE=lite` and activates Memory adapter, skipping Redis/Memcached
8
+ - `@using_memory` flag routes `get`/`set`/`fetch`/`delete`/`flush` through Memory adapter
9
+ - `shutdown` cleanly tears down Memory adapter when active
10
+
3
11
  ## [1.3.11] - 2026-03-22
4
12
 
5
13
  ### Added
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Cache
5
+ module Memory
6
+ extend self
7
+
8
+ @store = {}
9
+ @expiry = {}
10
+ @mutex = Mutex.new
11
+ @connected = false
12
+
13
+ def setup(**)
14
+ @connected = true
15
+ end
16
+
17
+ def client(**) = self
18
+
19
+ def connected?
20
+ @connected
21
+ end
22
+
23
+ def get(key)
24
+ @mutex.synchronize do
25
+ expire_if_needed(key)
26
+ @store[key]
27
+ end
28
+ end
29
+
30
+ def set(key, value, ttl = nil)
31
+ @mutex.synchronize do
32
+ @store[key] = value
33
+ @expiry[key] = Time.now + ttl if ttl&.positive?
34
+ value
35
+ end
36
+ end
37
+
38
+ def fetch(key, ttl = nil)
39
+ val = get(key)
40
+ return val unless val.nil?
41
+
42
+ val = yield if block_given?
43
+ set(key, val, ttl)
44
+ val
45
+ end
46
+
47
+ def delete(key)
48
+ @mutex.synchronize do
49
+ @store.delete(key)
50
+ @expiry.delete(key)
51
+ end
52
+ end
53
+
54
+ def flush(_delay = 0)
55
+ @mutex.synchronize do
56
+ @store.clear
57
+ @expiry.clear
58
+ end
59
+ end
60
+
61
+ def close = nil
62
+
63
+ def shutdown
64
+ flush
65
+ @connected = false
66
+ end
67
+
68
+ def reset!
69
+ @mutex.synchronize do
70
+ @store.clear
71
+ @expiry.clear
72
+ @connected = false
73
+ end
74
+ end
75
+
76
+ def size = 1
77
+ def available = 1
78
+
79
+ private
80
+
81
+ def expire_if_needed(key)
82
+ return unless @expiry.key?(key) && Time.now > @expiry[key]
83
+
84
+ @store.delete(key)
85
+ @expiry.delete(key)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Cache
5
- VERSION = '1.3.11'
5
+ VERSION = '1.3.12'
6
6
  end
7
7
  end
data/lib/legion/cache.rb CHANGED
@@ -6,6 +6,7 @@ require 'legion/cache/cacheable'
6
6
 
7
7
  require 'legion/cache/memcached'
8
8
  require 'legion/cache/redis'
9
+ require 'legion/cache/memory'
9
10
  require 'legion/cache/local'
10
11
  require 'legion/cache/helper'
11
12
 
@@ -21,15 +22,29 @@ module Legion
21
22
  def setup(**)
22
23
  return Legion::Settings[:cache][:connected] = true if connected?
23
24
 
25
+ if ENV['LEGION_MODE'] == 'lite'
26
+ Legion::Cache::Memory.setup
27
+ @using_memory = true
28
+ @connected = true
29
+ Legion::Settings[:cache][:connected] = true
30
+ Legion::Logging.info 'Legion::Cache using in-memory adapter (lite mode)' if defined?(Legion::Logging)
31
+ return
32
+ end
33
+
24
34
  setup_local
25
35
  setup_shared(**)
26
36
  end
27
37
 
28
38
  def shutdown
29
39
  Legion::Logging.info 'Shutting down Legion::Cache'
30
- close unless @using_local
31
- Legion::Cache::Local.shutdown if Legion::Cache::Local.connected?
40
+ if @using_memory
41
+ Legion::Cache::Memory.shutdown
42
+ else
43
+ close unless @using_local
44
+ Legion::Cache::Local.shutdown if Legion::Cache::Local.connected?
45
+ end
32
46
  @using_local = false
47
+ @using_memory = false
33
48
  @connected = false
34
49
  Legion::Settings[:cache][:connected] = false
35
50
  end
@@ -43,30 +58,35 @@ module Legion
43
58
  end
44
59
 
45
60
  def get(key)
61
+ return Legion::Cache::Memory.get(key) if @using_memory
46
62
  return Legion::Cache::Local.get(key) if @using_local
47
63
 
48
64
  super
49
65
  end
50
66
 
51
67
  def set(key, value, ttl = 180)
68
+ return Legion::Cache::Memory.set(key, value, ttl) if @using_memory
52
69
  return Legion::Cache::Local.set(key, value, ttl) if @using_local
53
70
 
54
71
  super
55
72
  end
56
73
 
57
74
  def fetch(key, ttl = nil)
75
+ return Legion::Cache::Memory.fetch(key, ttl) if @using_memory
58
76
  return Legion::Cache::Local.fetch(key, ttl) if @using_local
59
77
 
60
78
  super
61
79
  end
62
80
 
63
81
  def delete(key)
82
+ return Legion::Cache::Memory.delete(key) if @using_memory
64
83
  return Legion::Cache::Local.delete(key) if @using_local
65
84
 
66
85
  super
67
86
  end
68
87
 
69
88
  def flush(delay = 0)
89
+ return Legion::Cache::Memory.flush(delay) if @using_memory
70
90
  return Legion::Cache::Local.flush(delay) if @using_local
71
91
 
72
92
  super
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.11
4
+ version: 1.3.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -104,6 +104,7 @@ files:
104
104
  - lib/legion/cache/helper.rb
105
105
  - lib/legion/cache/local.rb
106
106
  - lib/legion/cache/memcached.rb
107
+ - lib/legion/cache/memory.rb
107
108
  - lib/legion/cache/pool.rb
108
109
  - lib/legion/cache/redis.rb
109
110
  - lib/legion/cache/settings.rb