typesense 0.1.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,12 +4,19 @@ module Typesense
4
4
  class Client
5
5
  attr_reader :configuration
6
6
  attr_reader :collections
7
+ attr_reader :aliases
8
+ attr_reader :keys
7
9
  attr_reader :debug
10
+ attr_reader :health
8
11
 
9
12
  def initialize(options = {})
10
- @configuration ||= Configuration.new(options)
11
- @collections = Collections.new(@configuration)
12
- @debug = Debug.new(@configuration)
13
+ @configuration = Configuration.new(options)
14
+ @api_call = ApiCall.new(@configuration)
15
+ @collections = Collections.new(@api_call)
16
+ @aliases = Aliases.new(@api_call)
17
+ @keys = Keys.new(@api_call)
18
+ @debug = Debug.new(@api_call)
19
+ @health = Health.new(@api_call)
13
20
  end
14
21
  end
15
22
  end
@@ -3,19 +3,21 @@
3
3
  module Typesense
4
4
  class Collection
5
5
  attr_reader :documents
6
+ attr_reader :overrides
6
7
 
7
- def initialize(configuration, name)
8
- @configuration = configuration
9
- @name = name
10
- @documents = Documents.new(@configuration, @name)
8
+ def initialize(name, api_call)
9
+ @name = name
10
+ @api_call = api_call
11
+ @documents = Documents.new(@name, @api_call)
12
+ @overrides = Overrides.new(@name, @api_call)
11
13
  end
12
14
 
13
15
  def retrieve
14
- ApiCall.new(@configuration).get(endpoint_path)
16
+ @api_call.get(endpoint_path)
15
17
  end
16
18
 
17
19
  def delete
18
- ApiCall.new(@configuration).delete(endpoint_path)
20
+ @api_call.delete(endpoint_path)
19
21
  end
20
22
 
21
23
  private
@@ -4,21 +4,21 @@ module Typesense
4
4
  class Collections
5
5
  RESOURCE_PATH = '/collections'
6
6
 
7
- def initialize(configuration)
8
- @configuration = configuration
9
- @collections = {}
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ @collections = {}
10
10
  end
11
11
 
12
12
  def create(schema)
13
- ApiCall.new(@configuration).post(RESOURCE_PATH, schema)
13
+ @api_call.post(RESOURCE_PATH, schema)
14
14
  end
15
15
 
16
16
  def retrieve
17
- ApiCall.new(@configuration).get(RESOURCE_PATH)
17
+ @api_call.get(RESOURCE_PATH)
18
18
  end
19
19
 
20
20
  def [](collection_name)
21
- @collections[collection_name] ||= Collection.new(@configuration, collection_name)
21
+ @collections[collection_name] ||= Collection.new(collection_name, @api_call)
22
22
  end
23
23
  end
24
24
  end
@@ -2,37 +2,53 @@
2
2
 
3
3
  module Typesense
4
4
  class Configuration
5
- attr_accessor :master_node
6
- attr_accessor :read_replica_nodes
7
- attr_accessor :timeout_seconds
5
+ attr_accessor :nodes
6
+ attr_accessor :nearest_node
7
+ attr_accessor :connection_timeout_seconds
8
+ attr_accessor :healthcheck_interval_seconds
9
+ attr_accessor :num_retries
10
+ attr_accessor :retry_interval_seconds
11
+ attr_accessor :api_key
12
+ attr_accessor :logger
13
+ attr_accessor :log_level
8
14
 
9
15
  def initialize(options = {})
