Class: Geminize::FileConversationRepository
- Inherits:
-
ConversationRepository
- Object
- ConversationRepository
- Geminize::FileConversationRepository
- Defined in:
- lib/geminize/conversation_repository.rb
Overview
File-based implementation of the ConversationRepository
Instance Attribute Summary collapse
-
#storage_dir ⇒ String
readonly
The directory where conversations are stored.
Instance Method Summary collapse
-
#delete(id) ⇒ Boolean
Delete a conversation from disk by ID.
-
#initialize(directory = nil) ⇒ FileConversationRepository
constructor
Initialize a new file-based repository.
-
#list ⇒ Array<Models::Conversation>
List all available conversations.
-
#load(id) ⇒ Models::Conversation?
Load a conversation from disk by ID.
-
#save(conversation) ⇒ Boolean
Save a conversation to disk.
Constructor Details
#initialize(directory = nil) ⇒ FileConversationRepository
Initialize a new file-based repository
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_dir ⇒ String (readonly)
Returns 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
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 |
#list ⇒ Array<Models::Conversation>
List all available conversations
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
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
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 |