Class: HotwireClub::MCP::Database::DocsRepo
- Inherits:
-
Object
- Object
- HotwireClub::MCP::Database::DocsRepo
- Defined in:
- lib/hotwire_club/mcp/database/repositories/docs_repo.rb
Instance Method Summary collapse
-
#all ⇒ Array
Get all documents.
-
#by_id(id) ⇒ Hash, ...
Get a document by ID.
-
#categories ⇒ Array<String>
Get all unique categories.
-
#list(category: nil, tags: [], limit: 20, offset: 0) ⇒ Array
List documents with optional filters.
-
#related_docs(limit:, doc_id: nil, chunk_id: nil) ⇒ Array
Find related documents based on category and tag overlap.
Instance Method Details
#all ⇒ Array
Get all documents
10 11 12 |
# File 'lib/hotwire_club/mcp/database/repositories/docs_repo.rb', line 10 def all container.relations[:docs].to_a end |
#by_id(id) ⇒ Hash, ...
Get a document by ID
18 19 20 21 22 |
# File 'lib/hotwire_club/mcp/database/repositories/docs_repo.rb', line 18 def by_id(id) return nil if id.nil? || id.empty? container.relations[:docs].where(id: id).one end |
#categories ⇒ Array<String>
Get all unique categories
41 42 43 44 45 46 47 48 |
# File 'lib/hotwire_club/mcp/database/repositories/docs_repo.rb', line 41 def categories container.relations[:docs] .select(:category) .distinct .where { category.not(nil) } .map { |r| r[:category] } .compact end |
#list(category: nil, tags: [], limit: 20, offset: 0) ⇒ Array
List documents with optional filters
31 32 33 34 35 36 |
# File 'lib/hotwire_club/mcp/database/repositories/docs_repo.rb', line 31 def list(category: nil, tags: [], limit: 20, offset: 0) relation = container.relations[:docs] relation = relation.where(category: category) if category relation = (relation, ) if .any? relation.limit(limit).offset(offset).to_a end |
#related_docs(limit:, doc_id: nil, chunk_id: nil) ⇒ Array
Find related documents based on category and tag overlap
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/hotwire_club/mcp/database/repositories/docs_repo.rb', line 56 def (limit:, doc_id: nil, chunk_id: nil) source_doc_id = resolve_source_doc_id(doc_id, chunk_id) return [] unless source_doc_id source_info = get_source_doc_info(source_doc_id) return [] unless source_info matching_doc_ids = find_matching_doc_ids(source_doc_id, source_info[:tags]) return [] if matching_doc_ids.empty? container.relations[:docs] .where(category: source_info[:category]) .where(id: matching_doc_ids) .limit(limit) .to_a end |