algolia 2.0.0.pre.alpha.2 → 2.0.0.pre.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile +1 -1
- data/algolia.gemspec +9 -2
- data/lib/algolia.rb +1 -1
- data/lib/algolia/analytics_client.rb +1 -1
- data/lib/algolia/config/analytics_config.rb +2 -2
- data/lib/algolia/config/base_config.rb +45 -0
- data/lib/algolia/config/insights_config.rb +2 -2
- data/lib/algolia/config/recommendation_config.rb +2 -2
- data/lib/algolia/config/search_config.rb +2 -2
- data/lib/algolia/defaults.rb +2 -2
- data/lib/algolia/error.rb +1 -2
- data/lib/algolia/helpers.rb +5 -2
- data/lib/algolia/insights_client.rb +1 -1
- data/lib/algolia/iterators/object_iterator.rb +5 -4
- data/lib/algolia/iterators/paginator_iterator.rb +5 -3
- data/lib/algolia/recommendation_client.rb +1 -1
- data/lib/algolia/search_client.rb +1 -1
- data/lib/algolia/search_index.rb +37 -37
- data/lib/algolia/transport/transport.rb +4 -4
- data/lib/algolia/version.rb +1 -1
- data/sig/config/algolia_config.rbs +3 -3
- data/sig/config/analytics_config.rbs +1 -1
- data/sig/config/insights_config.rbs +1 -1
- data/sig/config/recommendation_config.rbs +1 -1
- data/sig/config/search_config.rbs +1 -1
- data/test/algolia/integration/analytics_client_test.rb +6 -6
- data/test/algolia/integration/insights_client_test.rb +11 -11
- data/test/algolia/integration/search_client_test.rb +20 -11
- data/test/algolia/unit/algolia_config_test.rb +16 -0
- data/test/algolia/unit/helpers_test.rb +29 -1
- data/test/algolia/unit/retry_strategy_test.rb +3 -3
- data/test/test_helper.rb +1 -1
- data/upgrade_guide.md +29 -21
- metadata +17 -11
- data/lib/algolia/config/algolia_config.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47d18253040f91e77f82a815e90b4064c88aac2ddbacbe4c26b1dea81304d847
|
4
|
+
data.tar.gz: 530b601d76e6de0b4f252dc13bcce01f7446428f839cd22fb4b286a1b5a17f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04c63a1fb49fcd66817e0b43f66c16b3cbe8bd044ca513409047f8709ab8cc757deb30cedaeafcddf831f98179efa9c21fdcbf4bb09a1641b9b5b7aa96d6fc8c
|
7
|
+
data.tar.gz: e552093cc4ab5827c8ab87e448856bfdbd68f113b8e321e928e66ceb03f8ecf96531aad902d256a6372336c9efeedd166e85165d63a0c83f0795de942a0b4eb7
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/algolia.gemspec
CHANGED
@@ -12,8 +12,15 @@ Gem::Specification.new do |spec|
|
|
12
12
|
|
13
13
|
spec.date = Date.today
|
14
14
|
spec.licenses = ['MIT']
|
15
|
-
spec.summary = 'A simple Ruby client for the algolia.com REST API'
|
16
|
-
spec.description = '
|
15
|
+
spec.summary = 'A simple Ruby client for the algolia.com REST API (alpha release)'
|
16
|
+
spec.description = 'This is the alpha version of the upcoming v2 release of Algolia Client. Please keep on using the algoliasearch gem in the meantime.'
|
17
|
+
spec.homepage = 'https://github.com/algolia/algoliasearch-client-ruby/tree/release/v2'
|
18
|
+
|
19
|
+
spec.metadata = {
|
20
|
+
'bug_tracker_uri' => 'https://github.com/algolia/algoliasearch-client-ruby/issues',
|
21
|
+
'documentation_uri' => 'http://www.rubydoc.info/gems/algolia',
|
22
|
+
'source_code_uri' => 'https://github.com/algolia/algoliasearch-client-ruby/tree/release/v2'
|
23
|
+
}
|
17
24
|
|
18
25
|
# Specify which files should be added to the gem when it is released.
|
19
26
|
# The `git ls-files -z` loads the files in the RubyGem
|
data/lib/algolia.rb
CHANGED
@@ -3,7 +3,7 @@ require 'algolia/helpers'
|
|
3
3
|
require 'algolia/http/http_requester'
|
4
4
|
require 'algolia/defaults'
|
5
5
|
require 'algolia/user_agent'
|
6
|
-
require 'algolia/config/
|
6
|
+
require 'algolia/config/base_config'
|
7
7
|
require 'algolia/config/search_config'
|
8
8
|
require 'algolia/config/analytics_config'
|
9
9
|
require 'algolia/config/insights_config'
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Algolia
|
2
2
|
module Analytics
|
3
|
-
class Config <
|
3
|
+
class Config < BaseConfig
|
4
4
|
attr_accessor :region, :default_hosts
|
5
5
|
|
6
6
|
# Initialize a config
|
7
7
|
#
|
8
|
-
# @option options [String] :
|
8
|
+
# @option options [String] :application_id
|
9
9
|
# @option options [String] :api_key
|
10
10
|
# @option options [String] :region
|
11
11
|
#
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module Algolia
|
4
|
+
class BaseConfig
|
5
|
+
attr_accessor :app_id, :api_key, :headers, :batch_size, :read_timeout, :write_timeout, :connect_timeout, :compression_type,
|
6
|
+
:symbolize_keys, :use_latest_settings
|
7
|
+
|
8
|
+
#
|
9
|
+
# @option options [String] :application_id
|
10
|
+
# @option options [String] :api_key
|
11
|
+
# @option options [Integer] :batch_size
|
12
|
+
# @option options [Integer] :read_timeout
|
13
|
+
# @option options [Integer] :write_timeout
|
14
|
+
# @option options [Integer] :connect_timeout
|
15
|
+
# @option options [Boolean] :symbolize_keys
|
16
|
+
#
|
17
|
+
def initialize(opts = {})
|
18
|
+
raise AlgoliaError, 'No Application ID provided, please set :application_id' unless opts.has_key?(:application_id)
|
19
|
+
raise AlgoliaError, 'No API key provided, please set :api_key' unless opts.has_key?(:api_key)
|
20
|
+
|
21
|
+
@app_id = opts[:application_id]
|
22
|
+
@api_key = opts[:api_key]
|
23
|
+
|
24
|
+
@headers = {
|
25
|
+
Defaults::HEADER_API_KEY => @api_key,
|
26
|
+
Defaults::HEADER_APP_ID => @app_id,
|
27
|
+
'Content-Type' => 'application/json; charset=utf-8',
|
28
|
+
'User-Agent' => UserAgent.value
|
29
|
+
}
|
30
|
+
|
31
|
+
@batch_size = opts[:batch_size] || Defaults::BATCH_SIZE
|
32
|
+
@read_timeout = opts[:read_timeout] || Defaults::READ_TIMEOUT
|
33
|
+
@write_timeout = opts[:write_timeout] || Defaults::WRITE_TIMEOUT
|
34
|
+
@connect_timeout = opts[:connect_timeout] || Defaults::CONNECT_TIMEOUT
|
35
|
+
@compression_type = opts[:compression_type] || Defaults::NONE_ENCODING
|
36
|
+
@symbolize_keys = opts.has_key?(:symbolize_keys) ? opts[:symbolize_keys] : true
|
37
|
+
# used to avoid BC break on Rails integration, should not be documented
|
38
|
+
@use_latest_settings = opts.has_key?(:use_latest_settings) ? opts[:use_latest_settings] : true
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_extra_header(key, value)
|
42
|
+
@headers[key] = value
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Algolia
|
2
2
|
module Insights
|
3
|
-
class Config <
|
3
|
+
class Config < BaseConfig
|
4
4
|
attr_accessor :region, :default_hosts
|
5
5
|
|
6
6
|
# Initialize a config
|
7
7
|
#
|
8
|
-
# @option options [String] :
|
8
|
+
# @option options [String] :application_id
|
9
9
|
# @option options [String] :api_key
|
10
10
|
# @option options [String] :region
|
11
11
|
#
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Algolia
|
2
2
|
module Recommendation
|
3
|
-
class Config <
|
3
|
+
class Config < BaseConfig
|
4
4
|
attr_accessor :region, :default_hosts
|
5
5
|
|
6
6
|
# Initialize a config
|
7
7
|
#
|
8
|
-
# @option options [String] :
|
8
|
+
# @option options [String] :application_id
|
9
9
|
# @option options [String] :api_key
|
10
10
|
# @option options [String] :region
|
11
11
|
#
|
@@ -5,13 +5,13 @@ require 'algolia/enums/call_type'
|
|
5
5
|
|
6
6
|
module Algolia
|
7
7
|
module Search
|
8
|
-
class Config <
|
8
|
+
class Config < BaseConfig
|
9
9
|
include CallType
|
10
10
|
attr_accessor :default_hosts
|
11
11
|
|
12
12
|
# Initialize a config
|
13
13
|
#
|
14
|
-
# @option options [String] :
|
14
|
+
# @option options [String] :application_id
|
15
15
|
# @option options [String] :api_key
|
16
16
|
# @option options [Hash] :custom_hosts
|
17
17
|
#
|
data/lib/algolia/defaults.rb
CHANGED
@@ -24,8 +24,8 @@ module Defaults
|
|
24
24
|
|
25
25
|
BATCH_SIZE = 1000
|
26
26
|
CONNECT_TIMEOUT = 2
|
27
|
-
READ_TIMEOUT =
|
28
|
-
WRITE_TIMEOUT =
|
27
|
+
READ_TIMEOUT = 5
|
28
|
+
WRITE_TIMEOUT = 30
|
29
29
|
USER_AGENT = "Algolia for Ruby (#{Algolia::VERSION}), Ruby (#{RUBY_VERSION})"
|
30
30
|
|
31
31
|
WAIT_TASK_DEFAULT_TIME_BEFORE_RETRY = 100
|
data/lib/algolia/error.rb
CHANGED
data/lib/algolia/helpers.rb
CHANGED
@@ -52,7 +52,9 @@ module Helpers
|
|
52
52
|
|
53
53
|
# Support to convert old settings to their new names
|
54
54
|
#
|
55
|
-
def deserialize_settings(data)
|
55
|
+
def deserialize_settings(data, use_latest_settings, symbolize_keys)
|
56
|
+
return data unless use_latest_settings
|
57
|
+
|
56
58
|
settings = symbolize_hash(data)
|
57
59
|
keys = {
|
58
60
|
attributesToIndex: 'searchableAttributes',
|
@@ -62,7 +64,8 @@ module Helpers
|
|
62
64
|
|
63
65
|
keys.each do |deprecated_key, current_key|
|
64
66
|
if settings.has_key?(deprecated_key)
|
65
|
-
|
67
|
+
key = symbolize_keys ? current_key.to_sym : current_key.to_s
|
68
|
+
settings[key] = settings.delete(deprecated_key)
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
@@ -7,16 +7,17 @@ module Algolia
|
|
7
7
|
data = {}
|
8
8
|
|
9
9
|
if @response
|
10
|
-
|
11
|
-
|
10
|
+
parsed_response = symbolize_hash(@response)
|
11
|
+
if parsed_response[:hits].length
|
12
|
+
parsed_response[:hits].each do |hit|
|
12
13
|
yield hit
|
13
14
|
end
|
14
15
|
|
15
|
-
if
|
16
|
+
if parsed_response[:cursor].nil?
|
16
17
|
@response = nil
|
17
18
|
raise StopIteration
|
18
19
|
else
|
19
|
-
data[:cursor] =
|
20
|
+
data[:cursor] = parsed_response[:cursor]
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -16,13 +16,15 @@ module Algolia
|
|
16
16
|
def each
|
17
17
|
loop do
|
18
18
|
if @response
|
19
|
-
|
20
|
-
|
19
|
+
parsed_response = symbolize_hash(@response)
|
20
|
+
parsed_data = symbolize_hash(@data)
|
21
|
+
if parsed_response[:hits].length
|
22
|
+
parsed_response[:hits].each do |hit|
|
21
23
|
hit.delete(:_highlightResult)
|
22
24
|
yield hit
|
23
25
|
end
|
24
26
|
|
25
|
-
if
|
27
|
+
if parsed_response[:nbHits] < parsed_data[:hitsPerPage]
|
26
28
|
@response = nil
|
27
29
|
@data = {
|
28
30
|
hitsPerPage: 1000,
|
@@ -24,7 +24,7 @@ module Algolia
|
|
24
24
|
# @return self
|
25
25
|
#
|
26
26
|
def self.create(app_id, api_key)
|
27
|
-
config = Recommendation::Config.new(
|
27
|
+
config = Recommendation::Config.new(application_id: app_id, api_key: api_key)
|
28
28
|
create_with_config(config)
|
29
29
|
end
|
30
30
|
|
data/lib/algolia/search_index.rb
CHANGED
@@ -5,16 +5,16 @@ module Algolia
|
|
5
5
|
include CallType
|
6
6
|
include Helpers
|
7
7
|
|
8
|
-
attr_reader :
|
8
|
+
attr_reader :name, :transporter, :config
|
9
9
|
|
10
10
|
# Initialize an index
|
11
11
|
#
|
12
|
-
# @param
|
12
|
+
# @param name [String] name of the index
|
13
13
|
# @param transporter [Object] transport object used for the connection
|
14
14
|
# @param config [Config] a Config object which contains your APP_ID and API_KEY
|
15
15
|
#
|
16
|
-
def initialize(
|
17
|
-
@
|
16
|
+
def initialize(name, transporter, config)
|
17
|
+
@name = name
|
18
18
|
@transporter = transporter
|
19
19
|
@config = config
|
20
20
|
end
|
@@ -47,7 +47,7 @@ module Algolia
|
|
47
47
|
# @param opts [Hash] contains extra parameters to send with your query
|
48
48
|
#
|
49
49
|
def get_task_status(task_id, opts = {})
|
50
|
-
res = @transporter.read(:GET, path_encode('/1/indexes/%s/task/%s', @
|
50
|
+
res = @transporter.read(:GET, path_encode('/1/indexes/%s/task/%s', @name, task_id), {}, opts)
|
51
51
|
get_option(res, 'status')
|
52
52
|
end
|
53
53
|
|
@@ -56,7 +56,7 @@ module Algolia
|
|
56
56
|
# @param opts [Hash] contains extra parameters to send with your query
|
57
57
|
#
|
58
58
|
def clear_objects(opts = {})
|
59
|
-
response = @transporter.write(:POST, path_encode('/1/indexes/%s/clear', @
|
59
|
+
response = @transporter.write(:POST, path_encode('/1/indexes/%s/clear', @name), {}, opts)
|
60
60
|
|
61
61
|
IndexingResponse.new(self, response)
|
62
62
|
end
|
@@ -75,7 +75,7 @@ module Algolia
|
|
75
75
|
# @param opts [Hash] contains extra parameters to send with your query
|
76
76
|
#
|
77
77
|
def delete(opts = {})
|
78
|
-
response = @transporter.write(:DELETE, path_encode('/1/indexes/%s', @
|
78
|
+
response = @transporter.write(:DELETE, path_encode('/1/indexes/%s', @name), opts)
|
79
79
|
|
80
80
|
IndexingResponse.new(self, response)
|
81
81
|
end
|
@@ -115,7 +115,7 @@ module Algolia
|
|
115
115
|
has_next_page = true
|
116
116
|
while has_next_page
|
117
117
|
request_options[:page] = page
|
118
|
-
res = search(query, request_options)
|
118
|
+
res = symbolize_hash(search(query, request_options))
|
119
119
|
|
120
120
|
res[:hits].each_with_index do |hit, i|
|
121
121
|
if callback.call(hit)
|
@@ -154,7 +154,7 @@ module Algolia
|
|
154
154
|
# @return [IndexingResponse]
|
155
155
|
#
|
156
156
|
def copy_to(name, opts = {})
|
157
|
-
response = @transporter.write(:POST, path_encode('/1/indexes/%s/operation', @
|
157
|
+
response = @transporter.write(:POST, path_encode('/1/indexes/%s/operation', @name), { operation: 'copy', destination: name }, opts)
|
158
158
|
|
159
159
|
IndexingResponse.new(self, response)
|
160
160
|
end
|
@@ -167,7 +167,7 @@ module Algolia
|
|
167
167
|
# @return [IndexingResponse]
|
168
168
|
#
|
169
169
|
def move_to(name, opts = {})
|
170
|
-
response = @transporter.write(:POST, path_encode('/1/indexes/%s/operation', @
|
170
|
+
response = @transporter.write(:POST, path_encode('/1/indexes/%s/operation', @name), { operation: 'move', destination: name }, opts)
|
171
171
|
|
172
172
|
IndexingResponse.new(self, response)
|
173
173
|
end
|
@@ -184,7 +184,7 @@ module Algolia
|
|
184
184
|
# @return [Hash]
|
185
185
|
#
|
186
186
|
def get_object(object_id, opts = {})
|
187
|
-
@transporter.read(:GET, path_encode('/1/indexes/%s/%s', @
|
187
|
+
@transporter.read(:GET, path_encode('/1/indexes/%s/%s', @name, object_id), {}, opts)
|
188
188
|
end
|
189
189
|
|
190
190
|
# Retrieve one or more objects in a single API call
|
@@ -201,7 +201,7 @@ module Algolia
|
|
201
201
|
|
202
202
|
requests = []
|
203
203
|
object_ids.each do |object_id|
|
204
|
-
request = { indexName: @
|
204
|
+
request = { indexName: @name, objectID: object_id.to_s }
|
205
205
|
|
206
206
|
if attributes_to_retrieve
|
207
207
|
request[:attributesToRetrieve] = attributes_to_retrieve
|
@@ -381,7 +381,7 @@ module Algolia
|
|
381
381
|
# @return [IndexingResponse]
|
382
382
|
#
|
383
383
|
def delete_by(filters, opts = {})
|
384
|
-
response = @transporter.write(:POST, path_encode('/1/indexes/%s/deleteByQuery', @
|
384
|
+
response = @transporter.write(:POST, path_encode('/1/indexes/%s/deleteByQuery', @name), filters, opts)
|
385
385
|
|
386
386
|
IndexingResponse.new(self, response)
|
387
387
|
end
|
@@ -436,7 +436,7 @@ module Algolia
|
|
436
436
|
# @return [Hash]
|
437
437
|
#
|
438
438
|
def get_rule(object_id, opts = {})
|
439
|
-
@transporter.read(:GET, path_encode('/1/indexes/%s/rules/%s', @
|
439
|
+
@transporter.read(:GET, path_encode('/1/indexes/%s/rules/%s', @name, object_id), {}, opts)
|
440
440
|
end
|
441
441
|
|
442
442
|
# Create or update a rule
|
@@ -500,7 +500,7 @@ module Algolia
|
|
500
500
|
get_object_id(rule)
|
501
501
|
end
|
502
502
|
|
503
|
-
response = @transporter.write(:POST, path_encode('/1/indexes/%s/rules/batch', @
|
503
|
+
response = @transporter.write(:POST, path_encode('/1/indexes/%s/rules/batch', @name) + handle_params({ forwardToReplicas: forward_to_replicas, clearExistingRules: clear_existing_rules }), rules, request_options)
|
504
504
|
|
505
505
|
IndexingResponse.new(self, response)
|
506
506
|
end
|
@@ -532,7 +532,7 @@ module Algolia
|
|
532
532
|
request_options.delete(:forwardToReplicas)
|
533
533
|
end
|
534
534
|
|
535
|
-
response = @transporter.write(:POST, path_encode('1/indexes/%s/rules/clear', @
|
535
|
+
response = @transporter.write(:POST, path_encode('1/indexes/%s/rules/clear', @name) + handle_params({ forwardToReplicas: forward_to_replicas }), '', request_options)
|
536
536
|
|
537
537
|
IndexingResponse.new(self, response)
|
538
538
|
end
|
@@ -566,7 +566,7 @@ module Algolia
|
|
566
566
|
|
567
567
|
response = @transporter.write(
|
568
568
|
:DELETE,
|
569
|
-
path_encode('1/indexes/%s/rules/%s', @
|
569
|
+
path_encode('1/indexes/%s/rules/%s', @name, object_id) + handle_params({ forwardToReplicas: forward_to_replicas }),
|
570
570
|
'',
|
571
571
|
request_options
|
572
572
|
)
|
@@ -598,7 +598,7 @@ module Algolia
|
|
598
598
|
# @return [Hash]
|
599
599
|
#
|
600
600
|
def get_synonym(object_id, opts = {})
|
601
|
-
@transporter.read(:GET, path_encode('/1/indexes/%s/synonyms/%s', @
|
601
|
+
@transporter.read(:GET, path_encode('/1/indexes/%s/synonyms/%s', @name, object_id), {}, opts)
|
602
602
|
end
|
603
603
|
|
604
604
|
# Create a new synonym object or update the existing synonym object with the given object ID
|
@@ -666,7 +666,7 @@ module Algolia
|
|
666
666
|
end
|
667
667
|
response = @transporter.write(
|
668
668
|
:POST,
|
669
|
-
path_encode('/1/indexes/%s/synonyms/batch', @
|
669
|
+
path_encode('/1/indexes/%s/synonyms/batch', @name) + handle_params({ forwardToReplicas: forward_to_replicas, replaceExistingSynonyms: replace_existing_synonyms }),
|
670
670
|
synonyms,
|
671
671
|
request_options
|
672
672
|
)
|
@@ -703,7 +703,7 @@ module Algolia
|
|
703
703
|
end
|
704
704
|
response = @transporter.write(
|
705
705
|
:POST,
|
706
|
-
path_encode('1/indexes/%s/synonyms/clear', @
|
706
|
+
path_encode('1/indexes/%s/synonyms/clear', @name) + handle_params({ forwardToReplicas: forward_to_replicas }),
|
707
707
|
'',
|
708
708
|
request_options
|
709
709
|
)
|
@@ -738,7 +738,7 @@ module Algolia
|
|
738
738
|
end
|
739
739
|
response = @transporter.write(
|
740
740
|
:DELETE,
|
741
|
-
path_encode('1/indexes/%s/synonyms/%s', @
|
741
|
+
path_encode('1/indexes/%s/synonyms/%s', @name, object_id) + handle_params({ forwardToReplicas: forward_to_replicas }),
|
742
742
|
'',
|
743
743
|
request_options
|
744
744
|
)
|
@@ -769,9 +769,9 @@ module Algolia
|
|
769
769
|
#
|
770
770
|
def browse_objects(opts = {}, &block)
|
771
771
|
if block_given?
|
772
|
-
ObjectIterator.new(@transporter, @
|
772
|
+
ObjectIterator.new(@transporter, @name, opts).each(&block)
|
773
773
|
else
|
774
|
-
ObjectIterator.new(@transporter, @
|
774
|
+
ObjectIterator.new(@transporter, @name, opts)
|
775
775
|
end
|
776
776
|
end
|
777
777
|
|
@@ -783,9 +783,9 @@ module Algolia
|
|
783
783
|
#
|
784
784
|
def browse_rules(opts = {}, &block)
|
785
785
|
if block_given?
|
786
|
-
RuleIterator.new(@transporter, @
|
786
|
+
RuleIterator.new(@transporter, @name, opts).each(&block)
|
787
787
|
else
|
788
|
-
RuleIterator.new(@transporter, @
|
788
|
+
RuleIterator.new(@transporter, @name, opts)
|
789
789
|
end
|
790
790
|
end
|
791
791
|
|
@@ -797,9 +797,9 @@ module Algolia
|
|
797
797
|
#
|
798
798
|
def browse_synonyms(opts = {}, &block)
|
799
799
|
if block_given?
|
800
|
-
SynonymIterator.new(@transporter, @
|
800
|
+
SynonymIterator.new(@transporter, @name, opts).each(&block)
|
801
801
|
else
|
802
|
-
SynonymIterator.new(@transporter, @
|
802
|
+
SynonymIterator.new(@transporter, @name, opts)
|
803
803
|
end
|
804
804
|
end
|
805
805
|
|
@@ -822,7 +822,7 @@ module Algolia
|
|
822
822
|
request_options.delete(:safe)
|
823
823
|
end
|
824
824
|
|
825
|
-
tmp_index_name = @
|
825
|
+
tmp_index_name = @name + '_tmp_' + rand(10000000).to_s
|
826
826
|
copy_to_response = copy_to(tmp_index_name, request_options.merge({ scope: %w(settings synonyms rules) }))
|
827
827
|
|
828
828
|
if safe
|
@@ -839,7 +839,7 @@ module Algolia
|
|
839
839
|
save_objects_response.wait
|
840
840
|
end
|
841
841
|
|
842
|
-
move_to_response = tmp_index.move_to(@
|
842
|
+
move_to_response = tmp_index.move_to(@name)
|
843
843
|
if safe
|
844
844
|
move_to_response.wait
|
845
845
|
end
|
@@ -924,7 +924,7 @@ module Algolia
|
|
924
924
|
# @return [Hash]
|
925
925
|
#
|
926
926
|
def search(query, opts = {})
|
927
|
-
@transporter.read(:POST, path_encode('/1/indexes/%s/query', @
|
927
|
+
@transporter.read(:POST, path_encode('/1/indexes/%s/query', @name), { 'query': query.to_s }, opts)
|
928
928
|
end
|
929
929
|
|
930
930
|
# Search for values of a given facet, optionally restricting the returned values to those contained
|
@@ -937,7 +937,7 @@ module Algolia
|
|
937
937
|
# @return [Hash]
|
938
938
|
#
|
939
939
|
def search_for_facet_values(facet_name, facet_query, opts = {})
|
940
|
-
@transporter.read(:POST, path_encode('/1/indexes/%s/facets/%s/query', @
|
940
|
+
@transporter.read(:POST, path_encode('/1/indexes/%s/facets/%s/query', @name, facet_name),
|
941
941
|
{ 'facetQuery': facet_query }, opts)
|
942
942
|
end
|
943
943
|
|
@@ -949,7 +949,7 @@ module Algolia
|
|
949
949
|
# @return [Hash]
|
950
950
|
#
|
951
951
|
def search_synonyms(query, opts = {})
|
952
|
-
@transporter.read(:POST, path_encode('/1/indexes/%s/synonyms/search', @
|
952
|
+
@transporter.read(:POST, path_encode('/1/indexes/%s/synonyms/search', @name), { query: query.to_s }, opts)
|
953
953
|
end
|
954
954
|
|
955
955
|
# Search or browse all rules, optionally filtering them by type
|
@@ -960,7 +960,7 @@ module Algolia
|
|
960
960
|
# @return [Hash]
|
961
961
|
#
|
962
962
|
def search_rules(query, opts = {})
|
963
|
-
@transporter.read(:POST, path_encode('/1/indexes/%s/rules/search', @
|
963
|
+
@transporter.read(:POST, path_encode('/1/indexes/%s/rules/search', @name), { query: query.to_s }, opts)
|
964
964
|
end
|
965
965
|
|
966
966
|
# # # # # # # # # # # # # # # # # # # # #
|
@@ -974,9 +974,9 @@ module Algolia
|
|
974
974
|
# @return [Hash]
|
975
975
|
#
|
976
976
|
def get_settings(opts = {})
|
977
|
-
response = @transporter.read(:GET, path_encode('/1/indexes/%s/settings', @
|
977
|
+
response = @transporter.read(:GET, path_encode('/1/indexes/%s/settings', @name) + handle_params({ getVersion: 2 }), {}, opts)
|
978
978
|
|
979
|
-
deserialize_settings(response)
|
979
|
+
deserialize_settings(response, @config.use_latest_settings, @config.symbolize_keys)
|
980
980
|
end
|
981
981
|
|
982
982
|
# Update some index settings. Only specified settings are overridden
|
@@ -987,7 +987,7 @@ module Algolia
|
|
987
987
|
# @return [IndexingResponse]
|
988
988
|
#
|
989
989
|
def set_settings(settings, opts = {})
|
990
|
-
response = @transporter.write(:PUT, path_encode('/1/indexes/%s/settings', @
|
990
|
+
response = @transporter.write(:PUT, path_encode('/1/indexes/%s/settings', @name), settings, opts)
|
991
991
|
|
992
992
|
IndexingResponse.new(self, response)
|
993
993
|
end
|
@@ -1087,7 +1087,7 @@ module Algolia
|
|
1087
1087
|
end
|
1088
1088
|
|
1089
1089
|
def raw_batch(requests, opts)
|
1090
|
-
@transporter.write(:POST, path_encode('/1/indexes/%s/batch', @
|
1090
|
+
@transporter.write(:POST, path_encode('/1/indexes/%s/batch', @name), { requests: requests }, opts)
|
1091
1091
|
end
|
1092
1092
|
end
|
1093
1093
|
end
|
@@ -132,10 +132,10 @@ module Algolia
|
|
132
132
|
# @return [Hash] merged headers
|
133
133
|
#
|
134
134
|
def generate_headers(request_options = {})
|
135
|
-
headers
|
136
|
-
extra_headers
|
137
|
-
@config.
|
138
|
-
extra_headers.each { |key, val| headers[key.to_s]
|
135
|
+
headers = {}
|
136
|
+
extra_headers = request_options.headers || {}
|
137
|
+
@config.headers.each { |key, val| headers[key.to_s] = val }
|
138
|
+
extra_headers.each { |key, val| headers[key.to_s] = val }
|
139
139
|
if request_options.compression_type == Defaults::GZIP_ENCODING
|
140
140
|
headers['Accept-Encoding'] = Defaults::GZIP_ENCODING
|
141
141
|
end
|
data/lib/algolia/version.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
module Algolia
|
2
|
-
|
3
|
-
class AlgoliaConfig
|
2
|
+
class BaseConfig
|
4
3
|
attr_accessor app_id: String
|
5
4
|
|
6
5
|
attr_accessor api_key: String
|
7
6
|
|
8
|
-
attr_accessor
|
7
|
+
attr_accessor headers: Hash[String, String]
|
9
8
|
|
10
9
|
attr_accessor batch_size: Integer
|
11
10
|
|
@@ -20,5 +19,6 @@ module Algolia
|
|
20
19
|
attr_accessor symbolize_keys: bool
|
21
20
|
|
22
21
|
def initialize: (?::Hash[Symbol, String|[String]] opts) -> void
|
22
|
+
def set_extra_header: (Symbol|String key, String value) -> void
|
23
23
|
end
|
24
24
|
end
|
@@ -11,14 +11,14 @@ class AnalyticsClientTest < BaseTest
|
|
11
11
|
index1.save_object!({ objectID: 'one' })
|
12
12
|
index2.save_object!({ objectID: 'one' })
|
13
13
|
|
14
|
-
ab_test_name = index1.
|
14
|
+
ab_test_name = index1.name
|
15
15
|
tomorrow = Time.now + 24*60*60
|
16
16
|
|
17
17
|
ab_test = {
|
18
18
|
name: ab_test_name,
|
19
19
|
variants: [
|
20
|
-
{ index: index1.
|
21
|
-
{ index: index2.
|
20
|
+
{ index: index1.name, trafficPercentage: 60, description: 'a description' },
|
21
|
+
{ index: index2.name, trafficPercentage: 40 }
|
22
22
|
],
|
23
23
|
endAt: tomorrow.strftime('%Y-%m-%dT%H:%M:%SZ')
|
24
24
|
}
|
@@ -74,14 +74,14 @@ class AnalyticsClientTest < BaseTest
|
|
74
74
|
|
75
75
|
index.save_object!({ objectID: 'one' })
|
76
76
|
|
77
|
-
ab_test_name = index.
|
77
|
+
ab_test_name = index.name
|
78
78
|
tomorrow = Time.now + 24*60*60
|
79
79
|
|
80
80
|
ab_test = {
|
81
81
|
name: ab_test_name,
|
82
82
|
variants: [
|
83
|
-
{ index: index.
|
84
|
-
{ index: index.
|
83
|
+
{ index: index.name, trafficPercentage: 90 },
|
84
|
+
{ index: index.name, trafficPercentage: 10, customSearchParameters: { ignorePlurals: true } }
|
85
85
|
],
|
86
86
|
endAt: tomorrow.strftime('%Y-%m-%dT%H:%M:%SZ')
|
87
87
|
}
|
@@ -17,7 +17,7 @@ class InsightsClientTest < BaseTest
|
|
17
17
|
client.send_event({
|
18
18
|
eventType: 'click',
|
19
19
|
eventName: 'foo',
|
20
|
-
index: index.
|
20
|
+
index: index.name,
|
21
21
|
userToken: 'bar',
|
22
22
|
objectIDs: %w(one two),
|
23
23
|
timestamp: (today - 2).strftime('%Q').to_i
|
@@ -27,14 +27,14 @@ class InsightsClientTest < BaseTest
|
|
27
27
|
{
|
28
28
|
eventType: 'click',
|
29
29
|
eventName: 'foo',
|
30
|
-
index: index.
|
30
|
+
index: index.name,
|
31
31
|
userToken: 'bar',
|
32
32
|
objectIDs: %w(one two),
|
33
33
|
timestamp: (today - 2).strftime('%Q').to_i
|
34
34
|
}, {
|
35
35
|
eventType: 'click',
|
36
36
|
eventName: 'foo',
|
37
|
-
index: index.
|
37
|
+
index: index.name,
|
38
38
|
userToken: 'bar',
|
39
39
|
objectIDs: %w(one two),
|
40
40
|
timestamp: (today - 2).strftime('%Q').to_i
|
@@ -42,37 +42,37 @@ class InsightsClientTest < BaseTest
|
|
42
42
|
])
|
43
43
|
|
44
44
|
user_client = client.user('bar')
|
45
|
-
response = user_client.clicked_object_ids('foo', index.
|
45
|
+
response = user_client.clicked_object_ids('foo', index.name, %w(one two))
|
46
46
|
assert_equal 200, response[:status]
|
47
47
|
assert_equal 'OK', response[:message]
|
48
48
|
|
49
49
|
query_id = index.search('', { clickAnalytics: true })[:queryID]
|
50
50
|
|
51
|
-
response = user_client.clicked_object_ids_after_search('foo', index.
|
51
|
+
response = user_client.clicked_object_ids_after_search('foo', index.name, %w(one two), [1, 2], query_id)
|
52
52
|
assert_equal 200, response[:status]
|
53
53
|
assert_equal 'OK', response[:message]
|
54
54
|
|
55
|
-
response = user_client.clicked_filters('foo', index.
|
55
|
+
response = user_client.clicked_filters('foo', index.name, %w(filter:foo filter:bar))
|
56
56
|
assert_equal 200, response[:status]
|
57
57
|
assert_equal 'OK', response[:message]
|
58
58
|
|
59
|
-
response = user_client.converted_object_ids('foo', index.
|
59
|
+
response = user_client.converted_object_ids('foo', index.name, %w(one two))
|
60
60
|
assert_equal 200, response[:status]
|
61
61
|
assert_equal 'OK', response[:message]
|
62
62
|
|
63
|
-
response = user_client.converted_object_ids_after_search('foo', index.
|
63
|
+
response = user_client.converted_object_ids_after_search('foo', index.name, %w(one two), query_id)
|
64
64
|
assert_equal 200, response[:status]
|
65
65
|
assert_equal 'OK', response[:message]
|
66
66
|
|
67
|
-
response = user_client.converted_filters('foo', index.
|
67
|
+
response = user_client.converted_filters('foo', index.name, %w(filter:foo filter:bar))
|
68
68
|
assert_equal 200, response[:status]
|
69
69
|
assert_equal 'OK', response[:message]
|
70
70
|
|
71
|
-
response = user_client.viewed_object_ids('foo', index.
|
71
|
+
response = user_client.viewed_object_ids('foo', index.name, %w(one two))
|
72
72
|
assert_equal 200, response[:status]
|
73
73
|
assert_equal 'OK', response[:message]
|
74
74
|
|
75
|
-
response = user_client.viewed_filters('foo', index.
|
75
|
+
response = user_client.viewed_filters('foo', index.name, %w(filter:foo filter:bar))
|
76
76
|
assert_equal 200, response[:status]
|
77
77
|
assert_equal 'OK', response[:message]
|
78
78
|
end
|
@@ -80,10 +80,10 @@ class SearchClientTest < BaseTest
|
|
80
80
|
copy_rules_index = @@search_client.init_index(get_test_index_name('copy_index_rules'))
|
81
81
|
copy_synonyms_index = @@search_client.init_index(get_test_index_name('copy_index_synonyms'))
|
82
82
|
copy_full_copy_index = @@search_client.init_index(get_test_index_name('copy_index_full_copy'))
|
83
|
-
@@search_client.copy_settings!(@index_name, copy_settings_index.
|
84
|
-
@@search_client.copy_rules!(@index_name, copy_rules_index.
|
85
|
-
@@search_client.copy_synonyms!(@index_name, copy_synonyms_index.
|
86
|
-
@@search_client.copy_index!(@index_name, copy_full_copy_index.
|
83
|
+
@@search_client.copy_settings!(@index_name, copy_settings_index.name)
|
84
|
+
@@search_client.copy_rules!(@index_name, copy_rules_index.name)
|
85
|
+
@@search_client.copy_synonyms!(@index_name, copy_synonyms_index.name)
|
86
|
+
@@search_client.copy_index!(@index_name, copy_full_copy_index.name)
|
87
87
|
|
88
88
|
assert_equal @index.get_settings, copy_settings_index.get_settings
|
89
89
|
assert_equal @index.get_rule(rule[:objectID]), copy_rules_index.get_rule(rule[:objectID])
|
@@ -93,7 +93,7 @@ class SearchClientTest < BaseTest
|
|
93
93
|
assert_equal @index.get_synonym(synonym[:objectID]), copy_full_copy_index.get_synonym(synonym[:objectID])
|
94
94
|
|
95
95
|
moved_index = @@search_client.init_index(get_test_index_name('move_index'))
|
96
|
-
@@search_client.move_index!(@index_name, moved_index.
|
96
|
+
@@search_client.move_index!(@index_name, moved_index.name)
|
97
97
|
|
98
98
|
moved_index.get_synonym('google_placeholder')
|
99
99
|
moved_index.get_rule('company_auto_faceting')
|
@@ -233,7 +233,16 @@ class SearchClientTest < BaseTest
|
|
233
233
|
|
234
234
|
assert_equal 'Key does not exist', exception.message
|
235
235
|
|
236
|
-
|
236
|
+
loop do
|
237
|
+
begin
|
238
|
+
@@search_client.restore_api_key!(@api_key[:value])
|
239
|
+
break
|
240
|
+
rescue Algolia::AlgoliaHttpError => e
|
241
|
+
if e.code != 404
|
242
|
+
raise StandardError
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
237
246
|
|
238
247
|
restored_key = @@search_client.get_api_key(@api_key[:value])
|
239
248
|
|
@@ -261,8 +270,8 @@ class SearchClientTest < BaseTest
|
|
261
270
|
end
|
262
271
|
|
263
272
|
def test_multiple_operations
|
264
|
-
index_name1 = @index1.
|
265
|
-
index_name2 = @index2.
|
273
|
+
index_name1 = @index1.name
|
274
|
+
index_name2 = @index2.name
|
266
275
|
|
267
276
|
response = @@search_client.multiple_batch!([
|
268
277
|
{ indexName: index_name1, action: 'addObject', body: { firstname: 'Jimmie' } },
|
@@ -317,12 +326,12 @@ class SearchClientTest < BaseTest
|
|
317
326
|
now = Time.now.to_i
|
318
327
|
secured_api_key = Algolia::Search::Client.generate_secured_api_key(SEARCH_KEY_1, {
|
319
328
|
validUntil: now + (10 * 60),
|
320
|
-
restrictIndices: @index1.
|
329
|
+
restrictIndices: @index1.name
|
321
330
|
})
|
322
331
|
|
323
332
|
secured_client = Algolia::Search::Client.create(APPLICATION_ID_1, secured_api_key)
|
324
|
-
secured_index1 = secured_client.init_index(@index1.
|
325
|
-
secured_index2 = secured_client.init_index(@index2.
|
333
|
+
secured_index1 = secured_client.init_index(@index1.name)
|
334
|
+
secured_index2 = secured_client.init_index(@index2.name)
|
326
335
|
|
327
336
|
secured_index1.search('')
|
328
337
|
exception = assert_raises Algolia::AlgoliaHttpError do
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'algolia'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class AlgoliaConfigTest
|
5
|
+
describe 'set an extra header' do
|
6
|
+
def before_all
|
7
|
+
@config = Algolia::BaseConfig.new(application_id: 'app_id', api_key: 'api_key')
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_set_extra_header
|
11
|
+
@config.set_extra_header('foo', 'bar')
|
12
|
+
assert @config.headers['foo']
|
13
|
+
assert_equal @config.headers['foo'], 'bar'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -18,7 +18,35 @@ class HelpersTest
|
|
18
18
|
replicas: %w(index1 index2)
|
19
19
|
}
|
20
20
|
|
21
|
-
deserialized_settings = deserialize_settings(old_settings)
|
21
|
+
deserialized_settings = deserialize_settings(old_settings, true, true)
|
22
|
+
assert_equal new_settings, deserialized_settings
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_deserialize_settings_with_old_settings
|
26
|
+
old_settings = {
|
27
|
+
attributesToIndex: %w(attr1 attr2),
|
28
|
+
numericAttributesToIndex: %w(attr1 attr2),
|
29
|
+
slaves: %w(index1 index2)
|
30
|
+
}
|
31
|
+
|
32
|
+
deserialized_settings = deserialize_settings(old_settings, false, true)
|
33
|
+
assert_equal old_settings, deserialized_settings
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_deserialize_settings_with_string
|
37
|
+
old_settings = {
|
38
|
+
'attributesToIndex' => %w(attr1 attr2),
|
39
|
+
'numericAttributesToIndex' => %w(attr1 attr2),
|
40
|
+
'slaves' => %w(index1 index2)
|
41
|
+
}
|
42
|
+
|
43
|
+
new_settings = {
|
44
|
+
'searchableAttributes' => %w(attr1 attr2),
|
45
|
+
'numericAttributesForFiltering' => %w(attr1 attr2),
|
46
|
+
'replicas' => %w(index1 index2)
|
47
|
+
}
|
48
|
+
|
49
|
+
deserialized_settings = deserialize_settings(old_settings, true, false)
|
22
50
|
assert_equal new_settings, deserialized_settings
|
23
51
|
end
|
24
52
|
end
|
@@ -13,7 +13,7 @@ class RetryStrategyTest
|
|
13
13
|
stateful_hosts << "#{@app_id}-4.algolianet.com"
|
14
14
|
stateful_hosts << "#{@app_id}-5.algolianet.com"
|
15
15
|
stateful_hosts << "#{@app_id}-6.algolianet.com"
|
16
|
-
@config = Algolia::Search::Config.new(
|
16
|
+
@config = Algolia::Search::Config.new(application_id: @app_id, api_key: @api_key, custom_hosts: stateful_hosts)
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_resets_expired_hosts_according_to_read_type
|
@@ -74,7 +74,7 @@ class RetryStrategyTest
|
|
74
74
|
describe 'All hosts are unreachable' do
|
75
75
|
def test_failure_when_all_hosts_are_down
|
76
76
|
stateful_hosts = ['0.0.0.0']
|
77
|
-
@config = Algolia::Search::Config.new(
|
77
|
+
@config = Algolia::Search::Config.new(application_id: 'foo', api_key: 'bar', custom_hosts: stateful_hosts)
|
78
78
|
client = Algolia::Search::Client.create_with_config(@config)
|
79
79
|
index = client.init_index(get_test_index_name('failure'))
|
80
80
|
|
@@ -91,7 +91,7 @@ class RetryStrategyTest
|
|
91
91
|
super
|
92
92
|
@app_id = 'app_id'
|
93
93
|
@api_key = 'api_key'
|
94
|
-
@config = Algolia::Search::Config.new(
|
94
|
+
@config = Algolia::Search::Config.new(application_id: @app_id, api_key: @api_key)
|
95
95
|
@retry_strategy = Algolia::Transport::RetryStrategy.new(@config)
|
96
96
|
@hosts = @retry_strategy.get_tryable_hosts(READ|WRITE)
|
97
97
|
end
|
data/test/test_helper.rb
CHANGED
@@ -24,7 +24,7 @@ class Minitest::Test
|
|
24
24
|
|
25
25
|
include Minitest::Hooks
|
26
26
|
include Helpers
|
27
|
-
@@search_config = Algolia::Search::Config.new(
|
27
|
+
@@search_config = Algolia::Search::Config.new(application_id: APPLICATION_ID_1, api_key: ADMIN_KEY_1, user_agent: USER_AGENT)
|
28
28
|
@@search_client = Algolia::Search::Client.new(@@search_config)
|
29
29
|
end
|
30
30
|
|
data/upgrade_guide.md
CHANGED
@@ -5,7 +5,7 @@ First, you'll have to include the new version in your Gemfile. To do so, change
|
|
5
5
|
|
6
6
|
```diff
|
7
7
|
- gem 'algoliasearch'
|
8
|
-
+ gem 'algolia', git: 'https://github.com/algolia/algoliasearch-client-ruby.git', tag: 'v2.0.0-
|
8
|
+
+ gem 'algolia', git: 'https://github.com/algolia/algoliasearch-client-ruby.git', tag: 'v2.0.0-beta.1'
|
9
9
|
```
|
10
10
|
|
11
11
|
Then, you'll need to change your current `require` statements:
|
@@ -38,11 +38,17 @@ index = client.init_index('index_name')
|
|
38
38
|
client = Algolia::Search::Client.create('APP_ID', 'API_KEY')
|
39
39
|
index = client.init_index('index_name')
|
40
40
|
# or
|
41
|
-
search_config = Algolia::Search::Config.new(
|
41
|
+
search_config = Algolia::Search::Config.new(application_id: app_id, api_key: api_key)
|
42
42
|
client = Algolia::Search::Client.create_with_config(search_config)
|
43
43
|
index = client.init_index('index_name')
|
44
44
|
```
|
45
45
|
|
46
|
+
By default the keys of the response hashes are symbols. If you wish to change that for strings, use the following configuration
|
47
|
+
```ruby
|
48
|
+
search_config = Algolia::Search::Config.new(application_id: app_id, api_key: api_key, symbolize_keys: false)
|
49
|
+
client = Algolia::Search::Client.create_with_config(search_config)
|
50
|
+
```
|
51
|
+
|
46
52
|
## Search parameters and request options
|
47
53
|
The search parameters and request options are still optional, but they are combined into a single hash instead of two.
|
48
54
|
For example:
|
@@ -55,12 +61,8 @@ index.search('query', search_params, request_opts)
|
|
55
61
|
|
56
62
|
# After
|
57
63
|
opts = {
|
58
|
-
:
|
59
|
-
|
60
|
-
},
|
61
|
-
:params => {
|
62
|
-
hitsPerPage: 50
|
63
|
-
}
|
64
|
+
headers: { 'X-Algolia-UserToken': 'user123' },
|
65
|
+
hitsPerPage: 50
|
64
66
|
}
|
65
67
|
index.search('query', opts)
|
66
68
|
```
|
@@ -69,6 +71,20 @@ index.search('query', opts)
|
|
69
71
|
|
70
72
|
### `Client`
|
71
73
|
|
74
|
+
#### `set_extra_header`
|
75
|
+
The `set_extra_header` method has been moved from the Client to the `Algolia::BaseConfig` class. You have to define your extra headers on Client instantiation.
|
76
|
+
```ruby
|
77
|
+
# Before
|
78
|
+
client.set_extra_header('admin', 'admin-key')
|
79
|
+
|
80
|
+
# After
|
81
|
+
# `Algolia::Search::Config` inherits from `Algolia::BaseConfig`
|
82
|
+
config = Algolia::Search::Config.new(app_id: 'APP_ID', api_key: 'API_KEY')
|
83
|
+
config.set_extra_header('admin', 'admin-key')
|
84
|
+
|
85
|
+
client = Algolia::Search::Client.create_with_config(config)
|
86
|
+
```
|
87
|
+
|
72
88
|
#### `multiple_queries`
|
73
89
|
The `strategy` parameter is no longer a string, but a key in the `requestOptions`.
|
74
90
|
```ruby
|
@@ -244,12 +260,8 @@ index.search('query', search_params, request_opts)
|
|
244
260
|
|
245
261
|
# After
|
246
262
|
opts = {
|
247
|
-
:
|
248
|
-
|
249
|
-
},
|
250
|
-
:params => {
|
251
|
-
hitsPerPage: 50
|
252
|
-
}
|
263
|
+
headers: { 'X-Algolia-UserToken': 'user123' },
|
264
|
+
hitsPerPage: 50
|
253
265
|
}
|
254
266
|
index.search('query', opts)
|
255
267
|
```
|
@@ -265,12 +277,8 @@ index.search_for_facet_values('category', 'phone', search_params, request_opts)
|
|
265
277
|
|
266
278
|
# After
|
267
279
|
opts = {
|
268
|
-
:
|
269
|
-
|
270
|
-
},
|
271
|
-
:params => {
|
272
|
-
hitsPerPage: 50
|
273
|
-
}
|
280
|
+
headers: { 'X-Algolia-UserToken': 'user123' },
|
281
|
+
hitsPerPage: 50
|
274
282
|
}
|
275
283
|
index.search_for_facet_values('category', 'phone', opts)
|
276
284
|
```
|
@@ -590,6 +598,6 @@ client = Algolia::Client.new({
|
|
590
598
|
})
|
591
599
|
|
592
600
|
# After
|
593
|
-
search_config = Algolia::Search::Config.new(
|
601
|
+
search_config = Algolia::Search::Config.new(application_id: 'app_id', api_key: 'api_key', read_timeout: 10, connect_timeout: 2)
|
594
602
|
client = Algolia::Search::Client.create_with_config(search_config)
|
595
603
|
```
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: algolia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.pre.
|
4
|
+
version: 2.0.0.pre.beta.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Algolia
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -178,7 +178,8 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
-
description:
|
181
|
+
description: This is the alpha version of the upcoming v2 release of Algolia Client.
|
182
|
+
Please keep on using the algoliasearch gem in the meantime.
|
182
183
|
email:
|
183
184
|
- support@algolia.com
|
184
185
|
executables: []
|
@@ -203,8 +204,8 @@ files:
|
|
203
204
|
- lib/algolia.rb
|
204
205
|
- lib/algolia/account_client.rb
|
205
206
|
- lib/algolia/analytics_client.rb
|
206
|
-
- lib/algolia/config/algolia_config.rb
|
207
207
|
- lib/algolia/config/analytics_config.rb
|
208
|
+
- lib/algolia/config/base_config.rb
|
208
209
|
- lib/algolia/config/insights_config.rb
|
209
210
|
- lib/algolia/config/recommendation_config.rb
|
210
211
|
- lib/algolia/config/search_config.rb
|
@@ -264,16 +265,20 @@ files:
|
|
264
265
|
- test/algolia/integration/recommendation_client_test.rb
|
265
266
|
- test/algolia/integration/search_client_test.rb
|
266
267
|
- test/algolia/integration/search_index_test.rb
|
268
|
+
- test/algolia/unit/algolia_config_test.rb
|
267
269
|
- test/algolia/unit/helpers_test.rb
|
268
270
|
- test/algolia/unit/retry_strategy_test.rb
|
269
271
|
- test/algolia/unit/user_agent_test.rb
|
270
272
|
- test/test_helper.rb
|
271
273
|
- upgrade_guide.md
|
272
|
-
homepage:
|
274
|
+
homepage: https://github.com/algolia/algoliasearch-client-ruby/tree/release/v2
|
273
275
|
licenses:
|
274
276
|
- MIT
|
275
|
-
metadata:
|
276
|
-
|
277
|
+
metadata:
|
278
|
+
bug_tracker_uri: https://github.com/algolia/algoliasearch-client-ruby/issues
|
279
|
+
documentation_uri: http://www.rubydoc.info/gems/algolia
|
280
|
+
source_code_uri: https://github.com/algolia/algoliasearch-client-ruby/tree/release/v2
|
281
|
+
post_install_message:
|
277
282
|
rdoc_options: []
|
278
283
|
require_paths:
|
279
284
|
- lib
|
@@ -288,10 +293,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
293
|
- !ruby/object:Gem::Version
|
289
294
|
version: 1.3.1
|
290
295
|
requirements: []
|
291
|
-
rubygems_version: 3.0.
|
292
|
-
signing_key:
|
296
|
+
rubygems_version: 3.0.3
|
297
|
+
signing_key:
|
293
298
|
specification_version: 4
|
294
|
-
summary: A simple Ruby client for the algolia.com REST API
|
299
|
+
summary: A simple Ruby client for the algolia.com REST API (alpha release)
|
295
300
|
test_files:
|
296
301
|
- test/algolia/integration/account_client_test.rb
|
297
302
|
- test/algolia/integration/analytics_client_test.rb
|
@@ -301,6 +306,7 @@ test_files:
|
|
301
306
|
- test/algolia/integration/recommendation_client_test.rb
|
302
307
|
- test/algolia/integration/search_client_test.rb
|
303
308
|
- test/algolia/integration/search_index_test.rb
|
309
|
+
- test/algolia/unit/algolia_config_test.rb
|
304
310
|
- test/algolia/unit/helpers_test.rb
|
305
311
|
- test/algolia/unit/retry_strategy_test.rb
|
306
312
|
- test/algolia/unit/user_agent_test.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
module Algolia
|
4
|
-
# Class AlgoliaConfig
|
5
|
-
class AlgoliaConfig
|
6
|
-
attr_accessor :app_id, :api_key, :default_headers, :batch_size, :read_timeout, :write_timeout, :connect_timeout, :compression_type,
|
7
|
-
:symbolize_keys
|
8
|
-
|
9
|
-
#
|
10
|
-
# @option options [String] :app_id
|
11
|
-
# @option options [String] :api_key
|
12
|
-
# @option options [Integer] :batch_size
|
13
|
-
# @option options [Integer] :read_timeout
|
14
|
-
# @option options [Integer] :write_timeout
|
15
|
-
# @option options [Integer] :connect_timeout
|
16
|
-
# @option options [Boolean] :symbolize_keys
|
17
|
-
#
|
18
|
-
def initialize(opts = {})
|
19
|
-
raise AlgoliaError, 'No Application ID provided, please set :app_id' unless opts.has_key?(:app_id)
|
20
|
-
raise AlgoliaError, 'No API key provided, please set :api_key' unless opts.has_key?(:api_key)
|
21
|
-
|
22
|
-
@app_id = opts[:app_id]
|
23
|
-
@api_key = opts[:api_key]
|
24
|
-
|
25
|
-
@default_headers = {
|
26
|
-
Defaults::HEADER_API_KEY => @api_key,
|
27
|
-
Defaults::HEADER_APP_ID => @app_id,
|
28
|
-
'Content-Type' => 'application/json; charset=utf-8',
|
29
|
-
'User-Agent' => UserAgent.value
|
30
|
-
}
|
31
|
-
|
32
|
-
@batch_size = opts[:batch_size] || Defaults::BATCH_SIZE
|
33
|
-
@read_timeout = opts[:read_timeout] || Defaults::READ_TIMEOUT
|
34
|
-
@write_timeout = opts[:write_timeout] || Defaults::WRITE_TIMEOUT
|
35
|
-
@connect_timeout = opts[:connect_timeout] || Defaults::CONNECT_TIMEOUT
|
36
|
-
@compression_type = opts[:compression_type] || Defaults::NONE_ENCODING
|
37
|
-
@symbolize_keys = opts[:symbolize_keys] || true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|