10
- @master_node = options[:master_node] || {
11
- host: 'localhost',
12
- port: '8108',
13
- protocol: 'http'
14
- }
15
-
16
- @read_replica_nodes = options[:read_replica_nodes] || []
17
- @timeout_seconds = options[:timeout_seconds] || 10
16
+ @nodes = options[:nodes] || []
17
+ @nearest_node = options[:nearest_node]
18
+ @connection_timeout_seconds = options[:connection_timeout_seconds] || options[:timeout_seconds] || 10
19
+ @healthcheck_interval_seconds = options[:healthcheck_interval_seconds] || 15
20
+ @num_retries = options[:num_retries] || @nodes.length + (@nearest_node.nil? ? 0 : 1) || 3
21
+ @retry_interval_seconds = options[:retry_interval_seconds] || 0.1
22
+ @api_key = options[:api_key]
23
+
24
+ @logger = options[:logger] || Logger.new(STDOUT)
25
+ @log_level = options[:log_level] || Logger::WARN
26
+ @logger.level = @log_level
27
+
28
+ show_deprecation_warnings(options)
29
+ validate!
18
30
  end
19
31
 
20
32
  def validate!
21
- if @master_node.nil? ||
22
- node_missing_parameters?(@master_node)
23
- raise Error::MissingConfiguration, 'Missing required configuration. Ensure that master_node[:protocol], master_node[:host], master_node[:port] and master_node[:api_key] are set.'
33
+ if @nodes.nil? ||
34
+ @nodes.empty? ||
35
+ @nodes.any? { |node| node_missing_parameters?(node) }
36
+ raise Error::MissingConfiguration, 'Missing required configuration. Ensure that nodes[][:protocol], nodes[][:host] and nodes[][:port] are set.'
24
37
  end
25
38
 
26
- if !@read_replica_nodes.nil? &&
27
- @read_replica_nodes.any? { |node| node_missing_parameters?(node) }
28
- raise Error::MissingConfiguration, 'Missing required configuration for read_replica_nodes. Ensure that read_replica_nodes[][:protocol], read_replica_nodes[][:host], read_replica_nodes[][:port] and read_replica_nodes[][:api_key] are set.'
29
- end
39
+ raise Error::MissingConfiguration, 'Missing required configuration. Ensure that api_key is set.' if @api_key.nil?
30
40
  end
31
41
 
32
42
  private
33
43
 
34
44
  def node_missing_parameters?(node)
35
- %i[protocol host port api_key].any? { |attr| node.send(:[], attr).nil? }
45
+ %i[protocol host port].any? { |attr| node.send(:[], attr).nil? }
46
+ end
47
+
48
+ def show_deprecation_warnings(options)
49
+ @logger.warn 'Deprecation warning: timeout_seconds is now renamed to connection_timeout_seconds' unless options[:timeout_seconds].nil?
50
+ @logger.warn 'Deprecation warning: master_node is now consolidated to nodes, starting with Typesense Server v0.12' unless options[:master_node].nil?
51
+ @logger.warn 'Deprecation warning: read_replica_nodes is now consolidated to nodes, starting with Typesense Server v0.12' unless options[:read_replica_nodes].nil?
36
52
  end
37
53
  end
38
54
  end
@@ -4,12 +4,12 @@ module Typesense
4
4
  class Debug
5
5
  RESOURCE_PATH = '/debug'
6
6
 
7
- def initialize(configuration)
8
- @configuration = configuration
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
9
  end
10
10
 
11
11
  def retrieve
12
- ApiCall.new(@configuration).get(RESOURCE_PATH)
12
+ @api_call.get(RESOURCE_PATH)
13
13
  end
14
14
  end
15
15
  end
@@ -2,18 +2,18 @@
2
2
 
3
3
  module Typesense
4
4
  class Document
5
- def initialize(configuration, collection_name, document_id)
6
- @configuration = configuration
5
+ def initialize(collection_name, document_id, api_call)
7
6
  @collection_name = collection_name
8
7
  @document_id = document_id
8
+ @api_call = api_call
9
9
  end
10
10
 
11
11
  def retrieve
12
- ApiCall.new(@configuration).get(endpoint_path)
12
+ @api_call.get(endpoint_path)
13
13
  end
14
14
 
15
15
  def delete
16
- ApiCall.new(@configuration).delete(endpoint_path)
16
+ @api_call.delete(endpoint_path)
17
17
  end
