diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index 596ad49d..e0c5441f 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -721,3 +721,39 @@ 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: |- + 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 ca7bbaa0..a62df7c4 100644 --- a/lib/meilisearch/utils.rb +++ b/lib/meilisearch/utils.rb @@ -83,6 +83,7 @@ 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 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