Class: Ragdoll::CLI::Keywords
- Inherits:
-
Thor
- Object
- Thor
- Ragdoll::CLI::Keywords
- Defined in:
- lib/ragdoll/cli/commands/keywords.rb
Instance Method Summary collapse
- #add(document_id, *keywords) ⇒ Object
- #find(keyword) ⇒ Object
- #list ⇒ Object
- #remove(document_id, *keywords) ⇒ Object
- #search(*keywords) ⇒ Object
- #set(document_id, *keywords) ⇒ Object
- #show(document_id) ⇒ Object
- #stats ⇒ Object
Instance Method Details
#add(document_id, *keywords) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 110 def add(document_id, *keywords) if keywords.empty? puts 'Error: No keywords provided' puts 'Usage: ragdoll keywords add DOCUMENT_ID KEYWORD [KEYWORD2...]' puts 'Example: ragdoll keywords add 123 ruby programming web' exit 1 end client = StandaloneClient.new begin result = client.add_keywords_to_document(document_id, keywords) if result[:success] puts "✓ Added keywords to document #{document_id}: #{keywords.join(', ')}" puts "Document now has keywords: #{result[:keywords].join(', ')}" if result[:keywords] else puts "✗ Failed to add keywords: #{result[:message] || 'Unknown error'}" exit 1 end rescue StandardError => e puts "Error adding keywords: #{e.message}" exit 1 end end |
#find(keyword) ⇒ Object
219 220 221 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 219 def find(keyword) search(keyword) end |
#list ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 66 def list client = StandaloneClient.new begin keyword_frequencies = client.keyword_frequencies( limit: [:limit], min_count: [:min_count] ) if keyword_frequencies.empty? puts "No keywords found in the system." puts "Add documents with keywords or update existing documents." return end case [:format] when 'json' puts JSON.pretty_generate(keyword_frequencies) when 'plain' keyword_frequencies.each do |keyword, count| puts "#{keyword}: #{count}" end else # Table format puts "Keywords in system (minimum #{options[:min_count]} documents):" puts puts 'Keyword'.ljust(30) + 'Document Count' puts '-' * 45 keyword_frequencies.each do |keyword, count| keyword_display = keyword[0..29].ljust(30) puts "#{keyword_display}#{count}" end puts puts "Total keywords: #{keyword_frequencies.length}" end rescue StandardError => e puts "Error listing keywords: #{e.message}" exit 1 end end |
#remove(document_id, *keywords) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 137 def remove(document_id, *keywords) if keywords.empty? puts 'Error: No keywords provided' puts 'Usage: ragdoll keywords remove DOCUMENT_ID KEYWORD [KEYWORD2...]' puts 'Example: ragdoll keywords remove 123 old-keyword deprecated' exit 1 end client = StandaloneClient.new begin result = client.remove_keywords_from_document(document_id, keywords) if result[:success] puts "✓ Removed keywords from document #{document_id}: #{keywords.join(', ')}" puts "Document now has keywords: #{result[:keywords].join(', ')}" if result[:keywords] else puts "✗ Failed to remove keywords: #{result[:message] || 'Unknown error'}" exit 1 end rescue StandardError => e puts "Error removing keywords: #{e.message}" exit 1 end end |
#search(*keywords) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 16 def search(*keywords) if keywords.empty? puts 'Error: No keywords provided' puts 'Usage: ragdoll keywords search KEYWORD [KEYWORD2...]' puts 'Examples:' puts ' ragdoll keywords search ruby programming' puts ' ragdoll keywords search --all ruby programming # Must contain ALL keywords' puts ' ragdoll keywords search ruby --limit=50' exit 1 end client = StandaloneClient.new puts "Searching documents by keywords: #{keywords.join(', ')}" puts "Mode: #{options[:all] ? 'ALL keywords (AND)' : 'ANY keywords (OR)'}" puts begin # Use the new keywords search methods search_method = [:all] ? :search_by_keywords_all : :search_by_keywords results = client.public_send(search_method, keywords, limit: [:limit]) # Convert results to standard format if needed results = normalize_results(results) if results.empty? puts "No documents found with keywords: #{keywords.join(', ')}" puts puts "💡 Suggestions:" puts " • Try different keywords" puts " • Use fewer keywords" puts " • Switch between --all and default (OR) modes" puts " • Check available keywords with: ragdoll keywords list" return end display_results(results, [:format], keywords) rescue StandardError => e puts "Error searching by keywords: #{e.message}" exit 1 end end |
#set(document_id, *keywords) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 164 def set(document_id, *keywords) if keywords.empty? puts 'Error: No keywords provided' puts 'Usage: ragdoll keywords set DOCUMENT_ID KEYWORD [KEYWORD2...]' puts 'Example: ragdoll keywords set 123 ruby programming web' exit 1 end client = StandaloneClient.new begin result = client.set_document_keywords(document_id, keywords) if result[:success] puts "✓ Set keywords for document #{document_id}: #{keywords.join(', ')}" else puts "✗ Failed to set keywords: #{result[:message] || 'Unknown error'}" exit 1 end rescue StandardError => e puts "Error setting keywords: #{e.message}" exit 1 end end |
#show(document_id) ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 190 def show(document_id) client = StandaloneClient.new begin document = client.get_document(document_id) keywords = document[:keywords] || document['keywords'] || [] puts "Keywords for document #{document_id}:" puts " Title: #{document[:title] || document['title'] || 'Untitled'}" if keywords.empty? puts " Keywords: (none)" puts puts "💡 Add keywords with: ragdoll keywords add #{document_id} KEYWORD1 KEYWORD2..." else puts " Keywords: #{keywords.join(', ')}" end rescue StandardError => e puts "Error getting document keywords: #{e.message}" exit 1 end end |
#stats ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/ragdoll/cli/commands/keywords.rb', line 224 def stats client = StandaloneClient.new begin stats = client.keyword_statistics puts "Keyword Statistics:" puts " Total unique keywords: #{stats[:total_keywords] || 0}" puts " Total documents with keywords: #{stats[:documents_with_keywords] || 0}" puts " Average keywords per document: #{stats[:avg_keywords_per_document]&.round(2) || 0}" puts " Most common keywords:" if stats[:top_keywords]&.any? stats[:top_keywords].each_with_index do |(keyword, count), index| puts " #{index + 1}. #{keyword} (#{count} documents)" end else puts " (none)" end puts " Least used keywords: #{stats[:singleton_keywords] || 0}" rescue StandardError => e puts "Error getting keyword statistics: #{e.message}" exit 1 end end |