Skip to content

Commit d0f4e0a

Browse files
bors[bot]CaroFG
andauthored
Merge #156
156: Add synchronous bang methods r=curquiza a=CaroFG Co-authored-by: CaroFG <[email protected]> Co-authored-by: CaroFG <[email protected]>
2 parents 2c3e03f + bb0d921 commit d0f4e0a

File tree

3 files changed

+166
-7
lines changed

3 files changed

+166
-7
lines changed

.rubocop_todo.yml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2020-07-05 14:27:43 UTC using RuboCop version 0.86.0.
3+
# on 2021-03-16 11:04:59 UTC using RuboCop version 1.11.0.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
77
# versions of RuboCop, may require this file to be generated again.
88

9-
# Offense count: 19
10-
# Configuration parameters: CountComments, ExcludedMethods.
11-
# ExcludedMethods: refine
9+
# Offense count: 1
10+
# Cop supports --auto-correct.
11+
# Configuration parameters: Include.
12+
# Include: **/*.gemspec
13+
Gemspec/DateAssignment:
14+
Exclude:
15+
- 'meilisearch.gemspec'
16+
17+
# Offense count: 30
18+
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
19+
# IgnoredMethods: refine
1220
Metrics/BlockLength:
13-
Max: 465
21+
Max: 432
1422

1523
# Offense count: 1
16-
# Configuration parameters: CountComments.
24+
# Configuration parameters: CountComments, CountAsOne.
1725
Metrics/ClassLength:
18-
Max: 190
26+
Max: 212
1927

2028
# Offense count: 1
2129
Naming/AccessorMethodName:

lib/meilisearch/index.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,25 @@ def add_documents(documents, primary_key = nil)
5757
alias replace_documents add_documents
5858
alias add_or_replace_documents add_documents
5959

60+
def add_documents!(documents, primary_key = nil)
61+
update = add_documents(documents, primary_key)
62+
wait_for_pending_update(update['updateId'])
63+
end
64+
alias replace_documents! add_documents!
65+
alias add_or_replace_documents! add_documents!
66+
6067
def update_documents(documents, primary_key = nil)
6168
documents = [documents] if documents.is_a?(Hash)
6269
http_put "/indexes/#{@uid}/documents", documents, { primaryKey: primary_key }.compact
6370
end
6471
alias add_or_update_documents update_documents
6572

73+
def update_documents!(documents, primary_key = nil)
74+
update = update_documents(documents, primary_key)
75+
wait_for_pending_update(update['updateId'])
76+
end
77+
alias add_or_update_documents! update_documents!
78+
6679
def delete_documents(documents_ids)
6780
if documents_ids.is_a?(Array)
6881
http_post "/indexes/#{@uid}/documents/delete-batch", documents_ids
@@ -72,16 +85,33 @@ def delete_documents(documents_ids)
7285
end
7386
alias delete_multiple_documents delete_documents
7487

88+
def delete_documents!(documents_ids)
89+
update = delete_documents(documents_ids)
90+
wait_for_pending_update(update['updateId'])
91+
end
92+
alias delete_multiple_documents! delete_documents!
93+
7594
def delete_document(document_id)
7695
encode_document = URI.encode_www_form_component(document_id)
7796
http_delete "/indexes/#{@uid}/documents/#{encode_document}"
7897
end
7998
alias delete_one_document delete_document
8099

100+
def delete_document!(document_id)
101+
update = delete_document(document_id)
102+
wait_for_pending_update(update['updateId'])
103+
end
104+
alias delete_one_document! delete_document!
105+
81106
def delete_all_documents
82107
http_delete "/indexes/#{@uid}/documents"
83108
end
84109

110+
def delete_all_documents!
111+
update = delete_all_documents
112+
wait_for_pending_update(update['updateId'])
113+
end
114+
85115
### SEARCH
86116

87117
def search(query, options = {})

