Class: Geminize::FileConversationRepository

Inherits:
ConversationRepository show all
Defined in:
lib/geminize/conversation_repository.rb

Overview

File-based implementation of the ConversationRepository

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(directory = nil) ⇒ FileConversationRepository

Initialize a new file-based repository

Parameters:

  • directory (String) (defaults to: nil)

    The directory to store conversations in



44
45
46
47
# File 'lib/geminize/conversation_repository.rb', line 44

def initialize(directory = nil)
  @storage_dir = directory || File.join(Dir.home, ".geminize", "conversations")
  FileUtils.mkdir_p(@storage_dir) unless Dir.exist?(@storage_dir)
end

Instance Attribute Details

#storage_dirString (readonly)

Returns The directory where conversations are stored.

Returns:

  • (String)

    The directory where conversations are stored



40
41
42
# File 'lib/geminize/conversation_repository.rb', line 40

def storage_dir
  @storage_dir
end

Instance Method Details

#delete(id) ⇒ Boolean

Delete a conversation from disk by ID

Parameters:

  • id (String)

    The ID of the conversation to delete

Returns:

  • (Boolean)

    True if the deletion was successful



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/geminize/conversation_repository.rb', line 82

def delete(id)
  file_path = file_path_for(id)
  return false unless File.exist?(file_path)

  begin
    File.delete(file_path)
    true
  rescue
    false
  end
end

#listArray<Models::Conversation>

List all available conversations

Returns:



96
97
98
99
100
101
102
103
104
105
# File 'lib/geminize/conversation_repository.rb', line 96

def list
  Dir.glob(File.join(@storage_dir, "*.json")).map do |file_path|
    json = File.read(file_path)
    Models::Conversation.from_json(json)
  rescue
    nil # Skip files that can't be parsed
  end.compact.sort_by { |conversation| conversation.updated_at }.reverse
rescue
  []
end

#load(id) ⇒ Models::Conversation?

Load a conversation from disk by ID

Parameters:

  • id (String)

    The ID of the conversation to load

Returns:



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/geminize/conversation_repository.rb', line 67

def load(id)
  file_path = file_path_for(id)
  return nil unless File.exist?(file_path)

  begin
    json = File.read(file_path)
    Models::Conversation.from_json(json)
  rescue
    nil
  end
end

#save(conversation) ⇒ Boolean

Save a conversation to disk

Parameters:

Returns:

  • (Boolean)

    True if the save was successful



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/geminize/conversation_repository.rb', line 52

def save(conversation)
  return false unless conversation

  begin
    file_path = file_path_for(conversation.id)
    File.write(file_path, conversation.to_json)
    true
  rescue
    false
  end
end