18
18
 
19
19
  private
@@ -4,26 +4,31 @@ module Typesense
4
4
  class Documents
5
5
  RESOURCE_PATH = '/documents'
6
6
 
7
- def initialize(configuration, collection_name)
8
- @configuration = configuration
7
+ def initialize(collection_name, api_call)
9
8
  @collection_name = collection_name
9
+ @api_call = api_call
10
10
  @documents = {}
11
11
  end
12
12
 
13
13
  def create(document)
14
- ApiCall.new(@configuration).post(endpoint_path, document)
14
+ @api_call.post(endpoint_path, document)
15
+ end
16
+
17
+ def create_many(documents)
18
+ documents_in_jsonl_format = documents.map { |document| JSON.dump(document) }.join("\n")
19
+ @api_call.post(endpoint_path('import'), as_json: false, body: documents_in_jsonl_format)
15
20
  end
16
21
 
17
22
  def export
18
- ApiCall.new(@configuration).get_unparsed_response(endpoint_path('export')).split("\n")
23
+ (@api_call.get(endpoint_path('export')) || '').split("\n")
19
24
  end
20
25
 
21
26
  def search(search_parameters)
22
- ApiCall.new(@configuration).get(endpoint_path('search'), search_parameters)
27
+ @api_call.get(endpoint_path('search'), search_parameters)
23
28
  end
24
29
 
25
30
  def [](document_id)
26
- @documents[document_id] ||= Document.new(@configuration, @collection_name, document_id)
31
+ @documents[document_id] ||= Document.new(@collection_name, document_id, @api_call)
27
32
  end
28
33
 
29
34
  private
@@ -23,7 +23,13 @@ module Typesense
23
23
  class ServerError < Error
24
24
  end
25
25
 
26
+ class HTTPStatus0Error < Error
27
+ end
28
+
26
29
  class NoMethodError < ::NoMethodError
27
30
  end
31
+
32
+ class HTTPError < Error
33
+ end
28
34
  end
29
35
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Health
5
+ RESOURCE_PATH = '/health'
6
+
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ end
10
+
11
+ def retrieve
12
+ @api_call.get(RESOURCE_PATH)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Key
5
+ def initialize(id, api_call)
6
+ @id = id
7
+ @api_call = api_call
8
+ end
9
+
10
+ def retrieve
11
+ @api_call.get(endpoint_path)
12
+ end
13
+
14
+ def delete
15
+ @api_call.delete(endpoint_path)
16
+ end
17
+
18
+ private
19
+
20
+ def endpoint_path
21
+ "#{Keys::RESOURCE_PATH}/#{@id}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'base64'
4
+
5
+ module Typesense
6
+ class Keys
7
+ RESOURCE_PATH = '/keys'
8
+
9
+ def initialize(api_call)
10
+ @api_call = api_call
11
+ @keys = {}
12
+ end
13
+
14
+ def create(parameters)
15
+ @api_call.post(RESOURCE_PATH, parameters)
16
+ end
17
+
18
+ def retrieve
19
+ @api_call.get(RESOURCE_PATH)
20
+ end
21
+
22
+ def generate_scoped_search_key(search_key, parameters)
23
+ parameters_json = JSON.dump(parameters)
24
+ digest = Base64.encode64(OpenSSL::HMAC.digest('sha256', search_key, parameters_json)).gsub("\n", '')
25
+ key_prefix = search_key[0...4]
26
+ raw_scoped_key = "#{digest}#{key_prefix}#{parameters_json}"
27
+ Base64.encode64(raw_scoped_key).gsub("\n", '')
28
+ end
29
+
30
+ def [](id)
31
+ @keys[id] ||= Key.new(id, @api_call)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Override
5
+ def initialize(collection_name, override_id, api_call)
6
+ @collection_name = collection_name
7
+ @override_id = override_id
8
+ @api_call = api_call
9
+ end
10
+
11
+ def retrieve
12
+ @api_call.get(endpoint_path)
13
+ end
14
+
15
+ def delete
16
+ @api_call.delete(endpoint_path)
17
+ end
18
+
19
+ private
20
+
21
+ def endpoint_path
22
+ "#{Collections::RESOURCE_PATH}/#{@collection_name}#{Overrides::RESOURCE_PATH}/#{@override_id}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Overrides
5
+ RESOURCE_PATH = '/overrides'
6
+
7
+ def initialize(collection_name, api_call)
8
+ @collection_name = collection_name
9
+ @api_call = api_call
10
+ @overrides = {}
11
+ end
12
+
13
+ def create(params)
14
+ @api_call.put(endpoint_path, params)
15
+ end
16
+
17
+ def retrieve
18
+ @api_call.get(endpoint_path)
19
+ end
20
+
21
+ def [](override_id)
22
+ @overrides[override_id] ||= Override.new(@collection_name, override_id, @api_call)
23
+ end
24
+
25
+ private
26
+
27
+ def endpoint_path(operation = nil)
28
+ "#{Collections::RESOURCE_PATH}/#{@collection_name}#{Overrides::RESOURCE_PATH}#{operation.nil? ? '' : '/' + operation}"
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Typesense
4
- VERSION = '0.1.0'
4
+ VERSION = '0.5.1'
5
5
  end
