Class: OmnifocusMcp::Tools::Operations::QueryOmnifocus

Inherits:
Object
  • Object
show all
Defined in:
lib/omnifocus_mcp/tools/operations/query_omnifocus.rb

Defined Under Namespace

Classes: Match

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(script_runner: Infrastructure::ScriptRunner, generator: Generators::QueryOmnifocus) ⇒ QueryOmnifocus

Returns a new instance of QueryOmnifocus.



33
34
35
36
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 33

def initialize(script_runner: Infrastructure::ScriptRunner, generator: Generators::QueryOmnifocus)
  @script_runner = script_runner
  @generator = generator
end

Class Method Details

.build_matchObject



20
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 20

def build_match(...) = new.build_match(...)

.call(params = nil, script_runner: Infrastructure::ScriptRunner, **kwargs) ⇒ Object



15
16
17
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 15

def call(params = nil, script_runner: Infrastructure::ScriptRunner, **kwargs)
  merge_params(params, kwargs).then { new(script_runner:).call(it) }
end

.classify_responseObject



19
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 19

def classify_response(...) = new.classify_response(...)

.generate_query_scriptObject



21
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 21

def generate_query_script(...) = Generators::QueryOmnifocus.generate_query_script(...)

Instance Method Details

#build_match(items:, count:, summary:) ⇒ Object



66
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 66

def build_match(items:, count:, summary:) = Match.new(items: summary ? nil : items, count: count)

#call(params) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 38

def call(params)
  params = Params::McpBoundary.coerce(Params::QueryOmnifocusParams, params)
  generator.generate_query_script(params).then do |script|
    script_runner.execute_omnifocus_source(script)
                 .and_then { |response| classify_response(response:, summary: params.summary == true) }
  end
rescue StandardError => e
  OmnifocusMcp.logger.warn("[query_omnifocus] Error: #{e}")
  OmnifocusMcp::Result.error(e.message || "Unknown error occurred")
end

#classify_response(response:, summary:) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/omnifocus_mcp/tools/operations/query_omnifocus.rb', line 49

def classify_response(response:, summary:)
  shape = response.is_a?(Hash) ? response.transform_keys(&:to_sym) : nil

  case shape
  in { error: String => msg }
    OmnifocusMcp::Result.error(msg)
  in { items: Array => items, count: Integer => count }
    OmnifocusMcp::Result.ok(build_match(items:, count:, summary: summary))
  in { count: Integer => count }
    OmnifocusMcp::Result.ok(Match.new(items: nil, count: count))
  in Hash
    OmnifocusMcp::Result.ok(Match.new(items: nil, count: nil))
  in nil
    OmnifocusMcp::Result.error("Unexpected response from queryOmnifocus: #{response.inspect}")
  end
end