diff --git a/lib/meilisearch/index.rb b/lib/meilisearch/index.rb index f7ff462a..9c03b0e2 100644 --- a/lib/meilisearch/index.rb +++ b/lib/meilisearch/index.rb @@ -73,14 +73,15 @@ def document(document_id, fields: nil) # :fields - Array of document attributes to show (optional). # :filter - Filter queries by an attribute's value. # Available ONLY with Meilisearch v1.2 and newer (optional). + # :ids - Array of ids to be retrieved (optional) # # Returns the documents results object. def documents(options = {}) Utils.version_error_handler(__method__) do if options.key?(:filter) - http_post "/indexes/#{@uid}/documents/fetch", Utils.filter(options, [:limit, :offset, :fields, :filter]) + http_post "/indexes/#{@uid}/documents/fetch", Utils.filter(options, [:limit, :offset, :fields, :filter, :ids]) else - http_get "/indexes/#{@uid}/documents", Utils.parse_query(options, [:limit, :offset, :fields]) + http_get "/indexes/#{@uid}/documents", Utils.parse_query(options, [:limit, :offset, :fields, :ids]) end end end diff --git a/meilisearch.gemspec b/meilisearch.gemspec index 0d36235c..8fe80fe5 100644 --- a/meilisearch.gemspec +++ b/meilisearch.gemspec @@ -16,5 +16,8 @@ Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0.0' s.add_dependency 'httparty', '~> 0.22' + s.metadata['rubygems_mfa_required'] = 'true' + s.metadata['source_code_uri'] = 'https://github.com/meilisearch/meilisearch-ruby' + s.metadata['bug_tracker_uri'] = 'https://github.com/meilisearch/meilisearch-ruby/issues' end diff --git a/spec/meilisearch/index/documents_spec.rb b/spec/meilisearch/index/documents_spec.rb index 9dad20db..c4612f9e 100644 --- a/spec/meilisearch/index/documents_spec.rb +++ b/spec/meilisearch/index/documents_spec.rb @@ -422,6 +422,26 @@ { 'title' => a_kind_of(String) } ) end + + it 'retrieves documents by ids' do + expected_ids = [1, 2, 4] + response = index.documents(ids: expected_ids) + retrieved_ids = response['results'].map { |doc| doc['objectId'] }.sort + expect(retrieved_ids).to eq(expected_ids) + expect(response['total']).to be(3) + end + + it 'retrieves documents by ids and respects the limit' do + response = index.documents(ids: [1, 2, 4, 42], limit: 2) + expect(response['limit']).to be(2) + expect(response['total']).to be(4) + expect(response['results'].size).to eq(2) + end + + it 'retrieves documents by ids and respects the filter' do + response = index.documents(ids: [1, 2, 4, 42], filter: 'objectId < 20') + expect(response['results'].size).to eq(3) + end end describe '#update_documents' do