Class: VivlioStarter::CLI::ReviewQueueManager
- Inherits:
-
Object
- Object
- VivlioStarter::CLI::ReviewQueueManager
- Defined in:
- lib/vivlio_starter/cli/index/review_queue_manager.rb
Constant Summary collapse
- QUEUE_FILE =
'config/index_review_queue.yml'- REJECTED_FILE =
'config/index_glossary_rejected.yml'
Instance Method Summary collapse
-
#clear_cache! ⇒ Object
キャッシュをクリア.
-
#clear_terms(term_names) ⇒ Object
指定した用語をキューから削除.
-
#initialize ⇒ ReviewQueueManager
constructor
A new instance of ReviewQueueManager.
-
#list_rejected_terms ⇒ Object
リジェクト済み候補の一覧表示.
-
#load_queue ⇒ Array<Hash>
レビューキューを読み込み.
-
#load_rejected_terms ⇒ Array<String>
リジェクト済み用語名のリストを取得.
-
#load_rejected_terms_with_metadata ⇒ Array<Hash>
リジェクト済み候補(メタデータ付き)を取得.
-
#rejected_count ⇒ Integer
リジェクト済み候補の件数.
-
#reset_rejected! ⇒ Object
リジェクト履歴を全てクリア.
-
#save_queue(candidates) ⇒ Object
レビューキューを保存.
-
#save_rejected_terms(rejected_terms) ⇒ Object
リジェクト済み候補を保存.
-
#unreject_term!(term_or_number) ⇒ Boolean
リジェクト解除.
-
#unreject_term_by_name!(term_name) ⇒ Boolean
用語名でリジェクト解除(内部用).
Constructor Details
#initialize ⇒ ReviewQueueManager
Returns a new instance of ReviewQueueManager.
29 30 31 32 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 29 def initialize @queue_cache = nil @rejected_cache = nil end |
Instance Method Details
#clear_cache! ⇒ Object
キャッシュをクリア
227 228 229 230 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 227 def clear_cache! @queue_cache = nil @rejected_cache = nil end |
#clear_terms(term_names) ⇒ Object
指定した用語をキューから削除
72 73 74 75 76 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 72 def clear_terms(term_names) queue = load_queue remaining = queue.reject { |c| term_names.include?(c['term']) } save_queue(remaining) end |
#list_rejected_terms ⇒ Object
リジェクト済み候補の一覧表示
148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 148 def list_rejected_terms rejected = if rejected.empty? Common.log_info('リジェクト済み候補はありません') return end Common.log_always "\nリジェクト済み候補:" rejected.each_with_index do |term, idx| Common.log_always "#{idx + 1}. #{term['term']} (#{term['yomi']})" end end |
#load_queue ⇒ Array<Hash>
レビューキューを読み込み
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 51 def load_queue return @queue_cache if @queue_cache unless File.exist?(QUEUE_FILE) @queue_cache = [] return @queue_cache end begin data = YAML.load_file(QUEUE_FILE) @queue_cache = data['candidates'] || [] rescue StandardError => e Common.log_warn("#{QUEUE_FILE} の読み込みに失敗しました: #{e.}") @queue_cache = [] end @queue_cache end |
#load_rejected_terms ⇒ Array<String>
リジェクト済み用語名のリストを取得
122 123 124 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 122 def load_rejected_terms .map { |t| t['term'] } end |
#load_rejected_terms_with_metadata ⇒ Array<Hash>
リジェクト済み候補(メタデータ付き)を取得
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 128 def return @rejected_cache if @rejected_cache unless File.exist?(REJECTED_FILE) @rejected_cache = [] return @rejected_cache end begin data = YAML.load_file(REJECTED_FILE) @rejected_cache = data['rejected_terms'] || [] rescue StandardError => e Common.log_warn("#{REJECTED_FILE} の読み込みに失敗しました: #{e.}") @rejected_cache = [] end @rejected_cache end |
#rejected_count ⇒ Integer
リジェクト済み候補の件数
222 223 224 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 222 def rejected_count load_rejected_terms.size end |
#reset_rejected! ⇒ Object
リジェクト履歴を全てクリア
196 197 198 199 200 201 202 203 204 205 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 196 def reset_rejected! unless File.exist?(REJECTED_FILE) Common.log_info('リジェクト済み候補はありません') return end FileUtils.rm_f(REJECTED_FILE) @rejected_cache = nil Common.log_success('リジェクト履歴をクリアしました') end |
#save_queue(candidates) ⇒ Object
レビューキューを保存
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 36 def save_queue(candidates) FileUtils.mkdir_p(File.dirname(QUEUE_FILE)) data = { 'generated_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'), 'pending_count' => candidates.size, 'candidates' => candidates } File.write(QUEUE_FILE, data.to_yaml, encoding: 'utf-8') @queue_cache = candidates end |
#save_rejected_terms(rejected_terms) ⇒ Object
リジェクト済み候補を保存
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 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 80 def save_rejected_terms(rejected_terms) return if rejected_terms.nil? || rejected_terms.empty? FileUtils.mkdir_p(File.dirname(REJECTED_FILE)) # 既存のリジェクト済みリストを読み込み existing = # 新規リジェクトを追加(スコア・文脈も保存) rejected_terms.each do |term| term_name = term['term'] || term[:term] next if term_name.nil? || term_name.empty? next if existing.any? { |t| t['term'] == term_name } entry = { 'term' => term_name, 'yomi' => term['yomi'] || term[:yomi] || term_name, 'rejected_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S') } # スコアがあれば保存 score = term['score'] || term[:score] entry['score'] = score if score # 文脈があれば保存 contexts = term['contexts'] || term[:contexts] entry['contexts'] = contexts if contexts&.any? existing << entry end # 保存 data = { 'rejected_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'), 'rejected_terms' => existing } File.write(REJECTED_FILE, data.to_yaml, encoding: 'utf-8') @rejected_cache = nil # キャッシュをクリア end |
#unreject_term!(term_or_number) ⇒ Boolean
リジェクト解除
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 165 def unreject_term!(term_or_number) rejected = if rejected.empty? Common.log_warn('リジェクト済み候補がありません') return false end # 番号または用語名で検索 target = if term_or_number.match?(/^\d+$/) idx = term_or_number.to_i - 1 idx >= 0 && idx < rejected.size ? rejected[idx] : nil else rejected.find { |t| t['term'] == term_or_number } end unless target Common.log_error("「#{term_or_number}」が見つかりません") return false end # リジェクトリストから削除 rejected.delete(target) save_rejected_terms_data(rejected) Common.log_success("「#{target['term']}」をリジェクトから解除しました") Common.log_info('次回の vs index:auto で再び候補として表示されます') true end |
#unreject_term_by_name!(term_name) ⇒ Boolean
用語名でリジェクト解除(内部用)
210 211 212 213 214 215 216 217 218 |
# File 'lib/vivlio_starter/cli/index/review_queue_manager.rb', line 210 def unreject_term_by_name!(term_name) rejected = target = rejected.find { |t| t['term'] == term_name } return false unless target rejected.delete(target) save_rejected_terms_data(rejected) true end |