Class: EventSystem::Storage::MemoryStore

Inherits:
Base
  • Object
show all
Defined in:
lib/event_system/storage/memory_store.rb

Overview

In-memory event storage implementation Perfect for testing, development, or short-lived applications

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#available?, #close

Constructor Details

#initialize(session_id = nil) ⇒ MemoryStore

Initialize a new memory-based event store

Parameters:

  • session_id (String, nil) (defaults to: nil)

    Optional session ID, defaults to timestamp



14
15
16
17
18
# File 'lib/event_system/storage/memory_store.rb', line 14

def initialize(session_id = nil)
  @events = []
  @current_session = session_id || Time.now.strftime("%Y%m%d_%H%M%S")
  @sessions = { @current_session => [] }
end

Instance Attribute Details

#current_sessionString (readonly)

Get the current session ID

Returns:

  • (String)

    Current session ID



86
87
88
# File 'lib/event_system/storage/memory_store.rb', line 86

def current_session
  @current_session
end

Instance Method Details

#clear!void

This method returns an undefined value.

Clear all events from memory



110
111
112
113
114
115
# File 'lib/event_system/storage/memory_store.rb', line 110

def clear!
  @events.clear
  @sessions.clear
  @current_session = Time.now.strftime("%Y%m%d_%H%M%S")
  @sessions[@current_session] = []
end

#create_session(session_id = nil) ⇒ String

Create a new session

Parameters:

  • session_id (String, nil) (defaults to: nil)

    Optional session ID, defaults to timestamp

Returns:

  • (String)

    The new session ID



101
102
103
104
105
106
# File 'lib/event_system/storage/memory_store.rb', line 101

def create_session(session_id = nil)
  session_id ||= Time.now.strftime("%Y%m%d_%H%M%S")
  @sessions[session_id] = []
  @current_session = session_id
  session_id
end

#list_sessionsArray<String>

List available sessions

Returns:

  • (Array<String>)

    List of session IDs



80
81
82
# File 'lib/event_system/storage/memory_store.rb', line 80

def list_sessions
  @sessions.keys.sort
end

#load_session(session_id = nil) ⇒ Array<EventSystem::Event>

Load all events from a session

Parameters:

  • session_id (String, nil) (defaults to: nil)

    Session ID to load, or current session if nil

Returns:



73
74
75
76
# File 'lib/event_system/storage/memory_store.rb', line 73

def load_session(session_id = nil)
  session_id ||= @current_session
  @sessions[session_id] || []
end

#query(options = {}) ⇒ Array<EventSystem::Event>

Query for events based on options

Parameters:

  • options (Hash) (defaults to: {})

    Query options

    • type: [String] Filter by event type

    • start_time: [Time] Filter events after this time

    • end_time: [Time] Filter events before this time

    • session_id: [String] Filter by session ID

    • limit: [Integer] Limit number of results

Returns:



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/event_system/storage/memory_store.rb', line 36

def query(options = {})
  # Use session-specific events by default, or global events if no session specified
  if options[:session_id]
    events = @sessions[options[:session_id]] || []
  else
    # For backward compatibility, use global events when no session specified
    events = @events.dup
  end

  # Filter by type
  if options[:type]
    events = events.select { |e| e.type == options[:type] }
  end

  # Filter by time range
  if options[:start_time]
    events = events.select { |e| e.timestamp >= options[:start_time] }
  end

  if options[:end_time]
    events = events.select { |e| e.timestamp <= options[:end_time] }
  end

  # Sort by timestamp (oldest first)
  events = events.sort_by(&:timestamp)

  # Limit results
  if options[:limit]
    events = events.last(options[:limit])
  end

  events
end

#sizeInteger

Get total number of events stored

Returns:

  • (Integer)

    Total event count



119
120
121
# File 'lib/event_system/storage/memory_store.rb', line 119

def size
  @events.length
end

#statsHash

Get storage statistics

Returns:

  • (Hash)

    Storage statistics



125
126
127
128
129
130
131
# File 'lib/event_system/storage/memory_store.rb', line 125

def stats
  super.merge(
    total_events: @events.length,
    sessions: @sessions.keys.length,
    current_session_events: @sessions[@current_session]&.length || 0
  )
end

#store(event) ⇒ void

This method returns an undefined value.

Store an event in memory

Parameters:



23
24
25
26
# File 'lib/event_system/storage/memory_store.rb', line 23

def store(event)
  @events << event
  @sessions[@current_session] << event
end

#switch_session(session_id) ⇒ void

This method returns an undefined value.

Switch to a different session

Parameters:

  • session_id (String)

    The session ID to switch to



93
94
95
96
# File 'lib/event_system/storage/memory_store.rb', line 93

def switch_session(session_id)
  @current_session = session_id
  @sessions[session_id] ||= []
end