diff --git a/examples/collections_and_documents.rb b/examples/collections_and_documents.rb index b0616ba..d0f2cd2 100644 --- a/examples/collections_and_documents.rb +++ b/examples/collections_and_documents.rb @@ -145,6 +145,16 @@ # "num_documents" => 0 # } +### +# Truncate a collection +# Deletion returns the number of documents deleted +collection = @typesense.collections['companies'].truncate +ap collection + +# { +# "num_deleted": 125 +# } + # Let's create the collection again for use in our remaining examples @typesense.collections.create(schema) diff --git a/lib/typesense/collection.rb b/lib/typesense/collection.rb index 1217a41..46d7eab 100644 --- a/lib/typesense/collection.rb +++ b/lib/typesense/collection.rb @@ -9,7 +9,7 @@ def initialize(name, api_call) @api_call = api_call @documents = Documents.new(@name, @api_call) @overrides = Overrides.new(@name, @api_call) - @synonyms = Synonyms.new(@name, @api_call) + @synonyms = Synonyms.new(@name, @api_call) end def retrieve diff --git a/lib/typesense/documents.rb b/lib/typesense/documents.rb index 46c3911..624dda7 100644 --- a/lib/typesense/documents.rb +++ b/lib/typesense/documents.rb @@ -72,6 +72,10 @@ def delete(query_parameters = {}) @api_call.delete(endpoint_path, query_parameters) end + def truncate + @api_call.delete(endpoint_path, { truncate: true }) + end + private def endpoint_path(operation = nil) diff --git a/spec/typesense/documents_spec.rb b/spec/typesense/documents_spec.rb index 9993332..ba9b78a 100644 --- a/spec/typesense/documents_spec.rb +++ b/spec/typesense/documents_spec.rb @@ -242,6 +242,24 @@ end end + describe '#truncate' do + it 'truncate documents in a collection' do + stub_request(:delete, Typesense::ApiCall.new(typesense.configuration).send(:uri_for, '/collections/companies/documents', typesense.configuration.nodes[0])) + .with(headers: { + 'X-Typesense-Api-Key' => typesense.configuration.api_key, + 'Content-Type' => 'application/json' + }, + query: { + truncate: true + }) + .to_return(status: 200, body: '{ "num_deleted": 1 }', headers: { 'Content-Type': 'application/json' }) + + result = companies_documents.truncate + + expect(result['num_deleted']).to eq(1) + end + end + describe '#search' do let(:search_parameters) do {