spec/meilisearch/index/documents_spec.rb

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@
3535
expect(index.documents.count).to eq(documents.count)
3636
end
3737

38+
it 'adds documents synchronously (as an array of documents)' do
39+
response = index.add_documents!(documents)
40+
expect(response).to be_a(Hash)
41+
expect(response).to have_key('updateId')
42+
expect(response).to have_key('status')
43+
expect(response['status']).not_to eql('enqueued')
44+
expect(response['status']).to eql('processed')
45+
expect(index.documents.count).to eq(documents.count)
46+
end
47+
3848
it 'infers order of fields' do
3949
response = index.document(1)
4050
expect(response.keys).to eq(['objectId', 'title', 'comment'])
@@ -99,6 +109,28 @@
99109
expect(doc2['comment']).to eq(documents.detect { |doc| doc[:objectId] == id2 }[:comment])
100110
end
101111

112+
it 'updates documents synchronously in index (as an array of documents)' do
113+
id1 = 123
114+
id2 = 456
115+
updated_documents = [
116+
{ objectId: id1, title: 'Sense and Sensibility' },
117+
{ objectId: id2, title: 'The Little Prince' }
118+
]
119+
response = index.update_documents!(updated_documents)
120+
expect(response).to be_a(Hash)
121+
expect(response).to have_key('updateId')
122+
expect(response).to have_key('status')
123+
expect(response['status']).not_to eql('enqueued')
124+
expect(response['status']).to eql('processed')
125+
doc1 = index.document(id1)
126+
doc2 = index.document(id2)
127+
expect(index.documents.count).to eq(documents.count)
128+
expect(doc1['title']).to eq(updated_documents.detect { |doc| doc[:objectId] == id1 }[:title])
129+
expect(doc1['comment']).to eq(documents.detect { |doc| doc[:objectId] == id1 }[:comment])
130+
expect(doc2['title']).to eq(updated_documents.detect { |doc| doc[:objectId] == id2 }[:title])
131+
expect(doc2['comment']).to eq(documents.detect { |doc| doc[:objectId] == id2 }[:comment])
132+
end
133+
102134
it 'updates one document in index (as an hash of one document)' do
103135
id = 123
104136
updated_document = { objectId: id, title: 'Emma' }
@@ -112,6 +144,21 @@
112144
expect(new_doc['comment']).to eq(documents.detect { |doc| doc[:objectId] == id }[:comment])
113145
end
114146

147+
it 'updates one document synchronously in index (as an hash of one document)' do
148+
id = 123
149+
updated_document = { objectId: id, title: 'Emma' }
150+
response = index.update_documents!(updated_document)
151+
expect(response).to be_a(Hash)
152+
expect(response).to have_key('updateId')
153+
expect(response).to have_key('status')
154+
expect(response['status']).not_to eql('enqueued')
155+
expect(response['status']).to eql('processed')
156+
expect(index.documents.count).to eq(documents.count)
157+
new_doc = index.document(id)
158+
expect(new_doc['title']).to eq(updated_document[:title])
159+
expect(new_doc['comment']).to eq(documents.detect { |doc| doc[:objectId] == id }[:comment])
160+
end
161+
115162
it 'adds only one document to index (as an hash of one document)' do
116163
id = 30
117164
title = 'Hamlet'
@@ -126,6 +173,22 @@
126173
index.wait_for_pending_update(response['updateId'])
127174
end
128175

176+
it 'adds only one document synchronously to index (as an hash of one document)' do
177+
id = 30
178+
title = 'Hamlet'
179+
new_doc = { objectId: id, title: title }
180+
response = index.add_documents!(new_doc)
181+
expect(response).to be_a(Hash)
182+
expect(response).to have_key('updateId')
183+
expect(response).to have_key('status')
184+
expect(response['status']).not_to eql('enqueued')
185+
expect(response['status']).to eql('processed')
186+
expect(index.documents.count).to eq(documents.count + 1)
187+
expect(index.document(id)['title']).to eq(title)
188+
response = index.delete_document(id)
189+
index.wait_for_pending_update(response['updateId'])
190+
end
191+
129192
it 'update a document with new fields' do
130193
id = 2
131194
doc = { objectId: id, note: '8/10' }
@@ -163,6 +226,18 @@
163226
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
164227
end
165228

