Class: Vivlio::Starter::CLI::ReviewQueueManager
- Inherits:
-
Object
- Object
- Vivlio::Starter::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.
30 31 32 33 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 30 def initialize @queue_cache = nil @rejected_cache = nil end |
Instance Method Details
#clear_cache! ⇒ Object
キャッシュをクリア
228 229 230 231 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 228 def clear_cache! @queue_cache = nil @rejected_cache = nil end |
#clear_terms(term_names) ⇒ Object
指定した用語をキューから削除
73 74 75 76 77 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 73 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
リジェクト済み候補の一覧表示
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 149 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>
レビューキューを読み込み
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 52 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>
リジェクト済み用語名のリストを取得
123 124 125 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 123 def load_rejected_terms .map { |t| t['term'] } end |
#load_rejected_terms_with_metadata ⇒ Array<Hash>
リジェクト済み候補(メタデータ付き)を取得
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 129 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
リジェクト済み候補の件数
223 224 225 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 223 def rejected_count load_rejected_terms.size end |
#reset_rejected! ⇒ Object
リジェクト履歴を全てクリア
197 198 199 200 201 202 203 204 205 206 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 197 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
レビューキューを保存
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 37 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
リジェクト済み候補を保存
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 119 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 81 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
リジェクト解除
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 194 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 166 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
用語名でリジェクト解除(内部用)
211 212 213 214 215 216 217 218 219 |
# File 'lib/vivlio/starter/cli/index/review_queue_manager.rb', line 211 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 |