From 5c520f7acb95d67480b5f09f20d35f553c97d3e8 Mon Sep 17 00:00:00 2001 From: ellnix Date: Mon, 31 Mar 2025 22:00:07 +0200 Subject: [PATCH 1/3] Make transform_attributes work with nested hashes --- lib/meilisearch/utils.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/meilisearch/utils.rb b/lib/meilisearch/utils.rb index ca7bbaa0..e0eb75b2 100644 --- a/lib/meilisearch/utils.rb +++ b/lib/meilisearch/utils.rb @@ -87,6 +87,7 @@ def parse(body) .transform_keys do |key| key.include?('_') ? key.downcase.gsub(SNAKE_CASE, &:upcase).gsub('_', '') : key end + .transform_values { |val| transform_attributes(val) } end def message_builder(current_message, method_name) From 2be7f8971fc1a4d9a57361d7595b9368aef706a4 Mon Sep 17 00:00:00 2001 From: ellnix Date: Fri, 24 Jan 2025 11:58:42 +0100 Subject: [PATCH 2/3] Support network endpoints --- .code-samples.meilisearch.yaml | 16 +++++++++ lib/meilisearch.rb | 1 + lib/meilisearch/client.rb | 1 + lib/meilisearch/network.rb | 14 ++++++++ lib/meilisearch/utils.rb | 2 +- spec/meilisearch/client/network_spec.rb | 44 +++++++++++++++++++++++++ 6 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 lib/meilisearch/network.rb create mode 100644 spec/meilisearch/client/network_spec.rb diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index 596ad49d..d95af18a 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -721,3 +721,19 @@ multi_search_federated_1: |- queries: [{ index_uid: 'movies', q: 'batman' }, { index_uid: 'comics', q: 'batman' }], federation: {} ) +get_network_1: |- + client.network +update_network_1: |- + client.update_network( + self: 'ms-00', + remotes: { + 'ms-00': { + 'url': 'http://INSTANCE_URL', + 'searchApiKey': 'INSTANCE_API_KEY' + }, + 'ms-01': { + 'url': 'http://ANOTHER_INSTANCE_URL', + 'searchApiKey': 'ANOTHER_INSTANCE_API_KEY' + } + } + ) diff --git a/lib/meilisearch.rb b/lib/meilisearch.rb index fc7e15e2..7dc558a1 100644 --- a/lib/meilisearch.rb +++ b/lib/meilisearch.rb @@ -7,6 +7,7 @@ require 'meilisearch/models/task' require 'meilisearch/http_request' require 'meilisearch/multi_search' +require 'meilisearch/network' require 'meilisearch/tenant_token' require 'meilisearch/task' require 'meilisearch/client' diff --git a/lib/meilisearch/client.rb b/lib/meilisearch/client.rb index cbce86ac..f92a6b40 100644 --- a/lib/meilisearch/client.rb +++ b/lib/meilisearch/client.rb @@ -4,6 +4,7 @@ module Meilisearch class Client < HTTPRequest include Meilisearch::TenantToken include Meilisearch::MultiSearch + include Meilisearch::Network ### INDEXES diff --git a/lib/meilisearch/network.rb b/lib/meilisearch/network.rb new file mode 100644 index 00000000..4d767c4b --- /dev/null +++ b/lib/meilisearch/network.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Meilisearch + module Network + def network + http_get '/network' + end + + def update_network(new_network) + new_network = Utils.transform_attributes(new_network) + http_patch '/network', new_network + end + end +end diff --git a/lib/meilisearch/utils.rb b/lib/meilisearch/utils.rb index e0eb75b2..a62df7c4 100644 --- a/lib/meilisearch/utils.rb +++ b/lib/meilisearch/utils.rb @@ -83,11 +83,11 @@ def warn_on_non_conforming_attribute_names(body) def parse(body) body + .transform_values { |val| transform_attributes(val) } .transform_keys(&:to_s) .transform_keys do |key| key.include?('_') ? key.downcase.gsub(SNAKE_CASE, &:upcase).gsub('_', '') : key end - .transform_values { |val| transform_attributes(val) } end def message_builder(current_message, method_name) diff --git a/spec/meilisearch/client/network_spec.rb b/spec/meilisearch/client/network_spec.rb new file mode 100644 index 00000000..7e02412a --- /dev/null +++ b/spec/meilisearch/client/network_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +describe 'Meilisearch::Client - Network' do + before do + client.update_experimental_features(network: true) + end + + let(:default_network) do + { + 'self' => nil, + 'remotes' => {} + } + end + + let(:sample_remote) do + { + ms1: { + url: 'http://localhost', + search_api_key: 'masterKey' + } + } + end + + describe '#network' do + it 'returns the sharding configuration' do + expect(client.network).to eq default_network + end + end + + describe '#update_network' do + it 'updates the sharding configuration' do + new_network = { + self: 'ms0', + remotes: sample_remote + } + + client.update_network(new_network) + expect(client.network).to eq(Meilisearch::Utils.transform_attributes(new_network)) + + client.update_network({ remotes: nil, self: nil }) + expect(client.network).to eq default_network + end + end +end From 91794eceb5ae10155a613c1d90d259f5160f47b4 Mon Sep 17 00:00:00 2001 From: ellnix Date: Tue, 1 Apr 2025 23:29:05 +0200 Subject: [PATCH 3/3] Add remote federated search code sample --- .code-samples.meilisearch.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index d95af18a..e0c5441f 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -721,6 +721,26 @@ multi_search_federated_1: |- queries: [{ index_uid: 'movies', q: 'batman' }, { index_uid: 'comics', q: 'batman' }], federation: {} ) +multi_search_remote_federated_1: |- + client.multi_search( + federation: {}, + queries: [ + { + index_uid: 'movies', + q: 'batman', + federation_options: { + remote: 'ms-00' + } + }, + { + index_uid: 'movies', + q: 'batman', + federation_options: { + remote: 'ms-01' + } + } + ] + ) get_network_1: |- client.network update_network_1: |-