Class: A2A::Server::Middleware::InMemoryStore

Inherits:
Object
  • Object
show all
Defined in:
lib/a2a/server/middleware/rate_limit_middleware.rb

Overview

In-memory storage for rate limiting

Instance Method Summary collapse

Constructor Details

#initializeInMemoryStore

Returns a new instance of InMemoryStore.



270
271
272
273
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 270

def initialize
  @data = {}
  @mutex = Mutex.new
end

Instance Method Details

#clearObject



322
323
324
325
326
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 322

def clear
  @mutex.synchronize do
    @data.clear
  end
end

#get(key) ⇒ Object



275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 275

def get(key)
  @mutex.synchronize do
    entry = @data[key]
    return nil unless entry

    # Check expiration
    if entry[:expires_at] && Time.now.to_f > entry[:expires_at]
      @data.delete(key)
      return nil
    end

    entry[:value]
  end
end

#get_list(key) ⇒ Object



314
315
316
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 314

def get_list(key)
  get(key)
end

#increment(key, expires_at: nil) ⇒ Object



299
300
301
302
303
304
305
306
307
308
309
310
311
312
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 299

def increment(key, expires_at: nil)
  @mutex.synchronize do
    entry = @data[key] || { value: 0, expires_at: expires_at }

    # Check expiration
    entry = { value: 0, expires_at: expires_at } if entry[:expires_at] && Time.now.to_f > entry[:expires_at]

    entry[:value] += 1
    entry[:expires_at] = expires_at if expires_at
    @data[key] = entry

    entry[:value]
  end
end

#set(key, value, expires_at: nil) ⇒ Object



290
291
292
293
294
295
296
297
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 290

def set(key, value, expires_at: nil)
  @mutex.synchronize do
    @data[key] = {
      value: value,
      expires_at: expires_at
    }
  end
end

#set_list(key, list, expires_at: nil) ⇒ Object



318
319
320
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 318

def set_list(key, list, expires_at: nil)
  set(key, list, expires_at: expires_at)
end

#sizeObject



328
329
330
331
332
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 328

def size
  @mutex.synchronize do
    @data.size
  end
end