Class: WhereIsWaldo::Adapters::BaseAdapter
- Inherits:
-
Object
- Object
- WhereIsWaldo::Adapters::BaseAdapter
- Defined in:
- app/services/where_is_waldo/adapters/base_adapter.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#cleanup(timeout: nil) ⇒ Integer
Remove stale records.
-
#connect(session_id:, subject_id:, metadata: {}) ⇒ Boolean
Register a presence.
-
#disconnect(session_id: nil, subject_id: nil) ⇒ Boolean
Remove a presence.
-
#heartbeat(session_id:, subject_id:, tab_visible: true, subject_active: true, metadata: {}) ⇒ Boolean
Update heartbeat.
-
#online_subject_ids(timeout: nil) ⇒ Array<Integer>
Get all online subject IDs.
-
#session_status(session_id, subject_id) ⇒ Hash?
Get session status.
-
#sessions_for_subject(subject_id) ⇒ Array<Hash>
Get all sessions for a subject.
-
#sessions_for_subjects(subject_ids, timeout: nil) ⇒ Hash{Integer/String => Array<Hash>}
Get live sessions for many subjects in one call, grouped by subject id.
Instance Method Details
#cleanup(timeout: nil) ⇒ Integer
Remove stale records
83 84 85 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 83 def cleanup(timeout: nil) raise NotImplementedError end |
#connect(session_id:, subject_id:, metadata: {}) ⇒ Boolean
Register a presence
11 12 13 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 11 def connect(session_id:, subject_id:, metadata: {}) raise NotImplementedError end |
#disconnect(session_id: nil, subject_id: nil) ⇒ Boolean
Remove a presence. Session-scoped disconnect requires both keys so a caller-supplied session_id can't disconnect another subject's row. Subject-only disconnect removes every session for that subject.
21 22 23 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 21 def disconnect(session_id: nil, subject_id: nil) raise NotImplementedError end |
#heartbeat(session_id:, subject_id:, tab_visible: true, subject_active: true, metadata: {}) ⇒ Boolean
Update heartbeat
34 35 36 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 34 def heartbeat(session_id:, subject_id:, tab_visible: true, subject_active: true, metadata: {}) raise NotImplementedError end |
#online_subject_ids(timeout: nil) ⇒ Array<Integer>
Get all online subject IDs
41 42 43 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 41 def online_subject_ids(timeout: nil) raise NotImplementedError end |
#session_status(session_id, subject_id) ⇒ Hash?
Get session status
76 77 78 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 76 def session_status(session_id, subject_id) raise NotImplementedError end |
#sessions_for_subject(subject_id) ⇒ Array<Hash>
Get all sessions for a subject
48 49 50 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 48 def sessions_for_subject(subject_id) raise NotImplementedError end |
#sessions_for_subjects(subject_ids, timeout: nil) ⇒ Hash{Integer/String => Array<Hash>}
Get live sessions for many subjects in one call, grouped by subject id.
Subjects with no live sessions are omitted from the returned hash.
Adapters should override for efficiency; this default is a correct but
unoptimized fan-out over sessions_for_subject.
60 61 62 63 64 65 66 67 68 69 |
# File 'app/services/where_is_waldo/adapters/base_adapter.rb', line 60 def sessions_for_subjects(subject_ids, timeout: nil) ids = Array(subject_ids).compact.uniq return {} if ids.empty? threshold = Time.current - (timeout || default_timeout) ids.each_with_object({}) do |sid, memo| live = sessions_for_subject(sid).select { |s| s[:last_heartbeat] && s[:last_heartbeat] >= threshold } memo[sid] = live if live.any? end end |