typesense 0.14.1 → 1.1.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: 1bb8d21314545a009551827388585832a78bf7ec685032959b9829a7870ddb9f
4
- data.tar.gz: 4084625e3489791d29054738567b5e6eb60c05688f553121d035ef92ba85db8e
3
+ metadata.gz: 173e451d6ea840eb9dd625340b7f0350ae3e7343dacfff09584b3749116e7090
4
+ data.tar.gz: c0fbeb2881f825e49ec507cea288482ed52d398d8bf81bbc45da699f1a5305cf
5
5
  SHA512:
6
- metadata.gz: a3b6f7e798a06042e57d6c6282a2f9bc1f51921542b525c4369cb4d313900ba0a2eee739356c01062e3519d8d4e7cc8f977b3a732a49ff325e5a1df750eed165
7
- data.tar.gz: ae3a68760647e57b966b24a352e215673d2eff16c5d0a3830729d2ece01ab2cbd1a60282ce2d72a2b2c504084da9088647b8520445cae06605a48b8ec712e52e
6
+ metadata.gz: 56d66cb6510b179d25e33ea7534bd4a75f299d9dd5e51392654d9e88d62850004b1a2c099e73aa8261deddb01f2a8cc8e77f9775fea532fce0acd922bd98716e
7
+ data.tar.gz: b6f6ea0103b926619e56e5f9a4d44d06ee33fde3822c2c6e20029a2506d2d699d5f8c2c53ea0c620389f20f2dff6a27429aa003d1cd55d62b096a99e9ee1f965
@@ -0,0 +1,27 @@
1
+ name: tests
2
+
3
+ on: [push, pull_request]
4
+
5
+ permissions:
6
+ contents: read
7
+
8
+ jobs:
9
+ build_and_test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ ruby-version: ['2.7', '3.0', '3.2']
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
21
+ - run: bundle exec rubocop
22
+ - run: bundle exec rspec --format documentation
23
+ - uses: actions/upload-artifact@v3
24
+ with:
25
+ name: coverage
26
+ path: coverage/
27
+ retention-days: 1
data/.rubocop.yml CHANGED
@@ -1,5 +1,8 @@
1
+ require: rubocop-rspec
2
+
1
3
  AllCops:
2
4
  NewCops: enable
5
+ TargetRubyVersion: 2.7
3
6
 
4
7
  Style/Documentation:
5
8
  Enabled: false
@@ -37,3 +40,12 @@ Layout/LineLength:
37
40
  Lint/SuppressedException:
38
41
  Exclude:
