elastic-app-search 7.5.0 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8fe929d232cc83ec09ac232658d933a1f5f9082552c3a9435898df52dcd7035
4
- data.tar.gz: 31d85c082b902fc26d5969c930b936465002b2415edd107f3e74809af87e1adf
3
+ metadata.gz: 1effdc4efc72a9c098033c0d8b034b40d1ed7e84a8f9ffc4b57cf1e684facdba
4
+ data.tar.gz: 4ed84fe6c73f2613009843a42bea47e1dc768c6a78ce2ef677febfdac049b017
5
5
  SHA512:
6
- metadata.gz: 4e488fdcf558f8002c33957c140633384f0707f12123a25d931649b963f3affb2039e4bc0ebee79d2b12fa42cfd2e0ad38272dd45753b36d6e915494d3d03fe9
7
- data.tar.gz: ab987fa529016c6ceba96bc47edb91128d0d6593d7979888d769f92fc8bda512652661729d019d052b899794db2ffa2ee20b12f7c3251f73828a5d1c77971989
6
+ metadata.gz: 65e3675e3767ae71702ee73ddd440f5675dc881ebded19ec652bec8df6f2f0e327028f9d09169d3e070f488cb5175fc049bd8211445b02b659c59d39b8ad1118
7
+ data.tar.gz: 4b5e6ceaa5b122573daea52c08e704ad4f740dec458fc10a5b14bf414b1092ee0c61f31ba6c16deba58b97a4f99a97c0f23b7e3e3dad338157f7a9138103833c
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <p align="center"><a href="https://circleci.com/gh/elastic/app-search-ruby"><img src="https://circleci.com/gh/elastic/app-search-ruby.svg?style=svg" alt="CircleCI build"></a></p>
4
4
 