229+
it 'deletes one document synchronously from index' do
230+
id = 456
231+
response = index.delete_document!(id)
232+
expect(response).to be_a(Hash)
233+
expect(response).to have_key('updateId')
234+
expect(response).to have_key('status')
235+
expect(response['status']).not_to eql('enqueued')
236+
expect(response['status']).to eql('processed')
237+
expect(index.documents.size).to eq(documents.count - 1)
238+
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
239+
end
240+
166241
it 'does nothing when trying to delete a document which does not exist' do
167242
id = 111
168243
response = index.delete_document(id)
@@ -183,6 +258,18 @@
183258
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
184259
end
185260

261+
it 'deletes one document synchronously from index (with delete-batch route)' do
262+
id = 2
263+
response = index.delete_documents!(id)
264+
expect(response).to be_a(Hash)
265+
expect(response).to have_key('updateId')
266+
expect(response).to have_key('status')
267+
expect(response['status']).not_to eql('enqueued')
268+
expect(response['status']).to eql('processed')
269+
expect(index.documents.size).to eq(documents.count - 2)
270+
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
271+
end
272+
186273
it 'deletes one document from index (with delete-batch route as an array of one uid)' do
187274
id = 123
188275
response = index.delete_documents([id])
@@ -193,6 +280,18 @@
193280
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
194281
end
195282

283+
it 'deletes one document synchronously from index (with delete-batch route as an array of one uid)' do
284+
id = 123
285+
response = index.delete_documents!([id])
286+
expect(response).to be_a(Hash)
287+
expect(response).to have_key('updateId')
288+
expect(response).to have_key('status')
289+
expect(response['status']).not_to eql('enqueued')
290+
expect(response['status']).to eql('processed')
291+
expect(index.documents.size).to eq(documents.count - 3)
292+
expect { index.document(id) }.to raise_document_not_found_meilisearch_api_error
293+
end
294+
196295
it 'deletes multiples documents from index' do
197296
docs_to_delete = [1, 4]
198297
response = index.delete_documents(docs_to_delete)
@@ -202,6 +301,17 @@
202301
expect(index.documents.size).to eq(documents.count - 3 - docs_to_delete.count)
203302
end
204303

304+
it 'deletes multiples documents synchronously from index' do
305+
docs_to_delete = [1, 4]
306+
response = index.delete_documents!(docs_to_delete)
307+
expect(response).to be_a(Hash)
308+
expect(response).to have_key('updateId')
309+
expect(response).to have_key('status')
310+
expect(response['status']).not_to eql('enqueued')
311+
expect(response['status']).to eql('processed')
312+
expect(index.documents.size).to eq(documents.count - 3 - docs_to_delete.count)
313+
end
314+
205315
it 'clears all documents from index' do
206316
response = index.delete_all_documents
207317
index.wait_for_pending_update(response['updateId'])
@@ -211,6 +321,17 @@
211321
expect(index.documents.size).to eq(0)
212322
end
213323

324+
it 'clears all documents synchronously from index' do
325+
response = index.delete_all_documents!
326+
expect(response).to be_a(Hash)
327+
expect(response).to have_key('updateId')
328+
expect(response).to have_key('status')
329+
expect(response['status']).not_to eql('enqueued')
330+
expect(response['status']).to eql('processed')
331+
expect(index.documents).to be_empty
332+
expect(index.documents.size).to eq(0)
333+
end
334+
214335
it 'fails to add document with bad primary-key format' do
215336
response = index.add_documents(objectId: 'toto et titi', title: 'Unknown')
216337
index.wait_for_pending_update(response['updateId'])

0 commit comments

Comments
 (0)