39
42
  - examples/**
43
+
44
+ RSpec/ExampleLength:
45
+ Enabled: false
46
+
47
+ RSpec/MultipleExpectations:
48
+ Enabled: false
49
+
50
+ Style/HashSyntax:
51
+ Enabled: false # We still want to support older versions of Ruby
data/Gemfile CHANGED
@@ -4,5 +4,21 @@ source 'https://rubygems.org'
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
+ # Dev dependencies
8
+ gem 'awesome_print', '~> 1.8'
9
+ gem 'bundler', '~> 2.0'
10
+ gem 'codecov', '~> 0.1'
11
+ gem 'guard', '~> 2.16'
12
+ gem 'guard-rubocop', '~> 1.3'
13
+ gem 'rake', '~> 13.0'
14
+ gem 'rspec', '~> 3.9'
15
+ gem 'rspec_junit_formatter', '~> 0.4'
16
+ gem 'rspec-legacy_formatters', '~> 1.0' # For codecov formatter
17
+ gem 'rubocop', '~> 1.12'
18
+ gem 'rubocop-rspec', '~> 2.4', require: false
19
+ gem 'simplecov', '~> 0.18'
20
+ gem 'timecop', '~> 0.9'
21
+ gem 'webmock', '~> 3.8'
22
+
7
23
  # Specify your gem's dependencies in typesense.gemspec
8
24
  gemspec
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Typesense Ruby Library [![Gem Version](https://badge.fury.io/rb/typesense.svg)](https://badge.fury.io/rb/typesense) [![CircleCI](https://circleci.com/gh/typesense/typesense-ruby.svg?style=shield&circle-token=063f2179925b0b37d540126f6c96f6e1fe23f1b9)](https://circleci.com/gh/typesense/typesense-ruby) [![codecov](https://codecov.io/gh/typesense/typesense-ruby/branch/master/graph/badge.svg)](https://codecov.io/gh/typesense/typesense-ruby)
1
+ # Typesense Ruby Library [![Gem Version](https://badge.fury.io/rb/typesense.svg)](https://badge.fury.io/rb/typesense)
2
2
 
3
3
 
4
4
  Ruby client library for accessing the [Typesense HTTP API](https://github.com/typesense/typesense).
@@ -33,6 +33,7 @@ Tests are also a good place to know how the the library works internally: [spec]
33
33
 
34
34
  | Typesense Server | typesense-ruby |
35
35
  |------------------|----------------|
36
+ | \>= v0.25.0 | \>= v1.0.0 |
36
37
  | \>= v0.23.0 | \>= v0.14.0 |
37
38
  | \>= v0.21.0 | \>= v0.13.0 |
38
39
  | \>= v0.20.0 | \>= v0.12.0 |
@@ -49,7 +50,11 @@ Tests are also a good place to know how the the library works internally: [spec]
49
50
 
50
51
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
51
52
 
52
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
53
+ To install this gem onto your local machine, run `bundle exec rake install`.
54
+
55
+ ### Releasing
56
+
57
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
53
58
 
54
59
  ## Contributing
55
60
 
data/examples/aliases.rb CHANGED
@@ -3,47 +3,47 @@
3
3
  ##
4
4
  # These examples walk you through operations specifically related to aliases
5
5
 
6
- require_relative './client_initialization'
6
+ require_relative 'client_initialization'
7
7
 
8
8
  # Create a collection
9
9
  create_response = @typesense.collections.create(
10
- "name": 'books_january',
11
- "fields": [
12
- { "name": 'title', "type": 'string' },
13
- { "name": 'authors', "type": 'string[]' },
14
- { "name": 'authors_facet', "type": 'string[]', "facet": true },
15
- { "name": 'publication_year', "type": 'int32' },
16
- { "name": 'publication_year_facet', "type": 'string', "facet": true },
17
- { "name": 'ratings_count', "type": 'int32' },
18
- { "name": 'average_rating', "type": 'float' },
19
- { "name": 'image_url', "type": 'string' }
10
+ name: 'books_january',
11
+ fields: [
12
+ { name: 'title', type: 'string' },
13
+ { name: 'authors', type: 'string[]' },
14
+ { name: 'authors_facet', type: 'string[]', facet: true },
15
+ { name: 'publication_year', type: 'int32' },
16
+ { name: 'publication_year_facet', type: 'string', facet: true },
17
+ { name: 'ratings_count', type: 'int32' },
18
+ { name: 'average_rating', type: 'float' },
19
+ { name: 'image_url', type: 'string' }
20
20
  ],
21
- "default_sorting_field": 'ratings_count'
21
+ default_sorting_field: 'ratings_count'
22
22
  )
23
23
 
24
24
  ap create_response
25
25
 
26
26
  # Create or update an existing alias
27
27
  create_alias_response = @typesense.aliases.upsert('books',
28
- "collection_name": 'books_january')
28
+ collection_name: 'books_january')
29
29
  ap create_alias_response
30
30
 
31
31
  # Add a book using the alias name `books`
32
32
  hunger_games_book = {
33
- 'id': '1', 'original_publication_year': 2008, 'authors': ['Suzanne Collins'], 'average_rating': 4.34,
34
- 'publication_year': 2008, 'publication_year_facet': '2008', 'authors_facet': ['Suzanne Collins'],
35
- 'title': 'The Hunger Games',
36
- 'image_url': 'https://images.gr-assets.com/books/1447303603m/2767052.jpg',
37
- 'ratings_count': 4_780_653
33
+ id: '1', original_publication_year: 2008, authors: ['Suzanne Collins'], average_rating: 4.34,
34
+ publication_year: 2008, publication_year_facet: '2008', authors_facet: ['Suzanne Collins'],
35
+ title: 'The Hunger Games',
36
+ image_url: 'https://images.gr-assets.com/books/1447303603m/2767052.jpg',
37
+ ratings_count: 4_780_653
38
38
  }
39
39
 
40
40
  @typesense.collections['books'].documents.create(hunger_games_book)
41
41
 
42
42
  # Search using the alias
43
43
  ap @typesense.collections['books'].documents.search(
44
- 'q': 'hunger',
45
- 'query_by': 'title',
46
- 'sort_by': 'ratings_count:desc'
44
+ q: 'hunger',
45
+ query_by: 'title',
46
+ sort_by: 'ratings_count:desc'
47
47
  )
48
48
 
49
49
  # List all aliases
@@ -4,7 +4,7 @@
4
4
  # These examples walk you through all the operations you can do on a collection and a document
5
5
  # Search is specifically covered in another file in the examples folder
6
6
 
7
- require_relative './client_initialization'
7
+ require_relative 'client_initialization'
8
8
 
9
9
  ##
10
10
  # Create a collection
@@ -187,7 +187,6 @@ ap document
187
187
  ##
188
188
  # Update a document. Unlike upsert, update will error out if the doc doesn't already exist.
189
189
  document = @typesense.collections['companies'].documents['124'].update(
190
- 'id' => 1,
191
190
  'num_employees' => 5500
192
191
  )
193
192
  ap document
data/examples/keys.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # These examples walk you through operations to manage API Keys
5
5
 
6
- require_relative './client_initialization'
6
+ require_relative 'client_initialization'
7
7
 
8
8
  # Let's setup some test data for this example
9
9
  schema = {
@@ -95,18 +95,18 @@ ap unscoped_search_only_api_key_response
95
95
  # This is useful when you store multi-tenant data in a single Typesense server, but you only want
96
96
  # a particular tenant to access their own data. You'd generate one scoped search key per tenant.
97
97
  # IMPORTANT: scoped search keys should only be generated *server-side*, so as to not leak the unscoped main search key to clients
98
- scoped_search_only_api_key = @typesense.keys.generate_scoped_search_key(unscoped_search_only_api_key, { 'filter_by': 'company_id:124' })
98
+ scoped_search_only_api_key = @typesense.keys.generate_scoped_search_key(unscoped_search_only_api_key, { filter_by: 'company_id:124' })
99
99
  ap "scoped_search_only_api_key: #{scoped_search_only_api_key}"
100
100
 
101
101
  # Now let's search the data using the scoped API Key for company_id:124
102
102
  # You can do searches with this scoped_search_only_api_key from the server-side or client-side
103
103
  scoped_typesense_client = Typesense::Client.new({
104
- 'nodes': [{
105
- 'host': 'localhost',
106
- 'port': '8108',
107
- 'protocol': 'http'
104
+ nodes: [{
105
+ host: 'localhost',
106
+ port: '8108',
107
+ protocol: 'http'
108
108
  }],
109
- 'api_key': scoped_search_only_api_key
109
+ api_key: scoped_search_only_api_key
110
110
  })
111
111
 
112
112
  search_results = scoped_typesense_client.collections['users'].documents.search({
@@ -117,8 +117,8 @@ ap search_results
117
117
 
118
118
  # Search for a user that exists, but is outside the current key's scope
119
119
  search_results = scoped_typesense_client.collections['users'].documents.search({
120
- 'q': 'Maxwell',
121
- 'query_by': 'user_name'
120
+ q: 'Maxwell',
121
+ query_by: 'user_name'
122
122
  })
123
123
  ap search_results # Will return empty result set
124
124
 
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # These examples walk you through operations specifically related to result overrides / curation
5
5
 
6
- require_relative './client_initialization'
6
+ require_relative 'client_initialization'
7
7
 
8
8
  # Delete the collection if it already exists
9
9
  begin
@@ -69,19 +69,19 @@ schema = {
69
69
 
70
70
  @typesense.collections['companies'].overrides.upsert(
71
71
  'promote-doofenshmirtz',
72
- "rule": {
73
- "query": 'doofen',
74
- "match": 'exact'
72
+ rule: {
73
+ query: 'doofen',
74
+ match: 'exact'
75
75
  },
76
- "includes": [{ 'id' => '126', 'position' => 1 }]
76
+ includes: [{ 'id' => '126', 'position' => 1 }]
77
77
  )
78
78
  @typesense.collections['companies'].overrides.upsert(
79
79
  'promote-acme',
80
- "rule": {
81
- "query": 'stark',
82
- "match": 'exact'
80
+ rule: {
81
+ query: 'stark',
82
+ match: 'exact'
83
83
  },
84
- "includes": [{ 'id' => '125', 'position' => 1 }]
84
+ includes: [{ 'id' => '125', 'position' => 1 }]
85
85
  )
86
86
 
87
87
  ##
data/examples/search.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # These examples walk you through operations specifically related to search
5
5
 
6
- require_relative './client_initialization'
6
+ require_relative 'client_initialization'
7
7
 
8
8
  ##
9
9
  # Create a collection
@@ -110,7 +110,9 @@ ap results
110
110
  # Search for more documents
111
111
  results = @typesense.collections['companies'].documents.search(
112
112
  'q' => 'Non-existent',
113
- 'query_by' => 'company_name'
113
+ 'query_by' => 'company_name',
114
+ # Optionally add a user id if you use Analytics & Query Suggestions
115
+ 'x-typesense-user-id' => 42
114
116
  )
115
117
  ap results
116
118
 
data/examples/synonyms.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # These examples walk you through operations specifically related to synonyms
5
5
 
6
- require_relative './client_initialization'
6
+ require_relative 'client_initialization'
7
7
 
8
8
  # Delete the collection if it already exists
9
9
  begin
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Analytics
5
+ RESOURCE_PATH = '/analytics'
6
+
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ end
10
+
11
+ def rules
12
+ @rules ||= AnalyticsRules.new(@api_call)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class AnalyticsRule
5
+ def initialize(rule_name, api_call)
6
+ @rule_name = rule_name
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
+ "#{AnalyticsRules::RESOURCE_PATH}/#{@rule_name}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class AnalyticsRules
5
+ RESOURCE_PATH = '/analytics/rules'
6
+
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ @analytics_rules = {}
10
+ end
11
+
12
+ def upsert(rule_name, params)
13
+ @api_call.put(endpoint_path(rule_name), params)
14
+ end
15
+
16
+ def retrieve
17
+ @api_call.get(endpoint_path)
18
+ end
19
+
20
+ def [](rule_name)
21
+ @analytics_rules[rule_name] ||= AnalyticsRule.new(rule_name, @api_call)
22
+ end
23
+
24
+ private
25
+
26
+ def endpoint_path(operation = nil)
27
+ "#{AnalyticsRules::RESOURCE_PATH}#{operation.nil? ? '' : "/#{operation}"}"
28
+ end
29
+ end
30
+ end
@@ -88,7 +88,7 @@ module Typesense
88
88
  @logger.debug "Request #{method}:#{uri_for(endpoint, node)} to Node #{node[:index]} was successfully made (at the network layer). Response Code was #{response.code}."
89
89
 
90
90
  parsed_response = if response.headers && (response.headers['content-type'] || '').include?('application/json')
91
- Oj.load(response.body)
91
+ Oj.load(response.body, mode: :compat)
92
92
  else
93
93
  response.body
94
94
  end
@@ -3,7 +3,7 @@
3
3
  module Typesense
4
4
  class Client
5
5
  attr_reader :configuration, :collections, :aliases, :keys, :debug, :health, :metrics, :operations,
6
- :multi_search
6
+ :multi_search, :analytics, :presets
7
7
 
8
8
  def initialize(options = {})
9
9
  @configuration = Configuration.new(options)
@@ -16,6 +16,8 @@ module Typesense
16
16
  @health = Health.new(@api_call)
17
17
  @metrics = Metrics.new(@api_call)
18
18
  @operations = Operations.new(@api_call)
19
+ @analytics = Analytics.new(@api_call)
20
+ @presets = Presets.new(@api_call)
19
21
  end
20
22
  end
21
23
  end
@@ -13,8 +13,8 @@ module Typesense
13
13
  @api_call.post(RESOURCE_PATH, schema)
14
14
  end
15
15
 
16
- def retrieve
17
- @api_call.get(RESOURCE_PATH)
16
+ def retrieve(options = {})
17
+ @api_call.get(RESOURCE_PATH, options)
18
18
  end
19
19
 
20
20
  def [](collection_name)
@@ -11,7 +11,7 @@ module Typesense
11
11
  @nearest_node = options[:nearest_node]
12
12
  @connection_timeout_seconds = options[:connection_timeout_seconds] || options[:timeout_seconds] || 10
13
13
  @healthcheck_interval_seconds = options[:healthcheck_interval_seconds] || 15
14
- @num_retries = options[:num_retries] || @nodes.length + (@nearest_node.nil? ? 0 : 1) || 3
14
+ @num_retries = options[:num_retries] || (@nodes.length + (@nearest_node.nil? ? 0 : 1)) || 3
15
15
  @retry_interval_seconds = options[:retry_interval_seconds] || 0.1
16
16
  @api_key = options[:api_key]
17
17
 
@@ -21,7 +21,11 @@ module Typesense
21
21
  end
22
22
 
23
23
  def update(document, options = {})
24
- @api_call.post(endpoint_path, document, options.merge(action: :update))
24
+ if options['filter_by'] || options[:filter_by]
25
+ @api_call.patch(endpoint_path, document, options)
26
+ else
27
+ @api_call.post(endpoint_path, document, options.merge(action: :update))
28
+ end
25
29
  end
26
30
 
27
31
  def create_many(documents, options = {})
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Preset
5
+ def initialize(preset_name, api_call)
6
+ @preset_name = preset_name
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
+ "#{Presets::RESOURCE_PATH}/#{@preset_name}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class Presets
5
+ RESOURCE_PATH = '/presets'
6
+
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ @presets = {}
10
+ end
11
+
12
+ def upsert(preset_name, params)
13
+ @api_call.put(endpoint_path(preset_name), params)
14
+ end
15
+
16
+ def retrieve
17
+ @api_call.get(endpoint_path)
18
+ end
19
+
20
+ def [](preset_name)
21
+ @presets[preset_name] ||= Preset.new(preset_name, @api_call)
22
+ end
23
+
24
+ private
25
+
26
+ def endpoint_path(operation = nil)
27
+ "#{Presets::RESOURCE_PATH}#{operation.nil? ? '' : "/#{operation}"}"
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Typesense
4
- VERSION = '0.14.1'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/typesense.rb CHANGED
@@ -20,6 +20,11 @@ require_relative 'typesense/alias'
20
20
  require_relative 'typesense/keys'
21
21
  require_relative 'typesense/key'
22
22
  require_relative 'typesense/multi_search'
23
+ require_relative 'typesense/analytics'
24
+ require_relative 'typesense/analytics_rules'
25
+ require_relative 'typesense/analytics_rule'
26
+ require_relative 'typesense/presets'
27
+ require_relative 'typesense/preset'
23
28
  require_relative 'typesense/debug'
24
29
  require_relative 'typesense/health'
25
30
  require_relative 'typesense/metrics'
data/typesense.gemspec CHANGED
@@ -15,7 +15,9 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = 'https://typesense.org'
16
16
  spec.license = 'Apache-2.0'
17
17
 
18
- spec.required_ruby_version = '>= 2.4'
18
+ # rubocop:disable Gemspec/RequiredRubyVersion, Lint/RedundantCopDisableDirective
19
+ spec.required_ruby_version = '>= 2.7'
20
+ # rubocop:enable Gemspec/RequiredRubyVersion, Lint/RedundantCopDisableDirective
19
21
 
20
22
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
23
  f.match(%r{^(test|spec|features)/})
@@ -24,22 +26,7 @@ Gem::Specification.new do |spec|
24
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
27
  spec.require_paths = ['lib']
26
28
 
27
- spec.add_development_dependency 'awesome_print', '~> 1.8'
28
- spec.add_development_dependency 'bundler', '~> 2.0'
29
- spec.add_development_dependency 'codecov', '~> 0.1'
30
- spec.add_development_dependency 'guard', '~> 2.16'
31
- spec.add_development_dependency 'guard-rubocop', '~> 1.3'
32
- spec.add_development_dependency 'pry-byebug', '~> 3.9'
33
- spec.add_development_dependency 'rake', '~> 13.0'
34
- spec.add_development_dependency 'rspec', '~> 3.9'
35
- spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
36
- spec.add_development_dependency 'rspec-legacy_formatters', '~> 1.0' # For codecov formatter
37
- spec.add_development_dependency 'rubocop', '~> 0.88'
38
- spec.add_development_dependency 'rubocop-rspec', '~> 1.39'
39
- spec.add_development_dependency 'simplecov', '~> 0.18'
40
- spec.add_development_dependency 'timecop', '~> 0.9'
41
- spec.add_development_dependency 'webmock', '~> 3.8'
42
-
43
- spec.add_dependency 'oj', '~> 3.11'
29
+ spec.add_dependency 'oj', '~> 3.16'
44
30
  spec.add_dependency 'typhoeus', '~> 1.4'
31
+ spec.metadata['rubygems_mfa_required'] = 'true'
45
32
  end
metadata CHANGED
@@ -1,239 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typesense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Typesense, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-21 00:00:00.000000000 Z
11
+ date: 2024-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: awesome_print
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.8'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.8'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
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'
55
- - !ruby/object:Gem::Dependency
56
- name: guard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.16'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.16'
69
- - !ruby/object:Gem::Dependency
70
- name: guard-rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.3'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.3'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-byebug
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '3.9'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '3.9'
97
- - !ruby/object:Gem::Dependency
98
- name: rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '13.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '13.0'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '3.9'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '3.9'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec_junit_formatter
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.4'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.4'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec-legacy_formatters
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '1.0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '1.0'
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '0.88'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '0.88'
167
- - !ruby/object:Gem::Dependency
168
- name: rubocop-rspec
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '1.39'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '1.39'
181
- - !ruby/object:Gem::Dependency
182
- name: simplecov
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '0.18'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '0.18'
195
- - !ruby/object:Gem::Dependency
196
- name: timecop
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '0.9'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '0.9'
209
- - !ruby/object:Gem::Dependency
210
- name: webmock
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '3.8'
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '3.8'
223
13
  - !ruby/object:Gem::Dependency
224
14
  name: oj
225
15
  requirement: !ruby/object:Gem::Requirement
226
16
  requirements:
227
17
  - - "~>"
228
18
  - !ruby/object:Gem::Version
229
- version: '3.11'
19
+ version: '3.16'
230
20
  type: :runtime
231
21
  prerelease: false
232
22
  version_requirements: !ruby/object:Gem::Requirement
233
23
  requirements:
234
24
  - - "~>"
235
25
  - !ruby/object:Gem::Version
236
- version: '3.11'
26
+ version: '3.16'
237
27
  - !ruby/object:Gem::Dependency
238
28
  name: typhoeus
239
29
  requirement: !ruby/object:Gem::Requirement
@@ -256,7 +46,7 @@ executables: []
256
46
  extensions: []
257
47
  extra_rdoc_files: []
258
48
  files:
259
- - ".circleci/config.yml"
49
+ - ".github/workflows/tests.yml"
260
50
  - ".gitignore"
261
51
  - ".rspec"
262
52
  - ".rubocop.yml"
@@ -278,6 +68,9 @@ files:
278
68
  - lib/typesense.rb
279
69
  - lib/typesense/alias.rb
280
70
  - lib/typesense/aliases.rb
71
+ - lib/typesense/analytics.rb
72
+ - lib/typesense/analytics_rule.rb
73
+ - lib/typesense/analytics_rules.rb
281
74
  - lib/typesense/api_call.rb
282
75
  - lib/typesense/client.rb
283
76
  - lib/typesense/collection.rb
@@ -295,6 +88,8 @@ files:
295
88
  - lib/typesense/operations.rb
296
89
  - lib/typesense/override.rb
297
90
  - lib/typesense/overrides.rb
91
+ - lib/typesense/preset.rb
92
+ - lib/typesense/presets.rb
298
93
  - lib/typesense/synonym.rb
299
94
  - lib/typesense/synonyms.rb
300
95
  - lib/typesense/version.rb
@@ -302,7 +97,8 @@ files:
302
97
  homepage: https://typesense.org
303
98
  licenses:
304
99
  - Apache-2.0
305
- metadata: {}
100
+ metadata:
101
+ rubygems_mfa_required: 'true'
306
102
  post_install_message:
307
103
  rdoc_options: []
308
104
  require_paths:
@@ -311,14 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
311
107
  requirements:
312
108
  - - ">="
313
109
  - !ruby/object:Gem::Version
314
- version: '2.4'
110
+ version: '2.7'
315
111
  required_rubygems_version: !ruby/object:Gem::Requirement
316
112
  requirements:
317
113
  - - ">="
318
114
  - !ruby/object:Gem::Version
319
115
  version: '0'
320
116
  requirements: []
321
- rubygems_version: 3.3.15
117
+ rubygems_version: 3.4.10
322
118
  signing_key:
323
119
  specification_version: 4
324
120
  summary: Ruby Library for Typesense
data/.circleci/config.yml DELETED
@@ -1,69 +0,0 @@
1
- # Ruby CircleCI 2.0 configuration file
2
- #
3
- # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
- #
5
- version: 2
6
- jobs:
7
- build:
8
- docker:
9
- # specify the version you desire here
10
- - image: circleci/ruby:2.4.1-node-browsers
11
-
12
- # Specify service dependencies here if necessary
13
- # CircleCI maintains a library of pre-built images
14
- # documented at https://circleci.com/docs/2.0/circleci-images/
15
- # - image: circleci/postgres:9.4
16
-
17
- working_directory: ~/repo
18
-
19
- steps:
20
- - checkout
21
-
22
- # # Download and cache dependencies
23
- # - restore_cache:
24
- # keys:
25
- # - v1-dependencies-{{ checksum "Gemfile.lock" }}
26
- # # fallback to using the latest cache if no exact match is found
27
- # - v1-dependencies-
28
-
29
- - run:
30
- name: install bundler
31
- command: |
32
- echo 'export BUNDLER_VERSION=$(cat Gemfile.lock | tail -1 | tr -d " ")' >> $BASH_ENV
33
- source $BASH_ENV
34
- gem install bundler
35
-
36
- - run:
37
- name: install dependencies
38
- command: |
39
- bundle install --jobs=4 --retry=3 --path vendor/bundle
40
-
41
- # - save_cache:
42
- # paths:
43
- # - ./vendor/bundle
44
- # key: v1-dependencies-{{ checksum "Gemfile.lock" }}
45
-
46
- - run:
47
- name: lint
48
- command: |
49
- bundle exec rubocop
50
-
51
- # run tests!
52
- - run:
53
- name: run tests
54
- command: |
55
- mkdir /tmp/test-results
56
-
57
- bundle exec rspec --format documentation \
58
- --format RspecJunitFormatter \
59
- --out /tmp/test-results/rspec.xml
60
-
61
- # collect reports
62
- - store_test_results:
63
- path: /tmp/test-results
64
- - store_artifacts:
65
- path: /tmp/test-results
66
- destination: test-results
67
- - store_artifacts:
68
- path: coverage
69
- destination: coverage