Class: Roast::Workflow::SessionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/roast/workflow/session_manager.rb

Overview

Manages session creation, timestamping, and directory management

Instance Method Summary collapse

Constructor Details

#initializeSessionManager

Returns a new instance of SessionManager.



10
11
12
13
# File 'lib/roast/workflow/session_manager.rb', line 10

def initialize
  @session_mutex = Mutex.new
  @session_timestamps = {}
end

Instance Method Details

#create_new_session(workflow_id) ⇒ Object

Create a new session for a workflow



60
61
62
63
64
# File 'lib/roast/workflow/session_manager.rb', line 60

def create_new_session(workflow_id)
  timestamp = Time.now.utc.strftime("%Y%m%d_%H%M%S_%L")
  @session_timestamps[workflow_id] = timestamp
  timestamp
end

#ensure_session_directory(workflow_id, session_name, file_path, timestamp: nil) ⇒ Object

Get or create a session directory for the workflow



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/roast/workflow/session_manager.rb', line 16

def ensure_session_directory(workflow_id, session_name, file_path, timestamp: nil)
  @session_mutex.synchronize do
    # Create or get the workflow directory
    workflow_dir = workflow_directory(session_name, file_path)
    FileUtils.mkdir_p(workflow_dir)

    # Ensure .gitignore exists
    gitignore_path = File.join(workflow_dir, ".gitignore")
    File.write(gitignore_path, "*") unless File.exist?(gitignore_path)

    # Get or create session timestamp
    session_timestamp = timestamp || @session_timestamps[workflow_id] || create_new_session(workflow_id)

    # Create session directory
    session_dir = File.join(workflow_dir, session_timestamp)
    FileUtils.mkdir_p(session_dir)
    session_dir
  end
end

#find_session_directory(session_name, file_path, timestamp = nil) ⇒ Object

Find a session directory for the workflow



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/roast/workflow/session_manager.rb', line 37

def find_session_directory(session_name, file_path, timestamp = nil)
  workflow_dir = workflow_directory(session_name, file_path)
  return unless File.directory?(workflow_dir)

  if timestamp
    session_dir = File.join(workflow_dir, timestamp)
    File.directory?(session_dir) ? session_dir : nil
  else
    find_latest_session_directory(workflow_dir)
  end
end

#session_timestamp(workflow_id) ⇒ Object

Get the session timestamp for a workflow



50
51
52
# File 'lib/roast/workflow/session_manager.rb', line 50

def session_timestamp(workflow_id)
  @session_timestamps[workflow_id]
end

#set_session_timestamp(workflow_id, timestamp) ⇒ Object

Set the session timestamp for a workflow



55
56
57
# File 'lib/roast/workflow/session_manager.rb', line 55

def set_session_timestamp(workflow_id, timestamp)
  @session_timestamps[workflow_id] = timestamp
end