meilisearch-rails 0.2.3 → 0.5.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 +4 -4
- data/Gemfile +25 -17
- data/LICENSE +1 -1
- data/README.md +86 -80
- data/Rakefile +5 -4
- data/lib/meilisearch/rails/configuration.rb +23 -0
- data/lib/meilisearch/rails/errors.rb +14 -0
- data/lib/meilisearch/rails/ms_job.rb +11 -0
- data/lib/meilisearch/rails/pagination/kaminari.rb +48 -0
- data/lib/meilisearch/rails/pagination/will_paginate.rb +22 -0
- data/lib/meilisearch/rails/pagination.rb +20 -0
- data/lib/meilisearch/rails/railtie.rb +14 -0
- data/lib/meilisearch/rails/tasks/meilisearch.rake +22 -0
- data/lib/meilisearch/rails/utilities.rb +46 -0
- data/lib/meilisearch/rails/version.rb +7 -0
- data/lib/meilisearch-rails.rb +674 -671
- data/meilisearch-rails.gemspec +27 -37
- metadata +15 -16
- data/lib/meilisearch/configuration.rb +0 -19
- data/lib/meilisearch/ms_job.rb +0 -9
- data/lib/meilisearch/pagination/kaminari.rb +0 -44
- data/lib/meilisearch/pagination/will_paginate.rb +0 -19
- data/lib/meilisearch/pagination.rb +0 -19
- data/lib/meilisearch/railtie.rb +0 -11
- data/lib/meilisearch/tasks/meilisearch.rake +0 -19
- data/lib/meilisearch/utilities.rb +0 -49
- data/lib/meilisearch/version.rb +0 -3
- data/spec/spec_helper.rb +0 -52
- data/spec/utilities_spec.rb +0 -36
data/meilisearch-rails.gemspec
CHANGED
@@ -1,46 +1,36 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), 'lib', 'meilisearch', 'version')
|
1
|
+
require File.join(File.dirname(__FILE__), 'lib', 'meilisearch', 'rails', 'version')
|
4
2
|
|
5
3
|
require 'date'
|
6
4
|
|
7
5
|
Gem::Specification.new do |s|
|
8
|
-
s.name =
|
9
|
-
s.version = MeiliSearch::VERSION
|
6
|
+
s.name = 'meilisearch-rails'
|
7
|
+
s.version = MeiliSearch::Rails::VERSION
|
8
|
+
|
9
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
10
|
+
s.authors = ['Meili']
|
11
|
+
s.description = 'Meilisearch integration for Ruby on Rails. See https://github.com/meilisearch/meilisearch'
|
12
|
+
s.email = 'bonjour@meilisearch.com'
|
13
|
+
s.homepage = 'http://github.com/meilisearch/meilisearch-rails'
|
14
|
+
s.licenses = ['MIT']
|
15
|
+
s.require_paths = ['lib']
|
16
|
+
s.summary = 'Meilisearch integration for Ruby on Rails.'
|
10
17
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.authors = ["Meili"]
|
13
|
-
s.date = Date.today
|
14
|
-
s.description = "MeiliSearch integration for Ruby on Rails. See https://github.com/meilisearch/MeiliSearch"
|
15
|
-
s.email = "bonjour@meilisearch.com"
|
16
18
|
s.extra_rdoc_files = [
|
17
|
-
|
18
|
-
|
19
|
+
'LICENSE',
|
20
|
+
'README.md'
|
19
21
|
]
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
"lib/meilisearch/configuration.rb",
|
30
|
-
"lib/meilisearch/pagination.rb",
|
31
|
-
"lib/meilisearch/pagination/kaminari.rb",
|
32
|
-
"lib/meilisearch/pagination/will_paginate.rb",
|
33
|
-
"lib/meilisearch/railtie.rb",
|
34
|
-
"lib/meilisearch/tasks/meilisearch.rake",
|
35
|
-
"lib/meilisearch/utilities.rb",
|
36
|
-
"lib/meilisearch/version.rb",
|
37
|
-
"spec/spec_helper.rb",
|
38
|
-
"spec/utilities_spec.rb"
|
22
|
+
|
23
|
+
s.files = Dir[
|
24
|
+
'lib/**/*',
|
25
|
+
'.rspec',
|
26
|
+
'meilisearch-rails.gemspec',
|
27
|
+
'Gemfile',
|
28
|
+
'LICENSE',
|
29
|
+
'README.md',
|
30
|
+
'Rakefile'
|
39
31
|
]
|
40
|
-
|
41
|
-
s.
|
42
|
-
s.
|
43
|
-
s.
|
44
|
-
s.add_dependency("json", [">= 1.5.1"])
|
45
|
-
s.add_dependency("meilisearch", [">= 0.15.4"])
|
32
|
+
|
33
|
+
s.required_ruby_version = '>= 2.6.0'
|
34
|
+
s.add_dependency('json', ['>= 1.5.1'])
|
35
|
+
s.add_dependency('meilisearch', ['>= 0.15.4'])
|
46
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meilisearch-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Meili
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.15.4
|
41
|
-
description:
|
41
|
+
description: Meilisearch integration for Ruby on Rails. See https://github.com/meilisearch/meilisearch
|
42
42
|
email: bonjour@meilisearch.com
|
43
43
|
executables: []
|
44
44
|
extensions: []
|
@@ -52,18 +52,17 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- lib/meilisearch-rails.rb
|
55
|
-
- lib/meilisearch/configuration.rb
|
56
|
-
- lib/meilisearch/
|
57
|
-
- lib/meilisearch/
|
58
|
-
- lib/meilisearch/pagination
|
59
|
-
- lib/meilisearch/pagination/
|
60
|
-
- lib/meilisearch/
|
61
|
-
- lib/meilisearch/
|
62
|
-
- lib/meilisearch/
|
63
|
-
- lib/meilisearch/
|
55
|
+
- lib/meilisearch/rails/configuration.rb
|
56
|
+
- lib/meilisearch/rails/errors.rb
|
57
|
+
- lib/meilisearch/rails/ms_job.rb
|
58
|
+
- lib/meilisearch/rails/pagination.rb
|
59
|
+
- lib/meilisearch/rails/pagination/kaminari.rb
|
60
|
+
- lib/meilisearch/rails/pagination/will_paginate.rb
|
61
|
+
- lib/meilisearch/rails/railtie.rb
|
62
|
+
- lib/meilisearch/rails/tasks/meilisearch.rake
|
63
|
+
- lib/meilisearch/rails/utilities.rb
|
64
|
+
- lib/meilisearch/rails/version.rb
|
64
65
|
- meilisearch-rails.gemspec
|
65
|
-
- spec/spec_helper.rb
|
66
|
-
- spec/utilities_spec.rb
|
67
66
|
homepage: http://github.com/meilisearch/meilisearch-rails
|
68
67
|
licenses:
|
69
68
|
- MIT
|
@@ -76,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
75
|
requirements:
|
77
76
|
- - ">="
|
78
77
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
78
|
+
version: 2.6.0
|
80
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
80
|
requirements:
|
82
81
|
- - ">="
|
@@ -86,5 +85,5 @@ requirements: []
|
|
86
85
|
rubygems_version: 3.0.3.1
|
87
86
|
signing_key:
|
88
87
|
specification_version: 4
|
89
|
-
summary:
|
88
|
+
summary: Meilisearch integration for Ruby on Rails.
|
90
89
|
test_files: []
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module MeiliSearch
|
2
|
-
module Configuration
|
3
|
-
def configuration
|
4
|
-
@@configuration || raise(NotConfigured, "Please configure MeiliSearch. Set MeiliSearch.configuration = {meilisearch_host: 'YOUR_MEILISEARCH_HOST', meilisearch_api_key: 'YOUR_API_KEY'}")
|
5
|
-
end
|
6
|
-
|
7
|
-
def configuration=(configuration)
|
8
|
-
@@configuration = configuration
|
9
|
-
end
|
10
|
-
|
11
|
-
def client
|
12
|
-
::MeiliSearch::Client.new(
|
13
|
-
configuration[:meilisearch_host],
|
14
|
-
configuration[:meilisearch_api_key],
|
15
|
-
configuration.slice(:timeout, :max_retries)
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/meilisearch/ms_job.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
unless defined? Kaminari
|
2
|
-
raise(MeiliSearch::BadConfiguration, "MeiliSearch: Please add 'kaminari' to your Gemfile to use kaminari pagination backend")
|
3
|
-
end
|
4
|
-
|
5
|
-
require "kaminari/models/array_extension"
|
6
|
-
|
7
|
-
module MeiliSearch
|
8
|
-
module Pagination
|
9
|
-
class Kaminari < ::Kaminari::PaginatableArray
|
10
|
-
|
11
|
-
def initialize(array, options)
|
12
|
-
if RUBY_VERSION >= '3'
|
13
|
-
super(array, **options)
|
14
|
-
else
|
15
|
-
super(array, options)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def limit(num)
|
20
|
-
# noop
|
21
|
-
self
|
22
|
-
end
|
23
|
-
|
24
|
-
def offset(num)
|
25
|
-
# noop
|
26
|
-
self
|
27
|
-
end
|
28
|
-
|
29
|
-
class << self
|
30
|
-
def create(results, total_hits, options = {})
|
31
|
-
offset = ((options[:page] - 1) * options[:per_page])
|
32
|
-
array = new results, limit: options[:per_page], offset: offset, total_count: total_hits
|
33
|
-
if array.empty? and !results.empty?
|
34
|
-
# since Kaminari 0.16.0, you need to pad the results with nil values so it matches the offset param
|
35
|
-
# otherwise you'll get an empty array: https://github.com/amatsuda/kaminari/commit/29fdcfa8865f2021f710adaedb41b7a7b081e34d
|
36
|
-
results = ([nil] * offset) + results
|
37
|
-
array = new results, offset: offset, limit: options[:per_page], total_count: total_hits
|
38
|
-
end
|
39
|
-
array
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'will_paginate/collection'
|
3
|
-
rescue LoadError
|
4
|
-
raise(MeiliSearch::BadConfiguration, "MeiliSearch: Please add 'will_paginate' to your Gemfile to use will_paginate pagination backend")
|
5
|
-
end
|
6
|
-
|
7
|
-
module MeiliSearch
|
8
|
-
module Pagination
|
9
|
-
class WillPaginate
|
10
|
-
def self.create(results, total_hits, options = {})
|
11
|
-
::WillPaginate::Collection.create(options[:page], options[:per_page], total_hits) do |pager|
|
12
|
-
start = (options[:page] - 1) * options[:per_page]
|
13
|
-
paginated_results = results[start, options[:per_page]]
|
14
|
-
pager.replace paginated_results
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module MeiliSearch
|
2
|
-
module Pagination
|
3
|
-
|
4
|
-
autoload :WillPaginate, 'meilisearch/pagination/will_paginate'
|
5
|
-
autoload :Kaminari, 'meilisearch/pagination/kaminari'
|
6
|
-
|
7
|
-
def self.create(results, total_hits, options = {})
|
8
|
-
return results if MeiliSearch.configuration[:pagination_backend].nil?
|
9
|
-
begin
|
10
|
-
backend = MeiliSearch.configuration[:pagination_backend].to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } # classify pagination backend name
|
11
|
-
page = Object.const_get(:MeiliSearch).const_get(:Pagination).const_get(backend).create(results, total_hits, options)
|
12
|
-
page
|
13
|
-
rescue NameError
|
14
|
-
raise(BadConfiguration, "Unknown pagination backend")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
data/lib/meilisearch/railtie.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
namespace :meilisearch do
|
2
|
-
|
3
|
-
desc "Reindex all models"
|
4
|
-
task :reindex => :environment do
|
5
|
-
MeiliSearch::Utilities.reindex_all_models
|
6
|
-
end
|
7
|
-
|
8
|
-
desc "Set settings to all indexes"
|
9
|
-
task :set_all_settings => :environment do
|
10
|
-
MeiliSearch::Utilities.set_settings_all_models
|
11
|
-
end
|
12
|
-
|
13
|
-
desc "Clear all indexes"
|
14
|
-
task :clear_indexes => :environment do
|
15
|
-
puts "clearing all indexes"
|
16
|
-
MeiliSearch::Utilities.clear_all_indexes
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module MeiliSearch
|
2
|
-
module Utilities
|
3
|
-
class << self
|
4
|
-
def get_model_classes
|
5
|
-
if Rails.application && defined?(Rails.autoloaders) && Rails.autoloaders.zeitwerk_enabled?
|
6
|
-
Zeitwerk::Loader.eager_load_all
|
7
|
-
elsif Rails.application
|
8
|
-
Rails.application.eager_load!
|
9
|
-
end
|
10
|
-
klasses = MeiliSearch.instance_variable_get(:@included_in)
|
11
|
-
(klasses + klasses.map{ |klass| klass.descendants }.flatten).uniq
|
12
|
-
end
|
13
|
-
|
14
|
-
def clear_all_indexes
|
15
|
-
get_model_classes.each do |klass|
|
16
|
-
klass.clear_index!
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def reindex_all_models
|
21
|
-
klasses = get_model_classes
|
22
|
-
|
23
|
-
puts ''
|
24
|
-
puts "Reindexing #{klasses.count} models: #{klasses.to_sentence}."
|
25
|
-
puts ''
|
26
|
-
|
27
|
-
klasses.each do |klass|
|
28
|
-
puts klass
|
29
|
-
puts "Reindexing #{klass.count} records..."
|
30
|
-
klass.ms_reindex!
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def set_settings_all_models
|
35
|
-
klasses = get_model_classes
|
36
|
-
|
37
|
-
puts ''
|
38
|
-
puts "Pushing settings for #{klasses.count} models: #{klasses.to_sentence}."
|
39
|
-
puts ''
|
40
|
-
|
41
|
-
klasses.each do |klass|
|
42
|
-
puts "Pushing #{klass} settings..."
|
43
|
-
klass.ms_set_settings
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
data/lib/meilisearch/version.rb
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
require 'timeout'
|
4
|
-
require 'dotenv/load'
|
5
|
-
require 'faker'
|
6
|
-
Bundler.setup :test
|
7
|
-
|
8
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
9
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
10
|
-
|
11
|
-
require 'meilisearch-rails'
|
12
|
-
require 'rspec'
|
13
|
-
require 'rails/all'
|
14
|
-
|
15
|
-
raise "missing MEILISEARCH_HOST or MEILISEARCH_API_KEY environment variables" if ENV['MEILISEARCH_HOST'].nil? || ENV['MEILISEARCH_API_KEY'].nil?
|
16
|
-
|
17
|
-
Thread.current[:meilisearch_hosts] = nil
|
18
|
-
|
19
|
-
RSpec.configure do |c|
|
20
|
-
c.mock_with :rspec
|
21
|
-
c.filter_run focus: true
|
22
|
-
c.run_all_when_everything_filtered = true
|
23
|
-
c.formatter = 'documentation'
|
24
|
-
|
25
|
-
c.around(:each) do |example|
|
26
|
-
Timeout::timeout(120) {
|
27
|
-
example.run
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
# Remove all indexes setup in this run in local or CI
|
32
|
-
c.after(:suite) do
|
33
|
-
safe_index_list.each do |index|
|
34
|
-
MeiliSearch.client.delete_index(index['name'])
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# A unique prefix for your test run in local or CI
|
40
|
-
SAFE_INDEX_PREFIX = "rails_#{SecureRandom.hex(8)}".freeze
|
41
|
-
|
42
|
-
# avoid concurrent access to the same index in local or CI
|
43
|
-
def safe_index_uid(name)
|
44
|
-
"#{SAFE_INDEX_PREFIX}_#{name}"
|
45
|
-
end
|
46
|
-
|
47
|
-
# get a list of safe indexes in local or CI
|
48
|
-
def safe_index_list
|
49
|
-
list = MeiliSearch.client.indexes()
|
50
|
-
list = list.select { |index| index["name"].include?(SAFE_INDEX_PREFIX) }
|
51
|
-
list.sort_by { |index| index["primary"] || "" }
|
52
|
-
end
|
data/spec/utilities_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
|
-
|
3
|
-
MeiliSearch.configuration = { meilisearch_host: ENV['MEILISEARCH_HOST'], meilisearch_api_key: ENV['MEILISEARCH_API_KEY'] }
|
4
|
-
|
5
|
-
describe MeiliSearch::Utilities do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@included_in = MeiliSearch.instance_variable_get :@included_in
|
9
|
-
MeiliSearch.instance_variable_set :@included_in, []
|
10
|
-
|
11
|
-
class Dummy
|
12
|
-
include MeiliSearch
|
13
|
-
|
14
|
-
def self.model_name
|
15
|
-
"Dummy"
|
16
|
-
end
|
17
|
-
|
18
|
-
meilisearch
|
19
|
-
end
|
20
|
-
|
21
|
-
class DummyChild < Dummy
|
22
|
-
end
|
23
|
-
|
24
|
-
class DummyGrandChild < DummyChild
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
after(:each) do
|
29
|
-
MeiliSearch.instance_variable_set :@included_in, @included_in
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should get the models where MeiliSearch module was included" do
|
33
|
-
(MeiliSearch::Utilities.get_model_classes - [Dummy, DummyChild, DummyGrandChild]).should == []
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|