Module: OmnifocusMcp::Tools::Presenters::BatchReport

Defined in:
lib/omnifocus_mcp/tools/presenters/batch_report.rb

Overview

Shared formatting for batch add/remove tool replies.

Class Method Summary collapse

Class Method Details

.add_detail(result, original) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/omnifocus_mcp/tools/presenters/batch_report.rb', line 32

def add_detail(result, original)
  item_type = original.type
  item_name = original.name
  if result.ok?
    %(- ✅ #{item_type}: "#{item_name}")
  else
    %(- ❌ #{item_type}: "#{item_name}" - Error: #{result.error || "Unknown error"})
  end
end

.all_failed?(results) ⇒ Boolean

True when every per-item result failed (and at least one item was processed).

Returns:

  • (Boolean)


21
# File 'lib/omnifocus_mcp/tools/presenters/batch_report.rb', line 21

def all_failed?(results) = results.any? && results.all?(&:error?)

.format_failure(error_message, results: [], items: [], &detail) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/omnifocus_mcp/tools/presenters/batch_report.rb', line 23

def format_failure(error_message, results: [], items: [], &detail)
  if results.any?
    lines = results.each_with_index.map { |r, i| yield(r, items[i]) }
    "Failed to process batch operation.\n\n#{lines.join("\n")}"
  else
    "Failed to process batch operation.\n\nNo items processed. #{error_message || ""}"
  end
end

.format_success(past_tense:, failure_verb:, results:, items:, &detail) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/omnifocus_mcp/tools/presenters/batch_report.rb', line 9

def format_success(past_tense:, failure_verb:, results:, items:, &detail)
  success_count = results.count(&:ok?)
  failure_count = results.count(&:error?)

  message = "✅ Successfully #{past_tense} #{success_count} items."
  message += " ⚠️ Failed to #{failure_verb} #{failure_count} items." if failure_count.positive?

  lines = results.each_with_index.map { |r, i| yield(r, items[i]) }
  "#{message}\n\n#{lines.join("\n")}"
end

.remove_detail(result, original) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/omnifocus_mcp/tools/presenters/batch_report.rb', line 42

def remove_detail(result, original)
  item_type = original.item_type
  if result.ok?
    %(- ✅ #{item_type}: "#{result.ok.name}")
  else
    identifier = original.id || original.name
    "- ❌ #{item_type}: #{identifier} - Error: #{result.error}"
  end
end