Skip to content

Commit 05abefb

Browse files
committed
Add get_or_create_index method
1 parent 4e05a6a commit 05abefb

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ You can check out [the API documentation](https://docs.meilisearch.com/reference
125125
client.create_index('books')
126126
# Create an index and give the primary-key
127127
client.create_index('books', primaryKey: 'book_id')
128+
# Create an index or get the already existing one
129+
client.create_index('books')
130+
client.get_or_create_index('books', primaryKey: 'book_id')
128131
```
129132

130133
#### List all indexes <!-- omit in toc -->

lib/meilisearch/client.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ def create_index(index_uid, options = {})
2323
index_object(res['uid'])
2424
end
2525

26+
def get_or_create_index(index_uid, options = {})
27+
begin
28+
create_index(index_uid, options)
29+
rescue ApiError => e
30+
raise e unless e.code == 'index_already_exists'
31+
end
32+
index_object(index_uid)
33+
end
34+
2635
def delete_index(index_uid)
2736
index_object(index_uid).delete
2837
end

spec/meilisearch/client/indexes_spec.rb

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
@uid1 = 'uid1'
88
@uid2 = 'uid2'
99
@uid3 = 'uid3'
10+
@uid4 = 'uid4'
11+
@uid5 = 'uid5'
1012
@primary_key = 'objectId'
1113
end
1214

@@ -31,6 +33,31 @@
3133
expect(index.primary_key).to eq(@primary_key)
3234
end
3335

36+
it 'creates an new index with get_or_create_index method' do
37+
index = @client.get_or_create_index(@uid4)
38+
expect(@client.indexes.count).to eq(4)
39+
expect(@client.index(@uid4).uid).to eq(index.uid)
40+
expect(@client.index(@uid4).uid).to eq(@uid4)
41+
expect(@client.index(@uid4).primary_key).to be_nil
42+
end
43+
44+
it 'creates an new index with get_or_create_index method and a primary-key' do
45+
index = @client.get_or_create_index(@uid5, primaryKey: 'title')
46+
expect(@client.indexes.count).to eq(5)
47+
expect(@client.index(@uid5).uid).to eq(index.uid)
48+
expect(@client.index(@uid5).uid).to eq(@uid5)
49+
expect(@client.index(@uid5).primary_key).to eq(index.primary_key)
50+
expect(@client.index(@uid5).primary_key).to eq('title')
51+
end
52+
53+
it 'get an already existing index with get_or_create_index method' do
54+
index = @client.get_or_create_index(@uid5)
55+
expect(@client.indexes.count).to eq(5)
56+
expect(@client.index(@uid5).uid).to eq(index.uid)
57+
expect(@client.index(@uid5).uid).to eq(@uid5)
58+
expect(@client.index(@uid5).primary_key).to eq('title')
59+
end
60+
3461
it 'fails to create an index with an uid already taken' do
3562
expect do
3663
@client.create_index(@uid1)
@@ -46,9 +73,9 @@
4673
it 'gets list of indexes' do
4774
response = @client.indexes
4875
expect(response).to be_a(Array)
49-
expect(response.count).to eq(3)
76+
expect(response.count).to eq(5)
5077
uids = response.map { |elem| elem['uid'] }
51-
expect(uids).to contain_exactly(@uid1, @uid2, @uid3)
78+
expect(uids).to contain_exactly(@uid1, @uid2, @uid3, @uid4, @uid5)
5279
end
5380

5481
it 'shows a specific index' do
@@ -72,6 +99,10 @@
7299
expect { @client.show_index(@uid2) }.to raise_index_not_found_meilisearch_api_error
73100
expect(@client.delete_index(@uid3)).to be_nil
74101
expect { @client.show_index(@uid3) }.to raise_index_not_found_meilisearch_api_error
102+
expect(@client.delete_index(@uid4)).to be_nil
103+
expect { @client.show_index(@uid4) }.to raise_index_not_found_meilisearch_api_error
104+
expect(@client.delete_index(@uid5)).to be_nil
105+
expect { @client.show_index(@uid5) }.to raise_index_not_found_meilisearch_api_error
75106
expect(@client.indexes.count).to eq(0)
76107
end
77108

0 commit comments

Comments
 (0)