5
- > A first-party Ruby client for building excellent, relevant search experiences with Elastic App Search.
5
+ > A first-party Ruby client for building excellent, relevant search experiences with [Elastic App Search](https://www.elastic.co/products/app-search).
6
6
 
7
7
  ## Contents
8
8
 
@@ -25,7 +25,7 @@ To install the gem, execute:
25
25
  gem install elastic-app-search
26
26
  ```
27
27
 
28
- Or place `gem 'elastic-app-search', '~> 7.5.0'` in your `Gemfile` and run `bundle install`.
28
+ Or place `gem 'elastic-app-search', '~> 7.6.0'` in your `Gemfile` and run `bundle install`.
29
29
 
30
30
  ## Versioning
31
31
 
@@ -35,34 +35,37 @@ To guarantee compatibility, use the most recent version of this library within t
35
35
 
36
36
  For example, for App Search `7.3`, use `7.3` of this library or above, but not `8.0`.
37
37
 
38
- If you are a [SaaS](https://app.swiftype.com/as) user, simply use the most recent version of this library.
38
+ If you are using the [SaaS version available on swiftype.com](https://app.swiftype.com/as) of App Search, you should use the version 7.5.x of the client.
39
39
 
40
40
  ## Usage
41
41
 
42
- ### Setup: Configuring the client and authentication
42
+ #### Setup: Configuring the client and authentication
43
43
 
44
- Create a new instance of the Elastic App Search Client. This requires your `[HOST_IDENTIFIER]`, which
45
- identifies the unique hostname of the App Search API that is associated with your App Search account.
46
- It also requires a valid `[API_KEY]`, which authenticates requests to the API. You can use any key type with the client, however each has a different scope. For more information on keys, check out the [documentation](https://swiftype.com/documentation/app-search/credentials).
44
+ Using this client assumes that you have already an instance of [Elastic App Search](https://www.elastic.co/products/app-search) up and running.
47
45
 
48
- You can find your `[API_KEY]` and your `[HOST_IDENTIFIER]` within the [Credentials](https://app.swiftype.com/as/credentials) menu:
46
+ Once done, a client can be instantiated using the `[API_KEY]` and the `[API_ENDPOINT]` URL of your App Search setup:
49
47
 
50
48
  ```ruby
51
49
  require 'elastic-app-search'
52
50
 
53
- client = Elastic::AppSearch::Client.new(:host_identifier => 'host-c5s2mj', :api_key => 'private-mu75psc5egt9ppzuycnc2mc3')
51
+ client = Elastic::AppSearch::Client.new(:api_key => 'private-xxxxxxxxxxxxxxxxxxx', :api_endpoint => 'http://localhost:3002/api/as/v1/')
54
52
  ```
55
53
 
56
- ### Using with App Search Managed Deploys
54
+ Note:
57
55
 
58
- The client can be configured to use a managed deploy by using the
59
- `api_endpoint` parameter. Since managed deploys do not rely on a `[HOST_IDENTIFIER]`
60
- , it can be omitted.
56
+ The `[API_KEY]` authenticates requests to the API.
57
+ You can use any key type with the client, however each has a different scope.
58
+ For more information on keys, check out the [documentation](https://swiftype.com/documentation/app-search/credentials).
59
+
60
+ ##### Swiftype.com App Search users:
61
+
62
+ When using the [SaaS version available on swiftype.com](https://app.swiftype.com/as) of App Search, you can configure the client using your `[HOST_IDENTIFIER]` instead of the `[API_ENDPOINT]`.
63
+ The `[HOST_IDENTIFIER]` can be found within the [Credentials](https://app.swiftype.com/ascredentials) menu.
61
64
 
62
65
  ```ruby
63
66
  require 'elastic-app-search'
64
67
 
65
- client = Elastic::AppSearch::Client.new(:api_key => 'private-mu75psc5egt9ppzuycnc2mc3', :api_endpoint => 'http://localhost:3002/api/as/v1/')
68
+ client = Elastic::AppSearch::Client.new(:host_identifier => 'host-c5s2mj', :api_key => 'private-xxxxxxxxxxxxxxxxxxx')
66
69
  ```
67
70
 
68
71
  ### API Methods
@@ -176,6 +179,33 @@ engine_name = 'favorite-videos'
176
179
  client.destroy_engine(engine_name)
177
180
  ```
178
181
 
182
+ #### Creating Meta Engines
183
+
184
+ ```ruby
185
+ engine_name = 'videos-engine'
186
+ sources_engines = ['favorite-videos', 'all-videos']
187
+
188
+ client.create_meta_engine(engine_name, source_engines)
189
+ ```
190
+
191
+ #### Adding Meta Engines Source
192
+
193
+ ```ruby
194
+ engine_name = 'videos-engine'
195
+ sources_engines = ['fun-videos', 'cat-videos']
196
+
197
+ client.add_meta_engine_sources(engine_name, source_engines)
198
+ ```
199
+
200
+ #### Adding Meta Engines Source
201
+
202
+ ```ruby
203
+ engine_name = 'videos-engine'
204
+ sources_engines = ['nsfw-videos']
205
+
206
+ client.delete_meta_engine_sources(engine_name, source_engines)
207
+ ```
208
+
179
209
  #### Searching
180
210
 
181
211
  ```ruby
@@ -13,6 +13,7 @@ module Elastic
13
13
  autoload :Curations, 'elastic/app-search/client/curations'
14
14
  autoload :Documents, 'elastic/app-search/client/documents'
15
15
  autoload :Engines, 'elastic/app-search/client/engines'
16
+ autoload :MetaEngines, 'elastic/app-search/client/meta_engines'
16
17
  autoload :Logs, 'elastic/app-search/client/logs'
17
18
  autoload :Schema, 'elastic/app-search/client/schema'
18
19
  autoload :Search, 'elastic/app-search/client/search'
@@ -69,6 +70,7 @@ module Elastic
69
70
  include Elastic::AppSearch::Client::Curations
70
71
  include Elastic::AppSearch::Client::Documents
71
72
  include Elastic::AppSearch::Client::Engines
73
+ include Elastic::AppSearch::Client::MetaEngines
72
74
  include Elastic::AppSearch::Client::Logs
73
75
  include Elastic::AppSearch::Client::Schema
74
76
  include Elastic::AppSearch::Client::Search
@@ -0,0 +1,23 @@
1
+ module Elastic
2
+ module AppSearch
3
+ class Client
4
+ module MetaEngines
5
+
6
+ ENGINE_TYPE_META = 'meta'.freeze()
7
+
8
+ def create_meta_engine(engine_name, source_engines)
9
+ post('engines', :name => engine_name, :type => ENGINE_TYPE_META, :source_engines => source_engines)
10
+ end
11
+
12
+ def add_meta_engine_sources(engine_name, source_engines)
13
+ post("engines/#{engine_name}/source_engines", source_engines)
14
+ end
15
+
16
+ def delete_meta_engine_sources(engine_name, source_engines)
17
+ delete("engines/#{engine_name}/source_engines", source_engines)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Elastic
2
2
  module AppSearch
3
- VERSION = '7.5.0'
3
+ VERSION = '7.6.0'
4
4
  end
5
5
  end
@@ -0,0 +1,73 @@
1
+ describe Elastic::AppSearch::Client::MetaEngines do
2
+ include_context 'App Search Credentials'
3
+ include_context 'Engine Name'
4
+ include_context 'Meta Engine Name'
5
+ include_context 'Test Engine'
6
+
7
+ let(:client) { Elastic::AppSearch::Client.new(client_options) }
8
+ let(:source_engines) { [engine_name] }
9
+
10
+ # CI currently runs against SaaS. This feature is a Self-Managed only feature.
11
+ context 'Meta Engines', :skip => "Unable to test Self-Managed features in CI." do
12
+
13
+ after do
14
+ client.destroy_engine(meta_engine_name) rescue Elastic::AppSearch::NonExistentRecord
15
+ end
16
+
17
+ context '#create_meta_engine' do
18
+ it 'should create a meta engine when given a right set of parameters' do
19
+ expect { client.get_engine(meta_engine_name) }.to raise_error(Elastic::AppSearch::NonExistentRecord)
20
+ client.create_meta_engine(meta_engine_name, source_engines)
21
+ expect { client.get_engine(meta_engine_name) }.to_not raise_error
22
+ end
23
+
24
+ it 'should return a meta engine object' do
25
+ engine = client.create_meta_engine(meta_engine_name, source_engines)
26
+ expect(engine).to be_kind_of(Hash)
27
+ expect(engine['name']).to eq(meta_engine_name)
28
+ expect(engine['type']).to eq('meta')
29
+ expect(engine['source_engines']).to eq(source_engines)
30
+ end
31
+
32
+ it 'should return an error when the engine source engine is empty' do
33
+ expect { client.create_meta_engine(engine_name, []) }.to(raise_error) do |e|
34
+ expect(e).to be_a(Elastic::AppSearch::BadRequest)
35
+ expect(e.errors).to eq(['Source engines are required for meta engines'])
36
+ end
37
+ end
38
+ end
39
+
40
+ context '#add_meta_engine_sources' do
41
+ before do
42
+ client.create_meta_engine(meta_engine_name, source_engines)
43
+ client.delete_meta_engine_sources(meta_engine_name, source_engines)
44
+ end
45
+
46
+ it 'should add the source engine' do
47
+ expect { client.add_meta_engine_sources(meta_engine_name, source_engines) }.to_not raise_error do |engine|
48
+ expect(engine).to be_kind_of(Hash)
49
+ expect(engine['name']).to eq(meta_engine_name)
50
+ expect(engine['type']).to eq('meta')
51
+ expect(engine['source_engines']).to be_kind_of(Array)
52
+ expect(engine['source_engines']).to eq(source_engines)
53
+ end
54
+ end
55
+ end
56
+
57
+ context '#delete_meta_engine_sources' do
58
+ before do
59
+ client.create_meta_engine(meta_engine_name, source_engines)
60
+ end
61
+
62
+ it 'should remove the source engine' do
63
+ expect { client.delete_meta_engine_sources(meta_engine_name, source_engines) }.to_not raise_error do |engine|
64
+ expect(engine).to be_kind_of(Hash)
65
+ expect(engine['name']).to eq(meta_engine_name)
66
+ expect(engine['type']).to eq('meta')
67
+ expect(engine['source_engines']).to be_kind_of(Array)
68
+ expect(engine['source_engines']).to be_empty
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -54,6 +54,10 @@ RSpec.shared_context 'Engine Name' do
54
54
  let(:engine_name) { "ruby-client-test-#{SecureRandom.hex}" }
55
55
  end
56
56
 
57
+ RSpec.shared_context 'Meta Engine Name' do
58
+ let(:meta_engine_name) { "ruby-client-test-#{SecureRandom.hex}" }
59
+ end
60
+
57
61
  RSpec.shared_context 'Test Engine' do
58
62
  let(:engine_name) { "ruby-client-test-#{SecureRandom.hex}" }
59
63
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic-app-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.5.0
4
+ version: 7.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Quin Hoxie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-02 00:00:00.000000000 Z
11
+ date: 2020-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -114,6 +114,7 @@ files:
114
114
  - lib/elastic/app-search/client/documents.rb
115
115
  - lib/elastic/app-search/client/engines.rb
116
116
  - lib/elastic/app-search/client/logs.rb
117
+ - lib/elastic/app-search/client/meta_engines.rb
117
118
  - lib/elastic/app-search/client/query_suggestion.rb
118
119
  - lib/elastic/app-search/client/schema.rb
119
120
  - lib/elastic/app-search/client/search.rb
@@ -135,6 +136,7 @@ files:
135
136
  - spec/engines_spec.rb
136
137
  - spec/exceptions_spec.rb
137
138
  - spec/logs_spec.rb
139
+ - spec/meta_engines_spec.rb
138
140
  - spec/query_suggestion_spec.rb
139
141
  - spec/schema_spec.rb
140
142
  - spec/search_settings_spec.rb
@@ -160,8 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
162
  - !ruby/object:Gem::Version
161
163
  version: '0'
162
164
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.7.6
165
+ rubygems_version: 3.0.6
165
166
  signing_key:
166
167
  specification_version: 4
167
168
  summary: Official gem for accessing the Elastic App Search API
@@ -176,6 +177,7 @@ test_files:
176
177
  - spec/engines_spec.rb
177
178
  - spec/exceptions_spec.rb
178
179
  - spec/logs_spec.rb
180
+ - spec/meta_engines_spec.rb
179
181
  - spec/query_suggestion_spec.rb
180
182
  - spec/schema_spec.rb
181
183
  - spec/search_settings_spec.rb