lib/circuitbox/memory_store.rb in circuitbox-2.0.0.pre1 vs lib/circuitbox/memory_store.rb in circuitbox-2.0.0.pre2

- old
+ new

@@ -1,18 +1,19 @@ -# frozen-string-literal: true +# frozen_string_literal: true -require_relative 'memory_store/compactor' +require_relative 'memory_store/monotonic_time' require_relative 'memory_store/container' class Circuitbox class MemoryStore include MonotonicTime def initialize(compaction_frequency: 60) @store = {} @mutex = Mutex.new - @compactor = Compactor.new(store: @store, frequency: compaction_frequency) + @compaction_frequency = compaction_frequency + @compact_after = current_second + compaction_frequency end def store(key, value, opts = {}) @mutex.synchronize do @store[key] = Container.new(value: value, expiry: opts.fetch(:expires, 0)) @@ -51,17 +52,19 @@ end private def fetch_container(key) - @compactor.run + current_time = current_second + compact(current_time) if @compact_after < current_time + container = @store[key] return unless container - if container.expired? + if container.expired_at?(current_time) @store.delete(key) nil else container end @@ -69,8 +72,13 @@ def fetch_value(key) container = fetch_container(key) return unless container container.value + end + + def compact(current_time) + @store.delete_if { |_, value| value.expired_at?(current_time) } + @compact_after = current_time + @compaction_frequency end end end