From a20cc1f706b5c8819b33a7faf560fba713b3740b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Mon, 18 May 2026 20:22:57 +0200 Subject: [PATCH 1/2] :sparkles: add webhook data to model searches --- lib/mindee/v2/parsing/search/model_webhook.rb | 38 +++++++++++++++++++ lib/mindee/v2/parsing/search/search_model.rb | 7 ++++ lib/mindee/v2/parsing/search/search_models.rb | 1 + .../v2/parsing/search/search_response.rb | 4 +- .../v2/parsing/search/model_webhook.rbs | 19 ++++++++++ sig/mindee/v2/parsing/search/search_model.rbs | 1 + spec/data | 2 +- 7 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 lib/mindee/v2/parsing/search/model_webhook.rb create mode 100644 sig/mindee/v2/parsing/search/model_webhook.rbs diff --git a/lib/mindee/v2/parsing/search/model_webhook.rb b/lib/mindee/v2/parsing/search/model_webhook.rb new file mode 100644 index 00000000..4e2d7df8 --- /dev/null +++ b/lib/mindee/v2/parsing/search/model_webhook.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module Mindee + module V2 + module Parsing + module Search + # Individual webhook information. + class ModelWebhook + # @return [String] ID of the webhook. + attr_reader :id + + # @return [String] Name of the webhook. + attr_reader :name + + # @return [String] URL of the webhook. + attr_reader :url + + # @param payload [Hash] The parsed JSON payload mapping to the search model. + def initialize(payload) + @id = payload['id'] + @name = payload['name'] + @url = payload['url'] + end + + # String representation of the model. + # @return [String] + def to_s + [ + ":Name: #{@name}", + ":ID: #{@id}", + ":URL: #{@url}", + ].join("\n") + end + end + end + end + end +end diff --git a/lib/mindee/v2/parsing/search/search_model.rb b/lib/mindee/v2/parsing/search/search_model.rb index ee3ec5ed..6f1b96f5 100644 --- a/lib/mindee/v2/parsing/search/search_model.rb +++ b/lib/mindee/v2/parsing/search/search_model.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require_relative 'model_webhook' + module Mindee module V2 module Parsing @@ -15,11 +17,15 @@ class SearchModel # @return [String] Type of the model. attr_reader :model_type + # @return [Array] List of webhooks associated with the model. + attr_reader :webhooks + # @param payload [Hash] The parsed JSON payload mapping to the search model. def initialize(payload) @id = payload['id'] @name = payload['name'] @model_type = payload['model_type'] + @webhooks = (payload['webhooks'] || []).map { |w| ModelWebhook.new(w) } end # String representation of the model. @@ -29,6 +35,7 @@ def to_s ":Name: #{@name}", ":ID: #{@id}", ":Model Type: #{@model_type}", + ":Webhooks: #{@webhooks.join("\n")}", ].join("\n") end end diff --git a/lib/mindee/v2/parsing/search/search_models.rb b/lib/mindee/v2/parsing/search/search_models.rb index 9e90f0d6..a49a63df 100644 --- a/lib/mindee/v2/parsing/search/search_models.rb +++ b/lib/mindee/v2/parsing/search/search_models.rb @@ -20,6 +20,7 @@ def to_s "* :Name: #{model.name}", " :ID: #{model.id}", " :Model Type: #{model.model_type}", + " :Webhooks: #{model.webhooks.size}", ] end diff --git a/lib/mindee/v2/parsing/search/search_response.rb b/lib/mindee/v2/parsing/search/search_response.rb index 9195a5e5..1921ec74 100644 --- a/lib/mindee/v2/parsing/search/search_response.rb +++ b/lib/mindee/v2/parsing/search/search_response.rb @@ -24,10 +24,10 @@ def to_s [ 'Models', '######', - models.to_s, + @models.to_s, 'Pagination Metadata', '###################', - pagination_metadata.to_s, + @pagination_metadata.to_s, '', ].join("\n") end diff --git a/sig/mindee/v2/parsing/search/model_webhook.rbs b/sig/mindee/v2/parsing/search/model_webhook.rbs new file mode 100644 index 00000000..58d7487f --- /dev/null +++ b/sig/mindee/v2/parsing/search/model_webhook.rbs @@ -0,0 +1,19 @@ +# lib/mindee/v2/parsing/search/model_webhook.rb + +module Mindee + module V2 + module Parsing + module Search + class ModelWebhook + attr_reader id: String + attr_reader name: String + attr_reader url: String + + def initialize: (Hash[String | Symbol, untyped]) -> void + + def to_s: -> String + end + end + end + end +end diff --git a/sig/mindee/v2/parsing/search/search_model.rbs b/sig/mindee/v2/parsing/search/search_model.rbs index e0c02de6..8ab8b472 100644 --- a/sig/mindee/v2/parsing/search/search_model.rbs +++ b/sig/mindee/v2/parsing/search/search_model.rbs @@ -8,6 +8,7 @@ module Mindee attr_reader id: String attr_reader model_type: String attr_reader name: String + attr_reader webhooks: Array[ModelWebhook] def initialize: (Hash[String|Symbol, untyped]) -> void diff --git a/spec/data b/spec/data index 315efcc3..13093f3a 160000 --- a/spec/data +++ b/spec/data @@ -1 +1 @@ -Subproject commit 315efcc302efacfb75a6b101788058658e8c37e4 +Subproject commit 13093f3a48de212ef26889df71199c1a2a9d1478 From 222e52cd8fee603d681ddba156a03b7d658502a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ianar=C3=A9=20s=C3=A9vi?= Date: Tue, 19 May 2026 13:39:14 +0200 Subject: [PATCH 2/2] add basic test --- lib/mindee/v2/parsing/search.rb | 1 + spec/v2/parsing/search_models_spec.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 spec/v2/parsing/search_models_spec.rb diff --git a/lib/mindee/v2/parsing/search.rb b/lib/mindee/v2/parsing/search.rb index 4972c44e..19050b2b 100644 --- a/lib/mindee/v2/parsing/search.rb +++ b/lib/mindee/v2/parsing/search.rb @@ -4,3 +4,4 @@ require_relative 'search/search_model' require_relative 'search/search_models' require_relative 'search/search_response' +require_relative 'search/model_webhook' diff --git a/spec/v2/parsing/search_models_spec.rb b/spec/v2/parsing/search_models_spec.rb new file mode 100644 index 00000000..b55a10f3 --- /dev/null +++ b/spec/v2/parsing/search_models_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'mindee' +require 'mindee/v2/parsing/search' + +describe Mindee::V2::Parsing::Search::SearchResponse do + it 'initializes' do + json_file_path = File.join(V2_DATA_DIR, 'search', 'models.json') + + response = described_class.new(JSON.parse(File.read(json_file_path))) + + expect(response).not_to be_nil + expect(response.models.size).to eq(5) + model0 = response.models[0] + expect(model0.name).to eq('Extraction With Webhooks') + expect(model0.webhooks.size).to eq(2) + expect(model0.webhooks[0].url).to eq('https://failure.mindee.com') + end +end