@@ -7,12 +7,12 @@ require 'typesense/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'typesense'
9
9
  spec.version = Typesense::VERSION
10
- spec.authors = ['Wreally Studios']
10
+ spec.authors = ['Typesense, Inc.']
11
11
  spec.email = ['contact@typesense.org']
12
12
 
13
13
  spec.summary = 'Ruby Library for Typesense'
14
14
  spec.description = 'Typesense is an open source search engine for building a delightful search experience.'
15
- spec.homepage = 'https://github.com/typesense/typesense-ruby'
15
+ spec.homepage = 'https://typesense.org'
16
16
  spec.license = 'Apache-2.0'
17
17
 
18
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -23,15 +23,18 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_development_dependency 'awesome_print', '~> 1.8'
26
- spec.add_development_dependency 'bundler', '~> 1.16'
27
- spec.add_development_dependency 'pry-byebug', '~> 3.5'
28
- spec.add_development_dependency 'rake', '~> 10.0'
29
- spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'rspec_junit_formatter', '~> 0.3'
31
- spec.add_development_dependency 'rubocop', '~> 0.53.0'
32
- spec.add_development_dependency 'rubocop-rspec', '~> 1.24'
33
- spec.add_development_dependency 'simplecov', '~> 0.15'
34
- spec.add_development_dependency 'webmock', '~> 3.2'
26
+ spec.add_development_dependency 'bundler', '~> 2.0'
27
+ spec.add_development_dependency 'codecov', '~> 0.1'
28
+ spec.add_development_dependency 'pry-byebug', '~> 3.9'
29
+ spec.add_development_dependency 'rake', '~> 13.0'
30
+ spec.add_development_dependency 'rspec', '~> 3.9'
31
+ spec.add_development_dependency 'rspec-legacy_formatters', '~> 1.0' # For codecov formatter
32
+ spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
33
+ spec.add_development_dependency 'rubocop', '~> 0.83'
34
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.39'
35
+ spec.add_development_dependency 'simplecov', '~> 0.18'
36
+ spec.add_development_dependency 'timecop', '~> 0.9'
37
+ spec.add_development_dependency 'webmock', '~> 3.8'
35
38
 
