Class: OmnifocusMcp::Tools::Operations::GetPerspectiveView
- Inherits:
-
Object
- Object
- OmnifocusMcp::Tools::Operations::GetPerspectiveView
- Defined in:
- lib/omnifocus_mcp/tools/operations/get_perspective_view.rb
Constant Summary collapse
- DEFAULT_LIMIT =
100
Class Method Summary collapse
- .call(params = nil, script_runner: Infrastructure::ScriptRunner, **kwargs) ⇒ Object
- .classify_response(response:, fields:, limit:) ⇒ Object
- .normalize_limit(value) ⇒ Object
- .project_fields(items:, fields:) ⇒ Object
- .shape_items(items:, fields:, limit:) ⇒ Object
Instance Method Summary collapse
- #call(params) ⇒ Object
- #classify_response(response:, fields:, limit:) ⇒ Object
-
#initialize(script_runner: Infrastructure::ScriptRunner, generator: Generators::PerspectiveView) ⇒ GetPerspectiveView
constructor
A new instance of GetPerspectiveView.
- #normalize_limit(value) ⇒ Object
- #project_fields(items:, fields:) ⇒ Object
- #shape_items(items:, fields:, limit:) ⇒ Object
Constructor Details
#initialize(script_runner: Infrastructure::ScriptRunner, generator: Generators::PerspectiveView) ⇒ GetPerspectiveView
Returns a new instance of GetPerspectiveView.
45 46 47 48 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 45 def initialize(script_runner: Infrastructure::ScriptRunner, generator: Generators::PerspectiveView) @script_runner = script_runner @generator = generator end |
Class Method Details
.call(params = nil, script_runner: Infrastructure::ScriptRunner, **kwargs) ⇒ Object
16 17 18 19 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 16 def call(params = nil, script_runner: Infrastructure::ScriptRunner, **kwargs) params = merge_params(params, kwargs) new(script_runner:).call(params) end |
.classify_response(response:, fields:, limit:) ⇒ Object
23 24 25 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 23 def classify_response(response:, fields:, limit:) new.classify_response(response:, fields:, limit:) end |
.normalize_limit(value) ⇒ Object
21 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 21 def normalize_limit(value) = new.normalize_limit(value) |
.project_fields(items:, fields:) ⇒ Object
31 32 33 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 31 def project_fields(items:, fields:) new.project_fields(items:, fields:) end |
.shape_items(items:, fields:, limit:) ⇒ Object
27 28 29 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 27 def shape_items(items:, fields:, limit:) new.shape_items(items:, fields:, limit:) end |
Instance Method Details
#call(params) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 50 def call(params) Params::McpBoundary.coerce(Params::GetPerspectiveViewParams, params).then do |params| perspective_name = params.perspective_name.to_s return OmnifocusMcp::Result.error("Perspective name is required") if Utils::Blank.blank?(perspective_name) limit = normalize_limit(params.limit) fields = params.fields args = generator.args(perspective_name:, limit:) script_runner.execute_omnifocus_script(generator.script_path, args:) .and_then { |response| classify_response(response:, fields:, limit:) } end rescue StandardError => e OmnifocusMcp.logger.warn("[get_perspective_view] Error: #{e}") OmnifocusMcp::Result.error(e. || "Unknown error occurred") end |
#classify_response(response:, fields:, limit:) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 74 def classify_response(response:, fields:, limit:) 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 } OmnifocusMcp::Result.ok(shape_items(items:, fields:, limit:)) in Hash OmnifocusMcp::Result.ok([]) in nil OmnifocusMcp::Result.error("Unexpected response from getPerspectiveView.js: #{response.inspect}") end end |
#normalize_limit(value) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 67 def normalize_limit(value) return DEFAULT_LIMIT if value.nil? return value if value.is_a?(Integer) && value.positive? DEFAULT_LIMIT end |
#project_fields(items:, fields:) ⇒ Object
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 95 def project_fields(items:, fields:) string_fields = fields.map(&:to_s) items.map do |item| next item unless item.is_a?(Hash) string_fields.each_with_object({}) do |field, projected| projected[field] = item[field] if item.key?(field) end end end |
#shape_items(items:, fields:, limit:) ⇒ Object
89 90 91 92 93 |
# File 'lib/omnifocus_mcp/tools/operations/get_perspective_view.rb', line 89 def shape_items(items:, fields:, limit:) items = project_fields(items:, fields:) if fields && !fields.empty? items = items.first(limit) if items.length > limit items end |