11# frozen_string_literal: true
22
33require 'meilisearch/http_request'
4- require 'timeout'
54
65module MeiliSearch
76 class Index < HTTPRequest
87 attr_reader :uid , :primary_key , :created_at , :updated_at
98
109 def initialize ( index_uid , url , api_key = nil , primary_key = nil , options = { } )
10+ @url = url
1111 @uid = index_uid
1212 @primary_key = primary_key
1313 super ( url , api_key , options )
@@ -31,10 +31,7 @@ def fetch_raw_info
3131 end
3232
3333 def update ( body )
34- index_hash = http_put indexes_path ( id : @uid ) , Utils . transform_attributes ( body )
35- set_base_properties index_hash
36-
37- self
34+ http_put indexes_path ( id : @uid ) , Utils . transform_attributes ( body )
3835 end
3936
4037 alias update_index update
@@ -78,8 +75,8 @@ def add_documents(documents, primary_key = nil)
7875 alias add_or_replace_documents add_documents
7976
8077 def add_documents! ( documents , primary_key = nil )
81- update = add_documents ( documents , primary_key )
82- wait_for_pending_update ( update [ 'updateId '] )
78+ task = add_documents ( documents , primary_key )
79+ wait_for_task ( task [ 'uid '] )
8380 end
8481 alias replace_documents! add_documents!
8582 alias add_or_replace_documents! add_documents!
@@ -112,41 +109,41 @@ def update_documents(documents, primary_key = nil)
112109 alias add_or_update_documents update_documents
113110
114111 def update_documents! ( documents , primary_key = nil )
115- update = update_documents ( documents , primary_key )
116- wait_for_pending_update ( update [ 'updateId '] )
112+ task = update_documents ( documents , primary_key )
113+ wait_for_task ( task [ 'uid '] )
117114 end
118115 alias add_or_update_documents! update_documents!
119116
120117 def add_documents_in_batches ( documents , batch_size = 1000 , primary_key = nil )
121- update_ids = [ ]
118+ tasks = [ ]
122119 documents . each_slice ( batch_size ) do |batch |
123- update_ids . append ( add_documents ( batch , primary_key ) )
120+ tasks . append ( add_documents ( batch , primary_key ) )
124121 end
125- update_ids
122+ tasks
126123 end
127124
128125 def add_documents_in_batches! ( documents , batch_size = 1000 , primary_key = nil )
129- update_ids = add_documents_in_batches ( documents , batch_size , primary_key )
126+ tasks = add_documents_in_batches ( documents , batch_size , primary_key )
130127 responses = [ ]
131- update_ids . each do |update_object |
132- responses . append ( wait_for_pending_update ( update_object [ 'updateId '] ) )
128+ tasks . each do |task_obj |
129+ responses . append ( wait_for_task ( task_obj [ 'uid '] ) )
133130 end
134131 responses
135132 end
136133
137134 def update_documents_in_batches ( documents , batch_size = 1000 , primary_key = nil )
138- update_ids = [ ]
135+ tasks = [ ]
139136 documents . each_slice ( batch_size ) do |batch |
140- update_ids . append ( update_documents ( batch , primary_key ) )
137+ tasks . append ( update_documents ( batch , primary_key ) )
141138 end
142- update_ids
139+ tasks
143140 end
144141
145142 def update_documents_in_batches! ( documents , batch_size = 1000 , primary_key = nil )
146- update_ids = update_documents_in_batches ( documents , batch_size , primary_key )
143+ tasks = update_documents_in_batches ( documents , batch_size , primary_key )
147144 responses = [ ]
148- update_ids . each do |update_object |
149- responses . append ( wait_for_pending_update ( update_object [ 'updateId '] ) )
145+ tasks . each do |task_obj |
146+ responses . append ( wait_for_task ( task_obj [ 'uid '] ) )
150147 end
151148 responses
152149 end
@@ -161,8 +158,8 @@ def delete_documents(documents_ids)
161158 alias delete_multiple_documents delete_documents
162159
163160 def delete_documents! ( documents_ids )
164- update = delete_documents ( documents_ids )
165- wait_for_pending_update ( update [ 'updateId '] )
161+ task = delete_documents ( documents_ids )
162+ wait_for_task ( task [ 'uid '] )
166163 end
167164 alias delete_multiple_documents! delete_documents!
168165
@@ -173,8 +170,8 @@ def delete_document(document_id)
173170 alias delete_one_document delete_document
174171
175172 def delete_document! ( document_id )
176- update = delete_document ( document_id )
177- wait_for_pending_update ( update [ 'updateId '] )
173+ task = delete_document ( document_id )
174+ wait_for_task ( task [ 'uid '] )
178175 end
179176 alias delete_one_document! delete_document!
180177
@@ -183,8 +180,8 @@ def delete_all_documents
183180 end
184181
185182 def delete_all_documents!
186- update = delete_all_documents
187- wait_for_pending_update ( update [ 'updateId '] )
183+ task = delete_all_documents
184+ wait_for_task ( task [ 'uid '] )
188185 end
189186
190187 ### SEARCH
@@ -195,31 +192,23 @@ def search(query, options = {})
195192 http_post "/indexes/#{ @uid } /search" , parsed_options
196193 end
197194
198- ### UPDATES
195+ ### TASKS
199196
200- def get_update_status ( update_id )
201- http_get "/indexes/ #{ @uid } /updates/ #{ update_id } "
197+ def task_endpoint
198+ Task . new ( @url , @api_key , @options )
202199 end
200+ private :task_endpoint
203201
204- def get_all_update_status
205- http_get "/indexes/ #{ @uid } /updates"
202+ def task ( task_uid )
203+ task_endpoint . index_task ( @uid , task_uid )
206204 end
207205
208- def achieved_upate? ( update )
209- update [ 'status' ] != 'enqueued' && update [ 'status' ] != 'processing'
206+ def tasks
207+ task_endpoint . index_tasks ( @uid )
210208 end
211209
212- def wait_for_pending_update ( update_id , timeout_in_ms = 5000 , interval_in_ms = 50 )
213- Timeout . timeout ( timeout_in_ms . to_f / 1000 ) do
214- loop do
215- get_update = get_update_status ( update_id )
216- return get_update if achieved_upate? ( get_update )
217-
218- sleep interval_in_ms . to_f / 1000
219- end
220- end
221- rescue Timeout ::Error
222- raise MeiliSearch ::TimeoutError
210+ def wait_for_task ( task_uid , timeout_in_ms = 5000 , interval_in_ms = 50 )
211+ task_endpoint . wait_for_task ( task_uid , timeout_in_ms , interval_in_ms )
223212 end
224213
225214 ### STATS
@@ -236,10 +225,6 @@ def indexing?
236225 stats [ 'isIndexing' ]
237226 end
238227
239- def last_update
240- stats [ 'lastUpdate' ]
241- end
242-
243228 def field_distribution
244229 stats [ 'fieldDistribution' ]
245230 end
0 commit comments