36
- spec.add_dependency 'httparty', '~> 0.15'
39
+ spec.add_dependency 'httparty', '~> 0.18'
37
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typesense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
- - Wreally Studios
7
+ - Typesense, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-04 00:00:00.000000000 Z
11
+ date: 2020-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -30,140 +30,182 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: codecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry-byebug
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.5'
61
+ version: '3.9'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.5'
68
+ version: '3.9'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '10.0'
75
+ version: '13.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '10.0'
82
+ version: '13.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '3.0'
89
+ version: '3.9'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '3.0'
96
+ version: '3.9'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-legacy_formatters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rspec_junit_formatter
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '0.3'
117
+ version: '0.4'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '0.3'
124
+ version: '0.4'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: rubocop
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: 0.53.0
131
+ version: '0.83'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: 0.53.0
138
+ version: '0.83'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rubocop-rspec
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: '1.24'
145
+ version: '1.39'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: '1.24'
152
+ version: '1.39'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: simplecov
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: '0.15'
159
+ version: '0.18'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.18'
167
+ - !ruby/object:Gem::Dependency
168
+ name: timecop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.9'
132
174
  type: :development
133
175
  prerelease: false
134
176
  version_requirements: !ruby/object:Gem::Requirement
135
177
  requirements:
136
178
  - - "~>"
137
179
  - !ruby/object:Gem::Version
138
- version: '0.15'
180
+ version: '0.9'
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: webmock
141
183
  requirement: !ruby/object:Gem::Requirement
142
184
  requirements:
143
185
  - - "~>"
144
186
  - !ruby/object:Gem::Version
145
- version: '3.2'
187
+ version: '3.8'
146
188
  type: :development
147
189
  prerelease: false
148
190
  version_requirements: !ruby/object:Gem::Requirement
149
191
  requirements:
150
192
  - - "~>"
151
193
  - !ruby/object:Gem::Version
152
- version: '3.2'
194
+ version: '3.8'
153
195
  - !ruby/object:Gem::Dependency
154
196
  name: httparty
155
197
  requirement: !ruby/object:Gem::Requirement
156
198
  requirements:
157
199
  - - "~>"
158
200
  - !ruby/object:Gem::Version
159
- version: '0.15'
201
+ version: '0.18'
160
202
  type: :runtime
161
203
  prerelease: false
162
204
  version_requirements: !ruby/object:Gem::Requirement
163
205
  requirements:
164
206
  - - "~>"
165
207
  - !ruby/object:Gem::Version
166
- version: '0.15'
208
+ version: '0.18'
167
209
  description: Typesense is an open source search engine for building a delightful search
168
210
  experience.
169
211
  email:
@@ -183,9 +225,16 @@ files:
183
225
  - Rakefile
184
226
  - bin/console
185
227
  - bin/setup
228
+ - codecov.yml
229
+ - examples/aliases.rb
230
+ - examples/client_initialization.rb
186
231
  - examples/collections_and_documents.rb
232
+ - examples/keys.rb
233
+ - examples/overrides.rb
187
234
  - examples/search.rb
188
235
  - lib/typesense.rb
236
+ - lib/typesense/alias.rb
237
+ - lib/typesense/aliases.rb
189
238
  - lib/typesense/api_call.rb
190
239
  - lib/typesense/client.rb
191
240
  - lib/typesense/collection.rb
@@ -195,9 +244,14 @@ files:
195
244
  - lib/typesense/document.rb
196
245
  - lib/typesense/documents.rb
197
246
  - lib/typesense/error.rb
247
+ - lib/typesense/health.rb
248
+ - lib/typesense/key.rb
249
+ - lib/typesense/keys.rb
250
+ - lib/typesense/override.rb
251
+ - lib/typesense/overrides.rb
198
252
  - lib/typesense/version.rb
199
253
  - typesense.gemspec
200
- homepage: https://github.com/typesense/typesense-ruby
254
+ homepage: https://typesense.org
201
255
  licenses:
202
256
  - Apache-2.0
203
257
  metadata: {}
@@ -216,8 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
270
  - !ruby/object:Gem::Version
217
271
  version: '0'
218
272
  requirements: []
219
- rubyforge_project:
220
- rubygems_version: 2.7.6
273
+ rubygems_version: 3.0.6
221
274
  signing_key:
222
275
  specification_version: 4
223
276
  summary: Ruby Library for Typesense