Class: Kward::RPC::SessionTree

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/rpc/session_tree.rb

Overview

Helper for resolving and selecting persisted session tree entries.

Instance Method Summary collapse

Constructor Details

#initialize(rpc_session) ⇒ SessionTree

Returns a new instance of SessionTree.



9
10
11
# File 'lib/kward/rpc/session_tree.rb', line 9

def initialize(rpc_session)
  @rpc_session = rpc_session
end

Instance Method Details

#active_path_ids(entries, leaf_id) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/kward/rpc/session_tree.rb', line 27

def active_path_ids(entries, leaf_id)
  by_id = entries.to_h { |entry| [entry["id"].to_s, entry] }
  ids = []
  current = by_id[leaf_id.to_s]
  while current
    ids << current["id"].to_s
    current = by_id[current["parentId"].to_s]
  end
  ids
end

#entriesObject



13
14
15
# File 'lib/kward/rpc/session_tree.rb', line 13

def entries
  @rpc_session.store.session_entries(@rpc_session.session.path)
end

#resolve_entry_id(entry_id, entries: self.entries) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/kward/rpc/session_tree.rb', line 17

def resolve_entry_id(entry_id, entries: self.entries)
  id = entry_id.to_s
  return id if entries.any? { |record| record["id"].to_s == id }

  match = id.match(/\Amessage:(\d+)\z/)
  return entries[match[1].to_i]&.dig("id") if match

  id
end

#selectable_entry?(entry) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/kward/rpc/session_tree.rb', line 43

def selectable_entry?(entry)
  !entry["id"].to_s.empty? && ["message", "compaction", "branch_summary"].include?(entry["type"])
end

#user_entry?(entry) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
# File 'lib/kward/rpc/session_tree.rb', line 38

def user_entry?(entry)
  message = entry["message"]
  message.is_a?(Hash) && MessageAccess.role(message) == "user"
end