Class: OmnifocusMcp::Tools::Operations::BatchAddItems

Inherits:
Object
  • Object
show all
Defined in:
lib/omnifocus_mcp/tools/operations/batch_add_items.rb,
lib/omnifocus_mcp/tools/operations/batch_add_items/planner.rb,
lib/omnifocus_mcp/tools/operations/batch_add_items/batch_item.rb,
lib/omnifocus_mcp/tools/operations/batch_add_items/bulk_executor.rb,
lib/omnifocus_mcp/tools/operations/batch_add_items/param_builder.rb,
lib/omnifocus_mcp/tools/operations/batch_add_items/cycle_detector.rb

Defined Under Namespace

Modules: BulkExecutor, ParamBuilder Classes: BatchItem, CycleDetector, Planner

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(add_task:, add_project:, execute_applescript:, bulk_executor:) ⇒ BatchAddItems

Returns a new instance of BatchAddItems.



26
27
28
29
30
31
# File 'lib/omnifocus_mcp/tools/operations/batch_add_items.rb', line 26

def initialize(add_task:, add_project:, execute_applescript:, bulk_executor:)
  @add_task = add_task
  @add_project = add_project
  @execute_applescript = execute_applescript
  @bulk_executor = bulk_executor
end

Class Method Details

.call(items, add_task: Operations::AddOmniFocusTask.method(:call), add_project: Operations::AddProject.method(:call), execute_applescript: Infrastructure::ScriptRunner.method(:execute_applescript), bulk_executor: BulkExecutor) ⇒ Object



18
19
20
21
22
23
# File 'lib/omnifocus_mcp/tools/operations/batch_add_items.rb', line 18

def call(items, add_task: Operations::AddOmniFocusTask.method(:call),
         add_project: Operations::AddProject.method(:call),
         execute_applescript: Infrastructure::ScriptRunner.method(:execute_applescript),
         bulk_executor: BulkExecutor)
  new(add_task:, add_project:, execute_applescript:, bulk_executor:).call(items)
end

Instance Method Details

#call(items) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/omnifocus_mcp/tools/operations/batch_add_items.rb', line 33

def call(items)
  batch_items = Array(items).map { |item| coerce_item(item) }
                            .then { |coerced| build_batch_items(coerced) }
  planner = Planner.new(batch_items).tap(&:prepare!)

  return OmnifocusMcp::Result.ok(batch_items.map(&:result)) if try_bulk_add!(batch_items:)

  process_items(ordered: planner.processing_order, planner:)
  planner.finalize_unresolved!

  OmnifocusMcp::Result.ok(batch_items.map(&:result))
rescue StandardError => e
  OmnifocusMcp.logger.warn("[batch_add_items] Error: #{e}")
  OmnifocusMcp::Result.error(e.message || "Unknown error in batch_add_items")
end