algoliasearch-rails 1.23.2 → 2.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 +4 -4
- data/.travis.yml +9 -0
- data/{ChangeLog → CHANGELOG.MD} +34 -0
- data/Gemfile +9 -35
- data/Gemfile.lock +124 -114
- data/README.md +35 -7
- data/algoliasearch-rails.gemspec +5 -5
- data/lib/algoliasearch-rails.rb +40 -64
- data/lib/algoliasearch/configuration.rb +17 -2
- data/lib/algoliasearch/utilities.rb +5 -1
- data/lib/algoliasearch/version.rb +1 -1
- data/spec/spec_helper.rb +4 -3
- data/spec/utilities_spec.rb +1 -1
- metadata +11 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e9f821e4bb84fd0a2217a6ed58bbdef6ae894e18641ec2a9bbfb82b6f37103a8
|
|
4
|
+
data.tar.gz: fde9d6939506c96144fdd28b7ca09fb5702415d0518664958c5fef86f4631143
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b371672188be5d851ed39bc3c9bfb7efceed38ce1a1c74b00f444c09c741ac9fd8aec3378aeccd4b5f15cd237944a11fdfbf37e5354934a84088205543a1eda1
|
|
7
|
+
data.tar.gz: fef38d14f51f32a39acee326c955fe07ff7860f8c7c1a4afed26615453fdefbd0427dd91562d12415e5d512cf087abb20144d830355a0928f54c18526696471d
|
data/.travis.yml
CHANGED
|
@@ -8,6 +8,7 @@ matrix:
|
|
|
8
8
|
include:
|
|
9
9
|
- rvm: 1.8.7
|
|
10
10
|
env: RAILS_VERSION=3.2.0 SEQUEL_VERSION=4.0
|
|
11
|
+
dist: trusty
|
|
11
12
|
- rvm: 1.9.3
|
|
12
13
|
env: RAILS_VERSION=3.2.0
|
|
13
14
|
- rvm: 1.9.3
|
|
@@ -32,8 +33,16 @@ matrix:
|
|
|
32
33
|
env: RAILS_VERSION=5.1 SEQUEL_VERSION=5.0
|
|
33
34
|
- rvm: 2.5.3
|
|
34
35
|
env: RAILS_VERSION=5.1 SEQUEL_VERSION=5.0
|
|
36
|
+
- rvm: 2.5.3
|
|
37
|
+
env: RAILS_VERSION=6.0 SEQUEL_VERSION=5.0
|
|
38
|
+
- rvm: 2.6.0
|
|
39
|
+
env: RAILS_VERSION=5.2 SEQUEL_VERSION=5.0
|
|
35
40
|
- rvm: 2.6.0
|
|
41
|
+
env: RAILS_VERSION=6.0 SEQUEL_VERSION=5.0
|
|
42
|
+
- rvm: 2.7.0
|
|
36
43
|
env: RAILS_VERSION=5.2 SEQUEL_VERSION=5.0
|
|
44
|
+
- rvm: 2.7.0
|
|
45
|
+
env: RAILS_VERSION=6.0 SEQUEL_VERSION=5.0
|
|
37
46
|
|
|
38
47
|
before_install:
|
|
39
48
|
- wget http://api-key-dealer.herokuapp.com/clients/algolia-keys && chmod +x algolia-keys
|
data/{ChangeLog → CHANGELOG.MD}
RENAMED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## [Unreleased](https://github.com/algolia/algoliasearch-rails/compare/2.0.0...master)
|
|
4
|
+
|
|
5
|
+
## [2.1.0](https://github.com/algolia/algoliasearch-rails/compare/2.1.0...2.0.0)
|
|
6
|
+
### Added
|
|
7
|
+
- Add support for [virtual replicas](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/#what-are-virtual-replicas) ([#386](https://github.com/algolia/algoliasearch-rails/pull/386))
|
|
8
|
+
|
|
9
|
+
## [2.0.0](https://github.com/algolia/algoliasearch-rails/compare/2.0.0...1.25.0)
|
|
10
|
+
|
|
11
|
+
### Breaking changes
|
|
12
|
+
- Adds support for `algolia` gem.
|
|
13
|
+
- Drops support for Ruby < 2.4
|
|
14
|
+
- Drops support for Rails < 5.1
|
|
15
|
+
|
|
16
|
+
## [1.25.0](https://github.com/algolia/algoliasearch-rails/compare/1.24.1...1.25.0) (2020-11-24)
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- Pass array argument to geoloc ([#372](https://github.com/algolia/algoliasearch-rails/pull/372))
|
|
20
|
+
- Containerize the repo ([#391](https://github.com/algolia/algoliasearch-rails/pull/391))
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- Use Zeitwerk for loading models in Rails 6 ([#364](https://github.com/algolia/algoliasearch-rails/pull/364))
|
|
24
|
+
|
|
25
|
+
## [1.24.1](https://github.com/algolia/algoliasearch-rails/releases/tag/1.24.1) (2020-07-15)
|
|
26
|
+
|
|
27
|
+
**Fixed**
|
|
28
|
+
|
|
29
|
+
* Fixes ruby warning 'Proc.new is deprecated'
|
|
30
|
+
|
|
31
|
+
## [1.24.0](https://github.com/algolia/algoliasearch-rails/releases/tag/1.24.0) (2020-02-21)
|
|
32
|
+
|
|
33
|
+
**Added**
|
|
34
|
+
|
|
35
|
+
* Adds indexLanguages in index settings
|
|
36
|
+
|
|
3
37
|
## [1.23.2](https://github.com/algolia/algoliasearch-rails/releases/tag/1.23.2) (2019-06-26)
|
|
4
38
|
|
|
5
39
|
**Fixed**
|
data/Gemfile
CHANGED
|
@@ -1,41 +1,22 @@
|
|
|
1
1
|
source "http://rubygems.org"
|
|
2
2
|
|
|
3
|
-
gem 'json', '
|
|
4
|
-
gem '
|
|
3
|
+
gem 'json', '>= 1.5.1'
|
|
4
|
+
gem 'algolia', '< 3.0.0'
|
|
5
5
|
|
|
6
6
|
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
|
7
7
|
gem 'rubysl', '~> 2.0', :platform => :rbx
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
group :test do
|
|
11
|
-
rails_version = ENV["RAILS_VERSION"]
|
|
12
|
-
gem 'rails', rails_version
|
|
11
|
+
rails_version = ENV["RAILS_VERSION"] || '6.1'
|
|
12
|
+
gem 'rails', "~> #{rails_version}"
|
|
13
13
|
gem 'active_model_serializers'
|
|
14
|
-
if
|
|
15
|
-
gem '
|
|
16
|
-
|
|
17
|
-
gem '
|
|
18
|
-
gem 'rack-cache', '< 1.3'
|
|
19
|
-
gem 'mime-types', '< 2.6'
|
|
20
|
-
gem 'net-http-persistent', '< 3.0'
|
|
21
|
-
gem 'faraday', '< 0.10'
|
|
22
|
-
elsif defined?(RUBY_VERSION) && RUBY_VERSION == "1.9.3"
|
|
23
|
-
gem 'rack', '< 2'
|
|
24
|
-
gem 'rack-cache', '<= 1.7.1'
|
|
25
|
-
if Gem::Version.new(ENV['RAILS_VERSION'] || '3.2.0') >= Gem::Version.new('4.0')
|
|
26
|
-
gem 'mime-types', '~> 2.6'
|
|
27
|
-
else
|
|
28
|
-
gem 'mime-types', '< 3'
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
if defined?(RUBY_VERSION) &&
|
|
32
|
-
defined?(RUBY_ENGINE) &&
|
|
33
|
-
RUBY_ENGINE == 'ruby' &&
|
|
34
|
-
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.1')
|
|
35
|
-
gem 'net-http-persistent', '< 3.0'
|
|
14
|
+
if Gem::Version.new(rails_version) >= Gem::Version.new('6.0')
|
|
15
|
+
gem 'sqlite3', '~> 1.4.0', :platform => [:rbx, :ruby]
|
|
16
|
+
else
|
|
17
|
+
gem 'sqlite3', '< 1.4.0', :platform => [:rbx, :ruby]
|
|
36
18
|
end
|
|
37
19
|
gem 'rspec', '>= 2.5.0', '< 3.0'
|
|
38
|
-
gem 'sqlite3', '< 1.4.0', :platform => [:rbx, :ruby]
|
|
39
20
|
gem 'jdbc-sqlite3', :platform => :jruby
|
|
40
21
|
gem 'activerecord-jdbc-adapter', :platform => :jruby
|
|
41
22
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
@@ -53,13 +34,6 @@ end
|
|
|
53
34
|
|
|
54
35
|
group :test, :development do
|
|
55
36
|
gem 'will_paginate', '>= 2.3.15'
|
|
56
|
-
|
|
57
|
-
defined?(RUBY_ENGINE) &&
|
|
58
|
-
RUBY_ENGINE == 'ruby' &&
|
|
59
|
-
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2')
|
|
60
|
-
gem 'kaminari', '< 1'
|
|
61
|
-
else
|
|
62
|
-
gem 'kaminari'
|
|
63
|
-
end
|
|
37
|
+
gem 'kaminari', '< 1'
|
|
64
38
|
end
|
|
65
39
|
|
data/Gemfile.lock
CHANGED
|
@@ -1,72 +1,90 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
actioncable (
|
|
5
|
-
actionpack (=
|
|
4
|
+
actioncable (6.1.3.1)
|
|
5
|
+
actionpack (= 6.1.3.1)
|
|
6
|
+
activesupport (= 6.1.3.1)
|
|
6
7
|
nio4r (~> 2.0)
|
|
7
8
|
websocket-driver (>= 0.6.1)
|
|
8
|
-
|
|
9
|
-
actionpack (=
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
actionmailbox (6.1.3.1)
|
|
10
|
+
actionpack (= 6.1.3.1)
|
|
11
|
+
activejob (= 6.1.3.1)
|
|
12
|
+
activerecord (= 6.1.3.1)
|
|
13
|
+
activestorage (= 6.1.3.1)
|
|
14
|
+
activesupport (= 6.1.3.1)
|
|
15
|
+
mail (>= 2.7.1)
|
|
16
|
+
actionmailer (6.1.3.1)
|
|
17
|
+
actionpack (= 6.1.3.1)
|
|
18
|
+
actionview (= 6.1.3.1)
|
|
19
|
+
activejob (= 6.1.3.1)
|
|
20
|
+
activesupport (= 6.1.3.1)
|
|
12
21
|
mail (~> 2.5, >= 2.5.4)
|
|
13
22
|
rails-dom-testing (~> 2.0)
|
|
14
|
-
actionpack (
|
|
15
|
-
actionview (=
|
|
16
|
-
activesupport (=
|
|
17
|
-
rack (~> 2.0)
|
|
23
|
+
actionpack (6.1.3.1)
|
|
24
|
+
actionview (= 6.1.3.1)
|
|
25
|
+
activesupport (= 6.1.3.1)
|
|
26
|
+
rack (~> 2.0, >= 2.0.9)
|
|
18
27
|
rack-test (>= 0.6.3)
|
|
19
28
|
rails-dom-testing (~> 2.0)
|
|
20
|
-
rails-html-sanitizer (~> 1.0, >= 1.0
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
30
|
+
actiontext (6.1.3.1)
|
|
31
|
+
actionpack (= 6.1.3.1)
|
|
32
|
+
activerecord (= 6.1.3.1)
|
|
33
|
+
activestorage (= 6.1.3.1)
|
|
34
|
+
activesupport (= 6.1.3.1)
|
|
35
|
+
nokogiri (>= 1.8.5)
|
|
36
|
+
actionview (6.1.3.1)
|
|
37
|
+
activesupport (= 6.1.3.1)
|
|
23
38
|
builder (~> 3.1)
|
|
24
39
|
erubi (~> 1.4)
|
|
25
40
|
rails-dom-testing (~> 2.0)
|
|
26
|
-
rails-html-sanitizer (~> 1.
|
|
27
|
-
active_model_serializers (0.10.
|
|
28
|
-
actionpack (>= 4.1, < 6)
|
|
29
|
-
activemodel (>= 4.1, < 6)
|
|
41
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
42
|
+
active_model_serializers (0.10.12)
|
|
43
|
+
actionpack (>= 4.1, < 6.2)
|
|
44
|
+
activemodel (>= 4.1, < 6.2)
|
|
30
45
|
case_transform (>= 0.2)
|
|
31
46
|
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
|
32
|
-
activejob (
|
|
33
|
-
activesupport (=
|
|
47
|
+
activejob (6.1.3.1)
|
|
48
|
+
activesupport (= 6.1.3.1)
|
|
34
49
|
globalid (>= 0.3.6)
|
|
35
|
-
activemodel (
|
|
36
|
-
activesupport (=
|
|
37
|
-
activerecord (
|
|
38
|
-
activemodel (=
|
|
39
|
-
activesupport (=
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
activerecord (=
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
activemodel (6.1.3.1)
|
|
51
|
+
activesupport (= 6.1.3.1)
|
|
52
|
+
activerecord (6.1.3.1)
|
|
53
|
+
activemodel (= 6.1.3.1)
|
|
54
|
+
activesupport (= 6.1.3.1)
|
|
55
|
+
activestorage (6.1.3.1)
|
|
56
|
+
actionpack (= 6.1.3.1)
|
|
57
|
+
activejob (= 6.1.3.1)
|
|
58
|
+
activerecord (= 6.1.3.1)
|
|
59
|
+
activesupport (= 6.1.3.1)
|
|
60
|
+
marcel (~> 1.0.0)
|
|
61
|
+
mini_mime (~> 1.0.2)
|
|
62
|
+
activesupport (6.1.3.1)
|
|
46
63
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
47
|
-
i18n (>=
|
|
48
|
-
minitest (
|
|
49
|
-
tzinfo (~>
|
|
64
|
+
i18n (>= 1.6, < 2)
|
|
65
|
+
minitest (>= 5.1)
|
|
66
|
+
tzinfo (~> 2.0)
|
|
67
|
+
zeitwerk (~> 2.3)
|
|
50
68
|
addressable (2.4.0)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
backports (3.
|
|
56
|
-
builder (3.2.
|
|
69
|
+
algolia (2.0.4)
|
|
70
|
+
faraday (>= 0.15, < 2.0)
|
|
71
|
+
multi_json (~> 1.0)
|
|
72
|
+
net-http-persistent
|
|
73
|
+
backports (3.21.0)
|
|
74
|
+
builder (3.2.4)
|
|
57
75
|
case_transform (0.2)
|
|
58
76
|
activesupport
|
|
59
|
-
concurrent-ruby (1.1.
|
|
60
|
-
crass (1.0.
|
|
61
|
-
diff-lcs (1.
|
|
62
|
-
erubi (1.
|
|
63
|
-
ethon (0.
|
|
64
|
-
ffi (>= 1.
|
|
65
|
-
faraday (0.
|
|
77
|
+
concurrent-ruby (1.1.8)
|
|
78
|
+
crass (1.0.6)
|
|
79
|
+
diff-lcs (1.4.4)
|
|
80
|
+
erubi (1.10.0)
|
|
81
|
+
ethon (0.13.0)
|
|
82
|
+
ffi (>= 1.15.0)
|
|
83
|
+
faraday (0.17.4)
|
|
66
84
|
multipart-post (>= 1.2, < 3)
|
|
67
|
-
faraday_middleware (0.
|
|
85
|
+
faraday_middleware (0.14.0)
|
|
68
86
|
faraday (>= 0.7.4, < 1.0)
|
|
69
|
-
ffi (1.
|
|
87
|
+
ffi (1.15.0)
|
|
70
88
|
gh (0.15.1)
|
|
71
89
|
addressable (~> 2.4.0)
|
|
72
90
|
backports
|
|
@@ -77,76 +95,68 @@ GEM
|
|
|
77
95
|
globalid (0.4.2)
|
|
78
96
|
activesupport (>= 4.2.0)
|
|
79
97
|
highline (1.7.10)
|
|
80
|
-
|
|
81
|
-
i18n (1.6.0)
|
|
98
|
+
i18n (1.8.10)
|
|
82
99
|
concurrent-ruby (~> 1.0)
|
|
83
|
-
json (
|
|
100
|
+
json (2.5.1)
|
|
84
101
|
jsonapi-renderer (0.2.2)
|
|
85
|
-
kaminari (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
kaminari-activerecord (= 1.1.1)
|
|
89
|
-
kaminari-core (= 1.1.1)
|
|
90
|
-
kaminari-actionview (1.1.1)
|
|
91
|
-
actionview
|
|
92
|
-
kaminari-core (= 1.1.1)
|
|
93
|
-
kaminari-activerecord (1.1.1)
|
|
94
|
-
activerecord
|
|
95
|
-
kaminari-core (= 1.1.1)
|
|
96
|
-
kaminari-core (1.1.1)
|
|
102
|
+
kaminari (0.17.0)
|
|
103
|
+
actionpack (>= 3.0.0)
|
|
104
|
+
activesupport (>= 3.0.0)
|
|
97
105
|
launchy (2.4.3)
|
|
98
106
|
addressable (~> 2.3)
|
|
99
|
-
loofah (2.
|
|
107
|
+
loofah (2.9.1)
|
|
100
108
|
crass (~> 1.0.2)
|
|
101
109
|
nokogiri (>= 1.5.9)
|
|
102
110
|
mail (2.7.1)
|
|
103
111
|
mini_mime (>= 0.1.1)
|
|
104
|
-
marcel (0.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
minitest (5.11.3)
|
|
111
|
-
multi_json (1.13.1)
|
|
112
|
+
marcel (1.0.1)
|
|
113
|
+
method_source (1.0.0)
|
|
114
|
+
mini_mime (1.0.3)
|
|
115
|
+
mini_portile2 (2.5.0)
|
|
116
|
+
minitest (5.14.4)
|
|
117
|
+
multi_json (1.15.0)
|
|
112
118
|
multipart-post (2.1.1)
|
|
113
119
|
net-http-persistent (2.9.4)
|
|
114
120
|
net-http-pipeline (1.0.1)
|
|
115
|
-
nio4r (2.
|
|
116
|
-
nokogiri (1.
|
|
117
|
-
mini_portile2 (~> 2.
|
|
121
|
+
nio4r (2.5.7)
|
|
122
|
+
nokogiri (1.11.3)
|
|
123
|
+
mini_portile2 (~> 2.5.0)
|
|
124
|
+
racc (~> 1.4)
|
|
118
125
|
pusher-client (0.6.2)
|
|
119
126
|
json
|
|
120
127
|
websocket (~> 1.0)
|
|
121
|
-
|
|
128
|
+
racc (1.5.2)
|
|
129
|
+
rack (2.2.3)
|
|
122
130
|
rack-test (1.1.0)
|
|
123
131
|
rack (>= 1.0, < 3)
|
|
124
|
-
rails (
|
|
125
|
-
actioncable (=
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
132
|
+
rails (6.1.3.1)
|
|
133
|
+
actioncable (= 6.1.3.1)
|
|
134
|
+
actionmailbox (= 6.1.3.1)
|
|
135
|
+
actionmailer (= 6.1.3.1)
|
|
136
|
+
actionpack (= 6.1.3.1)
|
|
137
|
+
actiontext (= 6.1.3.1)
|
|
138
|
+
actionview (= 6.1.3.1)
|
|
139
|
+
activejob (= 6.1.3.1)
|
|
140
|
+
activemodel (= 6.1.3.1)
|
|
141
|
+
activerecord (= 6.1.3.1)
|
|
142
|
+
activestorage (= 6.1.3.1)
|
|
143
|
+
activesupport (= 6.1.3.1)
|
|
144
|
+
bundler (>= 1.15.0)
|
|
145
|
+
railties (= 6.1.3.1)
|
|
136
146
|
sprockets-rails (>= 2.0.0)
|
|
137
147
|
rails-dom-testing (2.0.3)
|
|
138
148
|
activesupport (>= 4.2.0)
|
|
139
149
|
nokogiri (>= 1.6)
|
|
140
|
-
rails-html-sanitizer (1.0
|
|
141
|
-
loofah (~> 2.
|
|
142
|
-
railties (
|
|
143
|
-
actionpack (=
|
|
144
|
-
activesupport (=
|
|
150
|
+
rails-html-sanitizer (1.3.0)
|
|
151
|
+
loofah (~> 2.3)
|
|
152
|
+
railties (6.1.3.1)
|
|
153
|
+
actionpack (= 6.1.3.1)
|
|
154
|
+
activesupport (= 6.1.3.1)
|
|
145
155
|
method_source
|
|
146
156
|
rake (>= 0.8.7)
|
|
147
|
-
thor (
|
|
157
|
+
thor (~> 1.0)
|
|
148
158
|
rake (10.1.1)
|
|
149
|
-
rdoc (6.
|
|
159
|
+
rdoc (6.3.0)
|
|
150
160
|
redgreen (1.2.2)
|
|
151
161
|
rspec (2.99.0)
|
|
152
162
|
rspec-core (~> 2.99.0)
|
|
@@ -156,18 +166,17 @@ GEM
|
|
|
156
166
|
rspec-expectations (2.99.2)
|
|
157
167
|
diff-lcs (>= 1.1.3, < 2.0)
|
|
158
168
|
rspec-mocks (2.99.4)
|
|
159
|
-
sequel (5.
|
|
160
|
-
sprockets (
|
|
169
|
+
sequel (5.43.0)
|
|
170
|
+
sprockets (4.0.2)
|
|
161
171
|
concurrent-ruby (~> 1.0)
|
|
162
172
|
rack (> 1, < 3)
|
|
163
|
-
sprockets-rails (3.2.
|
|
173
|
+
sprockets-rails (3.2.2)
|
|
164
174
|
actionpack (>= 4.0)
|
|
165
175
|
activesupport (>= 4.0)
|
|
166
176
|
sprockets (>= 3.0.0)
|
|
167
|
-
sqlite3 (1.
|
|
168
|
-
thor (
|
|
169
|
-
|
|
170
|
-
travis (1.8.10)
|
|
177
|
+
sqlite3 (1.4.2)
|
|
178
|
+
thor (1.1.0)
|
|
179
|
+
travis (1.8.13)
|
|
171
180
|
backports
|
|
172
181
|
faraday (~> 0.9)
|
|
173
182
|
faraday_middleware (~> 0.9, >= 0.9.1)
|
|
@@ -178,13 +187,14 @@ GEM
|
|
|
178
187
|
typhoeus (~> 0.6, >= 0.6.8)
|
|
179
188
|
typhoeus (0.8.0)
|
|
180
189
|
ethon (>= 0.8.0)
|
|
181
|
-
tzinfo (
|
|
182
|
-
|
|
183
|
-
websocket (1.2.
|
|
184
|
-
websocket-driver (0.7.
|
|
190
|
+
tzinfo (2.0.4)
|
|
191
|
+
concurrent-ruby (~> 1.0)
|
|
192
|
+
websocket (1.2.9)
|
|
193
|
+
websocket-driver (0.7.3)
|
|
185
194
|
websocket-extensions (>= 0.1.0)
|
|
186
|
-
websocket-extensions (0.1.
|
|
187
|
-
will_paginate (3.
|
|
195
|
+
websocket-extensions (0.1.5)
|
|
196
|
+
will_paginate (3.3.0)
|
|
197
|
+
zeitwerk (2.4.2)
|
|
188
198
|
|
|
189
199
|
PLATFORMS
|
|
190
200
|
ruby
|
|
@@ -193,19 +203,19 @@ DEPENDENCIES
|
|
|
193
203
|
active_model_serializers
|
|
194
204
|
activerecord-jdbc-adapter
|
|
195
205
|
activerecord-jdbcsqlite3-adapter
|
|
196
|
-
|
|
206
|
+
algolia (< 3.0.0)
|
|
197
207
|
jdbc-sqlite3
|
|
198
|
-
json (
|
|
199
|
-
kaminari
|
|
200
|
-
rails (
|
|
208
|
+
json (>= 1.5.1)
|
|
209
|
+
kaminari (< 1)
|
|
210
|
+
rails (~> 6.1)
|
|
201
211
|
rake (~> 10.1.0)
|
|
202
212
|
rdoc
|
|
203
213
|
redgreen
|
|
204
214
|
rspec (>= 2.5.0, < 3.0)
|
|
205
215
|
sequel (>= 4.0)
|
|
206
|
-
sqlite3 (
|
|
216
|
+
sqlite3 (~> 1.4.0)
|
|
207
217
|
travis
|
|
208
218
|
will_paginate (>= 2.3.15)
|
|
209
219
|
|
|
210
220
|
BUNDLED WITH
|
|
211
|
-
2.
|
|
221
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://www.algolia.com">
|
|
3
|
+
<img alt="Algolia for Rails" src="https://raw.githubusercontent.com/algolia/algoliasearch-client-common/master/banners/rails.png" >
|
|
4
|
+
</a>
|
|
5
|
+
|
|
6
|
+
<h4 align="center">The perfect starting point to integrate <a href="https://algolia.com" target="_blank">Algolia</a> within your Rails project</h4>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://circleci.com/gh/algolia/algoliasearch-rails"><img src="https://circleci.com/gh/algolia/algoliasearch-rails.svg?style=shield" alt="CircleCI" /></a>
|
|
10
|
+
<a href="http://badge.fury.io/rb/algoliasearch-rails"><img src="https://badge.fury.io/rb/algoliasearch-rails.svg" alt="Gem Version"></img></a>
|
|
11
|
+
<a href="https://codeclimate.com/github/algolia/algoliasearch-rails"><img src="https://codeclimate.com/github/algolia/algoliasearch-rails.svg" alt="Code Climate"></img></a>
|
|
12
|
+
<img src="https://img.shields.io/badge/ActiveRecord-yes-blue.svg?style=flat-square" alt="ActiveRecord"></img>
|
|
13
|
+
<img src="https://img.shields.io/badge/Mongoid-yes-blue.svg?style=flat-square" alt="Mongoid"></img>
|
|
14
|
+
<img src="https://img.shields.io/badge/Sequel-yes-blue.svg?style=flat-square" alt="Sequel"></img>
|
|
15
|
+
</p>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="https://www.algolia.com/doc/framework-integration/rails/getting-started/setup/?language=ruby" target="_blank">Documentation</a> •
|
|
20
|
+
<a href="https://discourse.algolia.com" target="_blank">Community Forum</a> •
|
|
21
|
+
<a href="http://stackoverflow.com/questions/tagged/algolia" target="_blank">Stack Overflow</a> •
|
|
22
|
+
<a href="https://github.com/algolia/algoliasearch-rails/issues" target="_blank">Report a bug</a> •
|
|
23
|
+
<a href="https://www.algolia.com/doc/framework-integration/rails/troubleshooting/faq/" target="_blank">FAQ</a> •
|
|
24
|
+
<a href="https://www.algolia.com/support" target="_blank">Support</a>
|
|
25
|
+
</p>
|
|
7
26
|
|
|
8
27
|
|
|
9
28
|
This gem let you easily integrate the Algolia Search API to your favorite ORM. It's based on the [algoliasearch-client-ruby](https://github.com/algolia/algoliasearch-client-ruby) gem.
|
|
@@ -64,6 +83,8 @@ You can find the full reference on [Algolia's website](https://www.algolia.com/d
|
|
|
64
83
|
1. **[Testing](#testing)**
|
|
65
84
|
* [Notes](#notes)
|
|
66
85
|
|
|
86
|
+
1. **[Troubleshooting](#troubleshooting)**
|
|
87
|
+
* [Frequently asked questions](#frequently-asked-questions)
|
|
67
88
|
|
|
68
89
|
|
|
69
90
|
|
|
@@ -142,7 +163,7 @@ class Contact < ActiveRecord::Base
|
|
|
142
163
|
include AlgoliaSearch
|
|
143
164
|
|
|
144
165
|
algoliasearch do
|
|
145
|
-
|
|
166
|
+
attributes :first_name, :last_name, :email
|
|
146
167
|
end
|
|
147
168
|
end
|
|
148
169
|
```
|
|
@@ -1163,4 +1184,11 @@ end
|
|
|
1163
1184
|
```
|
|
1164
1185
|
|
|
1165
1186
|
|
|
1187
|
+
## ❓ Troubleshooting
|
|
1188
|
+
|
|
1189
|
+
Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/api-client/troubleshooting/faq/ruby/) where you will find answers for the most common issues and gotchas with the client.
|
|
1190
|
+
|
|
1191
|
+
## Use the Dockerfile
|
|
1192
|
+
|
|
1193
|
+
If you want to contribute to this project without installing all its dependencies, you can use our Docker image. Please check our [dedicated guide](DOCKER_README.MD) to learn more.
|
|
1166
1194
|
|
data/algoliasearch-rails.gemspec
CHANGED
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.description = "AlgoliaSearch integration to your favorite ORM"
|
|
15
15
|
s.email = "contact@algolia.com"
|
|
16
16
|
s.extra_rdoc_files = [
|
|
17
|
-
"
|
|
17
|
+
"CHANGELOG.MD",
|
|
18
18
|
"LICENSE",
|
|
19
19
|
"README.md"
|
|
20
20
|
]
|
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
|
22
22
|
".document",
|
|
23
23
|
".rspec",
|
|
24
24
|
".travis.yml",
|
|
25
|
-
"
|
|
25
|
+
"CHANGELOG.MD",
|
|
26
26
|
"Gemfile",
|
|
27
27
|
"Gemfile.lock",
|
|
28
28
|
"LICENSE",
|
|
@@ -79,7 +79,7 @@ Gem::Specification.new do |s|
|
|
|
79
79
|
|
|
80
80
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
81
81
|
s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
|
|
82
|
-
s.add_runtime_dependency(%q<
|
|
82
|
+
s.add_runtime_dependency(%q<algolia>, ["< 3.0.0"])
|
|
83
83
|
s.add_development_dependency(%q<will_paginate>, [">= 2.3.15"])
|
|
84
84
|
s.add_development_dependency(%q<kaminari>, [">= 0"])
|
|
85
85
|
s.add_development_dependency "travis"
|
|
@@ -87,11 +87,11 @@ Gem::Specification.new do |s|
|
|
|
87
87
|
s.add_development_dependency "rdoc"
|
|
88
88
|
else
|
|
89
89
|
s.add_dependency(%q<json>, [">= 1.5.1"])
|
|
90
|
-
s.add_dependency(%q<
|
|
90
|
+
s.add_dependency(%q<algolia>, ["< 3.0.0"])
|
|
91
91
|
end
|
|
92
92
|
else
|
|
93
93
|
s.add_dependency(%q<json>, [">= 1.5.1"])
|
|
94
|
-
s.add_dependency(%q<
|
|
94
|
+
s.add_dependency(%q<algolia>, ["< 3.0.0"])
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
|
data/lib/algoliasearch-rails.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'algolia'
|
|
2
2
|
|
|
3
3
|
require 'algoliasearch/version'
|
|
4
4
|
require 'algoliasearch/utilities'
|
|
@@ -53,7 +53,6 @@ module AlgoliaSearch
|
|
|
53
53
|
OPTIONS = [
|
|
54
54
|
# Attributes
|
|
55
55
|
:searchableAttributes, :attributesForFaceting, :unretrievableAttributes, :attributesToRetrieve,
|
|
56
|
-
:attributesToIndex, #Legacy name of searchableAttributes
|
|
57
56
|
# Ranking
|
|
58
57
|
:ranking, :customRanking, # Replicas are handled via `add_replica`
|
|
59
58
|
# Faceting
|
|
@@ -68,7 +67,7 @@ module AlgoliaSearch
|
|
|
68
67
|
:disableTypoToleranceOnAttributes, :disableTypoToleranceOnWords, :separatorsToIndex,
|
|
69
68
|
# Language
|
|
70
69
|
:ignorePlurals, :removeStopWords, :camelCaseAttributes, :decompoundedAttributes,
|
|
71
|
-
:keepDiacriticsOnCharacters, :queryLanguages,
|
|
70
|
+
:keepDiacriticsOnCharacters, :queryLanguages, :indexLanguages,
|
|
72
71
|
# Query Rules
|
|
73
72
|
:enableRules,
|
|
74
73
|
# Query Strategy
|
|
@@ -76,7 +75,6 @@ module AlgoliaSearch
|
|
|
76
75
|
:disablePrefixOnAttributes, :disableExactOnAttributes, :exactOnSingleWordQuery, :alternativesAsExact,
|
|
77
76
|
# Performance
|
|
78
77
|
:numericAttributesForFiltering, :allowCompressionOfIntegerArray,
|
|
79
|
-
:numericAttributesToIndex, # Legacy name of numericAttributesForFiltering
|
|
80
78
|
# Advanced
|
|
81
79
|
:attributeForDistinct, :distinct, :replaceSynonymsInHighlight, :minProximity, :responseFields,
|
|
82
80
|
:maxFacetHits,
|
|
@@ -90,9 +88,9 @@ module AlgoliaSearch
|
|
|
90
88
|
end
|
|
91
89
|
end
|
|
92
90
|
|
|
93
|
-
def initialize(options, block)
|
|
91
|
+
def initialize(options, &block)
|
|
94
92
|
@options = options
|
|
95
|
-
instance_exec(&block) if
|
|
93
|
+
instance_exec(&block) if block_given?
|
|
96
94
|
end
|
|
97
95
|
|
|
98
96
|
def use_serializer(serializer)
|
|
@@ -102,7 +100,7 @@ module AlgoliaSearch
|
|
|
102
100
|
|
|
103
101
|
def attribute(*names, &block)
|
|
104
102
|
raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
|
|
105
|
-
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:
|
|
103
|
+
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:replica]
|
|
106
104
|
@attributes ||= {}
|
|
107
105
|
names.flatten.each do |name|
|
|
108
106
|
@attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
|
|
@@ -112,7 +110,7 @@ module AlgoliaSearch
|
|
|
112
110
|
|
|
113
111
|
def add_attribute(*names, &block)
|
|
114
112
|
raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
|
|
115
|
-
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:
|
|
113
|
+
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:replica]
|
|
116
114
|
@additional_attributes ||= {}
|
|
117
115
|
names.each do |name|
|
|
118
116
|
@additional_attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
|
|
@@ -223,15 +221,15 @@ module AlgoliaSearch
|
|
|
223
221
|
end
|
|
224
222
|
end
|
|
225
223
|
|
|
226
|
-
def geoloc(lat_attr, lng_attr)
|
|
227
|
-
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:
|
|
224
|
+
def geoloc(lat_attr = nil, lng_attr = nil, &block)
|
|
225
|
+
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:replica]
|
|
228
226
|
add_attribute :_geoloc do |o|
|
|
229
|
-
{ :lat => o.send(lat_attr).to_f, :lng => o.send(lng_attr).to_f }
|
|
227
|
+
block_given? ? o.instance_eval(&block) : { :lat => o.send(lat_attr).to_f, :lng => o.send(lng_attr).to_f }
|
|
230
228
|
end
|
|
231
229
|
end
|
|
232
230
|
|
|
233
231
|
def tags(*args, &block)
|
|
234
|
-
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:
|
|
232
|
+
raise ArgumentError.new('Cannot specify additional attributes on a replica index') if @options[:replica]
|
|
235
233
|
add_attribute :_tags do |o|
|
|
236
234
|
v = block_given? ? o.instance_eval(&block) : args
|
|
237
235
|
v.is_a?(Array) ? v : [v]
|
|
@@ -248,16 +246,12 @@ module AlgoliaSearch
|
|
|
248
246
|
v = get_setting(k)
|
|
249
247
|
settings[k] = v if !v.nil?
|
|
250
248
|
end
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
name = opts[:index_name]
|
|
254
|
-
name = "#{name}_#{Rails.env.to_s}" if opts[:per_environment]
|
|
255
|
-
name
|
|
256
|
-
end
|
|
257
|
-
settings.delete(:slaves) if settings[:slaves].empty?
|
|
249
|
+
|
|
250
|
+
if !@options[:replica]
|
|
258
251
|
settings[:replicas] = additional_indexes.select { |opts, s| opts[:replica] }.map do |opts, s|
|
|
259
252
|
name = opts[:index_name]
|
|
260
253
|
name = "#{name}_#{Rails.env.to_s}" if opts[:per_environment]
|
|
254
|
+
name = "virtual(#{name})" if opts[:virtual]
|
|
261
255
|
name
|
|
262
256
|
end
|
|
263
257
|
settings.delete(:replicas) if settings[:replicas].empty?
|
|
@@ -266,27 +260,20 @@ module AlgoliaSearch
|
|
|
266
260
|
end
|
|
267
261
|
|
|
268
262
|
def add_index(index_name, options = {}, &block)
|
|
269
|
-
raise ArgumentError.new('Cannot specify additional index on a replica index') if @options[:
|
|
263
|
+
raise ArgumentError.new('Cannot specify additional index on a replica index') if @options[:replica]
|
|
270
264
|
raise ArgumentError.new('No block given') if !block_given?
|
|
271
265
|
raise ArgumentError.new('Options auto_index and auto_remove cannot be set on nested indexes') if options[:auto_index] || options[:auto_remove]
|
|
272
266
|
@additional_indexes ||= {}
|
|
273
|
-
raise MixedSlavesAndReplicas.new('Cannot mix slaves and replicas in the same configuration (add_slave is deprecated)') if (options[:slave] && @additional_indexes.any? { |opts, _| opts[:replica] }) || (options[:replica] && @additional_indexes.any? { |opts, _| opts[:slave] })
|
|
274
267
|
options[:index_name] = index_name
|
|
275
|
-
@additional_indexes[options] = IndexSettings.new(options,
|
|
268
|
+
@additional_indexes[options] = IndexSettings.new(options, &block)
|
|
276
269
|
end
|
|
277
270
|
|
|
278
271
|
def add_replica(index_name, options = {}, &block)
|
|
279
|
-
raise ArgumentError.new('Cannot specify additional replicas on a replica index') if @options[:
|
|
272
|
+
raise ArgumentError.new('Cannot specify additional replicas on a replica index') if @options[:replica]
|
|
280
273
|
raise ArgumentError.new('No block given') if !block_given?
|
|
281
274
|
add_index(index_name, options.merge({ :replica => true, :primary_settings => self }), &block)
|
|
282
275
|
end
|
|
283
276
|
|
|
284
|
-
def add_slave(index_name, options = {}, &block)
|
|
285
|
-
raise ArgumentError.new('Cannot specify additional slaves on a slave index') if @options[:slave] || @options[:replica]
|
|
286
|
-
raise ArgumentError.new('No block given') if !block_given?
|
|
287
|
-
add_index(index_name, options.merge({ :slave => true, :primary_settings => self }), &block)
|
|
288
|
-
end
|
|
289
|
-
|
|
290
277
|
def additional_indexes
|
|
291
278
|
@additional_indexes || {}
|
|
292
279
|
end
|
|
@@ -304,11 +291,11 @@ module AlgoliaSearch
|
|
|
304
291
|
# are correctly logged or thrown depending on the `raise_on_failure` option
|
|
305
292
|
class SafeIndex
|
|
306
293
|
def initialize(name, raise_on_failure)
|
|
307
|
-
@index =
|
|
294
|
+
@index = AlgoliaSearch.client.init_index(name)
|
|
308
295
|
@raise_on_failure = raise_on_failure.nil? || raise_on_failure
|
|
309
296
|
end
|
|
310
297
|
|
|
311
|
-
::Algolia::Index.instance_methods(false).each do |m|
|
|
298
|
+
::Algolia::Search::Index.instance_methods(false).each do |m|
|
|
312
299
|
define_method(m) do |*args, &block|
|
|
313
300
|
SafeIndex.log_or_throw(m, @raise_on_failure) do
|
|
314
301
|
@index.send(m, *args, &block)
|
|
@@ -329,7 +316,7 @@ module AlgoliaSearch
|
|
|
329
316
|
SafeIndex.log_or_throw(:get_settings, @raise_on_failure) do
|
|
330
317
|
begin
|
|
331
318
|
@index.get_settings(*args)
|
|
332
|
-
rescue Algolia::
|
|
319
|
+
rescue Algolia::AlgoliaHttpError => e
|
|
333
320
|
return {} if e.code == 404 # not fatal
|
|
334
321
|
raise e
|
|
335
322
|
end
|
|
@@ -339,7 +326,7 @@ module AlgoliaSearch
|
|
|
339
326
|
# expose move as well
|
|
340
327
|
def self.move_index(old_name, new_name)
|
|
341
328
|
SafeIndex.log_or_throw(:move_index, true) do
|
|
342
|
-
|
|
329
|
+
AlgoliaSearch.client.move_index(old_name, new_name)
|
|
343
330
|
end
|
|
344
331
|
end
|
|
345
332
|
|
|
@@ -389,7 +376,7 @@ module AlgoliaSearch
|
|
|
389
376
|
end
|
|
390
377
|
|
|
391
378
|
def algoliasearch(options = {}, &block)
|
|
392
|
-
self.algoliasearch_settings = IndexSettings.new(options,
|
|
379
|
+
self.algoliasearch_settings = IndexSettings.new(options, &block)
|
|
393
380
|
self.algoliasearch_options = { :type => algolia_full_const_get(model_name.to_s), :per_page => algoliasearch_settings.get_setting(:hitsPerPage) || 10, :page => 1 }.merge(options)
|
|
394
381
|
|
|
395
382
|
attr_accessor :highlight_result, :snippet_result
|
|
@@ -511,7 +498,7 @@ module AlgoliaSearch
|
|
|
511
498
|
algolia_configurations.each do |options, settings|
|
|
512
499
|
next if algolia_indexing_disabled?(options)
|
|
513
500
|
index = algolia_ensure_init(options, settings)
|
|
514
|
-
next if options[:
|
|
501
|
+
next if options[:replica]
|
|
515
502
|
last_task = nil
|
|
516
503
|
|
|
517
504
|
algolia_find_in_batches(batch_size) do |group|
|
|
@@ -531,7 +518,7 @@ module AlgoliaSearch
|
|
|
531
518
|
end
|
|
532
519
|
last_task = index.save_objects(objects)
|
|
533
520
|
end
|
|
534
|
-
index.wait_task(last_task["taskID"]) if last_task and (synchronous || options[:synchronous])
|
|
521
|
+
index.wait_task(last_task.raw_response["taskID"]) if last_task and (synchronous || options[:synchronous])
|
|
535
522
|
end
|
|
536
523
|
nil
|
|
537
524
|
end
|
|
@@ -541,7 +528,7 @@ module AlgoliaSearch
|
|
|
541
528
|
return if algolia_without_auto_index_scope
|
|
542
529
|
algolia_configurations.each do |options, settings|
|
|
543
530
|
next if algolia_indexing_disabled?(options)
|
|
544
|
-
next if options[:
|
|
531
|
+
next if options[:replica]
|
|
545
532
|
|
|
546
533
|
# fetch the master settings
|
|
547
534
|
master_index = algolia_ensure_init(options, settings)
|
|
@@ -549,8 +536,6 @@ module AlgoliaSearch
|
|
|
549
536
|
master_settings.merge!(JSON.parse(settings.to_settings.to_json)) # convert symbols to strings
|
|
550
537
|
|
|
551
538
|
# remove the replicas of the temporary index
|
|
552
|
-
master_settings.delete :slaves
|
|
553
|
-
master_settings.delete 'slaves'
|
|
554
539
|
master_settings.delete :replicas
|
|
555
540
|
master_settings.delete 'replicas'
|
|
556
541
|
|
|
@@ -562,7 +547,7 @@ module AlgoliaSearch
|
|
|
562
547
|
tmp_settings = settings.dup
|
|
563
548
|
|
|
564
549
|
if options[:check_settings] == false
|
|
565
|
-
|
|
550
|
+
@client.copy_index!(src_index_name, tmp_index_name, %w(settings synonyms rules))
|
|
566
551
|
tmp_index = SafeIndex.new(tmp_index_name, !!options[:raise_on_failure])
|
|
567
552
|
else
|
|
568
553
|
tmp_index = algolia_ensure_init(tmp_options, tmp_settings, master_settings)
|
|
@@ -578,7 +563,7 @@ module AlgoliaSearch
|
|
|
578
563
|
end
|
|
579
564
|
|
|
580
565
|
move_task = SafeIndex.move_index(tmp_index.name, src_index_name)
|
|
581
|
-
master_index.wait_task(move_task["taskID"]) if synchronous || options[:synchronous]
|
|
566
|
+
master_index.wait_task(move_task.raw_response["taskID"]) if synchronous || options[:synchronous]
|
|
582
567
|
end
|
|
583
568
|
nil
|
|
584
569
|
end
|
|
@@ -587,8 +572,6 @@ module AlgoliaSearch
|
|
|
587
572
|
algolia_configurations.each do |options, settings|
|
|
588
573
|
if options[:primary_settings] && options[:inherit]
|
|
589
574
|
primary = options[:primary_settings].to_settings
|
|
590
|
-
primary.delete :slaves
|
|
591
|
-
primary.delete 'slaves'
|
|
592
575
|
primary.delete :replicas
|
|
593
576
|
primary.delete 'replicas'
|
|
594
577
|
final_settings = primary.merge(settings.to_settings)
|
|
@@ -598,7 +581,7 @@ module AlgoliaSearch
|
|
|
598
581
|
|
|
599
582
|
index = SafeIndex.new(algolia_index_name(options), true)
|
|
600
583
|
task = index.set_settings(final_settings)
|
|
601
|
-
index.wait_task(task["taskID"]) if synchronous
|
|
584
|
+
index.wait_task(task.raw_response["taskID"]) if synchronous
|
|
602
585
|
end
|
|
603
586
|
end
|
|
604
587
|
|
|
@@ -606,9 +589,9 @@ module AlgoliaSearch
|
|
|
606
589
|
algolia_configurations.each do |options, settings|
|
|
607
590
|
next if algolia_indexing_disabled?(options)
|
|
608
591
|
index = algolia_ensure_init(options, settings)
|
|
609
|
-
next if options[:
|
|
592
|
+
next if options[:replica]
|
|
610
593
|
task = index.save_objects(objects.map { |o| settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o, options) })
|
|
611
|
-
index.wait_task(task["taskID"]) if synchronous || options[:synchronous]
|
|
594
|
+
index.wait_task(task.raw_response["taskID"]) if synchronous || options[:synchronous]
|
|
612
595
|
end
|
|
613
596
|
end
|
|
614
597
|
|
|
@@ -618,13 +601,13 @@ module AlgoliaSearch
|
|
|
618
601
|
next if algolia_indexing_disabled?(options)
|
|
619
602
|
object_id = algolia_object_id_of(object, options)
|
|
620
603
|
index = algolia_ensure_init(options, settings)
|
|
621
|
-
next if options[:
|
|
604
|
+
next if options[:replica]
|
|
622
605
|
if algolia_indexable?(object, options)
|
|
623
606
|
raise ArgumentError.new("Cannot index a record with a blank objectID") if object_id.blank?
|
|
624
607
|
if synchronous || options[:synchronous]
|
|
625
|
-
index.
|
|
608
|
+
index.save_object!(settings.get_attributes(object).merge 'objectID' => algolia_object_id_of(object, options))
|
|
626
609
|
else
|
|
627
|
-
index.
|
|
610
|
+
index.save_object(settings.get_attributes(object).merge 'objectID' => algolia_object_id_of(object, options))
|
|
628
611
|
end
|
|
629
612
|
elsif algolia_conditional_index?(options) && !object_id.blank?
|
|
630
613
|
# remove non-indexable objects
|
|
@@ -645,7 +628,7 @@ module AlgoliaSearch
|
|
|
645
628
|
algolia_configurations.each do |options, settings|
|
|
646
629
|
next if algolia_indexing_disabled?(options)
|
|
647
630
|
index = algolia_ensure_init(options, settings)
|
|
648
|
-
next if options[:
|
|
631
|
+
next if options[:replica]
|
|
649
632
|
if synchronous || options[:synchronous]
|
|
650
633
|
index.delete_object!(object_id)
|
|
651
634
|
else
|
|
@@ -659,8 +642,8 @@ module AlgoliaSearch
|
|
|
659
642
|
algolia_configurations.each do |options, settings|
|
|
660
643
|
next if algolia_indexing_disabled?(options)
|
|
661
644
|
index = algolia_ensure_init(options, settings)
|
|
662
|
-
next if options[:
|
|
663
|
-
synchronous || options[:synchronous] ? index.
|
|
645
|
+
next if options[:replica]
|
|
646
|
+
synchronous || options[:synchronous] ? index.clear_objects! : index.clear_objects
|
|
664
647
|
@algolia_indexes[settings] = nil
|
|
665
648
|
end
|
|
666
649
|
nil
|
|
@@ -669,8 +652,6 @@ module AlgoliaSearch
|
|
|
669
652
|
def algolia_raw_search(q, params = {})
|
|
670
653
|
index_name = params.delete(:index) ||
|
|
671
654
|
params.delete('index') ||
|
|
672
|
-
params.delete(:slave) ||
|
|
673
|
-
params.delete('slave') ||
|
|
674
655
|
params.delete(:replica) ||
|
|
675
656
|
params.delete('replica')
|
|
676
657
|
index = algolia_index(index_name)
|
|
@@ -735,13 +716,11 @@ module AlgoliaSearch
|
|
|
735
716
|
def algolia_search_for_facet_values(facet, text, params = {})
|
|
736
717
|
index_name = params.delete(:index) ||
|
|
737
718
|
params.delete('index') ||
|
|
738
|
-
params.delete(:slave) ||
|
|
739
|
-
params.delete('slave') ||
|
|
740
719
|
params.delete(:replica) ||
|
|
741
720
|
params.delete('replicas')
|
|
742
721
|
index = algolia_index(index_name)
|
|
743
722
|
query = Hash[params.map { |k, v| [k.to_s, v.to_s] }]
|
|
744
|
-
index.
|
|
723
|
+
index.search_for_facet_values(facet, text, query)['facetHits']
|
|
745
724
|
end
|
|
746
725
|
|
|
747
726
|
# deprecated (renaming)
|
|
@@ -770,7 +749,7 @@ module AlgoliaSearch
|
|
|
770
749
|
# Loop over each index to see if a attribute used in records has changed
|
|
771
750
|
algolia_configurations.each do |options, settings|
|
|
772
751
|
next if algolia_indexing_disabled?(options)
|
|
773
|
-
next if options[:
|
|
752
|
+
next if options[:replica]
|
|
774
753
|
return true if algolia_object_id_changed?(object, options)
|
|
775
754
|
settings.get_attribute_names(object).each do |k|
|
|
776
755
|
return true if algolia_attribute_changed?(object, k)
|
|
@@ -815,13 +794,10 @@ module AlgoliaSearch
|
|
|
815
794
|
options[:check_settings] = true if options[:check_settings].nil?
|
|
816
795
|
|
|
817
796
|
if !algolia_indexing_disabled?(options) && options[:check_settings] && algoliasearch_settings_changed?(current_settings, index_settings)
|
|
818
|
-
used_slaves = !current_settings.nil? && !current_settings['slaves'].nil?
|
|
819
797
|
replicas = index_settings.delete(:replicas) ||
|
|
820
|
-
index_settings.delete('replicas')
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
index_settings[used_slaves ? :slaves : :replicas] = replicas unless replicas.nil? || options[:inherit]
|
|
824
|
-
@algolia_indexes[settings].set_settings(index_settings)
|
|
798
|
+
index_settings.delete('replicas')
|
|
799
|
+
index_settings[:replicas] = replicas unless replicas.nil? || options[:inherit]
|
|
800
|
+
@algolia_indexes[settings].set_settings!(index_settings)
|
|
825
801
|
end
|
|
826
802
|
|
|
827
803
|
@algolia_indexes[settings]
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
module AlgoliaSearch
|
|
2
2
|
module Configuration
|
|
3
|
+
def initiliaze
|
|
4
|
+
@client = nil
|
|
5
|
+
end
|
|
6
|
+
|
|
3
7
|
def configuration
|
|
4
8
|
@@configuration || raise(NotConfigured, "Please configure AlgoliaSearch. Set AlgoliaSearch.configuration = {application_id: 'YOUR_APPLICATION_ID', api_key: 'YOUR_API_KEY'}")
|
|
5
9
|
end
|
|
6
10
|
|
|
7
11
|
def configuration=(configuration)
|
|
8
12
|
@@configuration = configuration.merge(
|
|
9
|
-
|
|
13
|
+
:user_agent => "Algolia for Rails (#{AlgoliaSearch::VERSION}); Rails (#{Rails::VERSION::STRING})"
|
|
10
14
|
)
|
|
11
|
-
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def client
|
|
18
|
+
if @client.nil?
|
|
19
|
+
setup_client
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@client
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def setup_client
|
|
26
|
+
@client = Algolia::Search::Client.create_with_config(Algolia::Search::Config.new(@@configuration))
|
|
12
27
|
end
|
|
13
28
|
end
|
|
14
29
|
end
|
|
@@ -2,7 +2,11 @@ module AlgoliaSearch
|
|
|
2
2
|
module Utilities
|
|
3
3
|
class << self
|
|
4
4
|
def get_model_classes
|
|
5
|
-
|
|
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
|
|
6
10
|
AlgoliaSearch.instance_variable_get :@included_in
|
|
7
11
|
end
|
|
8
12
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -29,8 +29,9 @@ RSpec.configure do |c|
|
|
|
29
29
|
|
|
30
30
|
# Remove all indexes setup in this run in local or CI
|
|
31
31
|
c.after(:suite) do
|
|
32
|
-
safe_index_list.each do |
|
|
33
|
-
|
|
32
|
+
safe_index_list.each do |i|
|
|
33
|
+
index = AlgoliaSearch.client.init_index(i['name'])
|
|
34
|
+
index.delete!
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
end
|
|
@@ -45,7 +46,7 @@ end
|
|
|
45
46
|
|
|
46
47
|
# get a list of safe indexes in local or CI
|
|
47
48
|
def safe_index_list
|
|
48
|
-
list =
|
|
49
|
+
list = AlgoliaSearch.client.list_indexes['items']
|
|
49
50
|
list = list.select { |index| index["name"].include?(SAFE_INDEX_PREFIX) }
|
|
50
51
|
list.sort_by { |index| index["primary"] || "" }
|
|
51
52
|
end
|
data/spec/utilities_spec.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
2
2
|
|
|
3
|
-
AlgoliaSearch.configuration = { :application_id => ENV['ALGOLIA_APPLICATION_ID'], :api_key => ENV['ALGOLIA_API_KEY'] }
|
|
3
|
+
AlgoliaSearch.configuration = { :application_id => ENV['ALGOLIA_APPLICATION_ID'], :api_key => ENV['ALGOLIA_API_KEY'], :symbolize_keys => false }
|
|
4
4
|
|
|
5
5
|
describe AlgoliaSearch::Utilities do
|
|
6
6
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: algoliasearch-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Algolia
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-06-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|
|
@@ -25,25 +25,19 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 1.5.1
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: algolia
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.26.0
|
|
34
31
|
- - "<"
|
|
35
32
|
- !ruby/object:Gem::Version
|
|
36
|
-
version:
|
|
33
|
+
version: 3.0.0
|
|
37
34
|
type: :runtime
|
|
38
35
|
prerelease: false
|
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
37
|
requirements:
|
|
41
|
-
- - ">="
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: 1.26.0
|
|
44
38
|
- - "<"
|
|
45
39
|
- !ruby/object:Gem::Version
|
|
46
|
-
version:
|
|
40
|
+
version: 3.0.0
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
42
|
name: will_paginate
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -119,14 +113,14 @@ email: contact@algolia.com
|
|
|
119
113
|
executables: []
|
|
120
114
|
extensions: []
|
|
121
115
|
extra_rdoc_files:
|
|
122
|
-
-
|
|
116
|
+
- CHANGELOG.MD
|
|
123
117
|
- LICENSE
|
|
124
118
|
- README.md
|
|
125
119
|
files:
|
|
126
120
|
- ".document"
|
|
127
121
|
- ".rspec"
|
|
128
122
|
- ".travis.yml"
|
|
129
|
-
-
|
|
123
|
+
- CHANGELOG.MD
|
|
130
124
|
- Gemfile
|
|
131
125
|
- Gemfile.lock
|
|
132
126
|
- LICENSE
|
|
@@ -173,7 +167,7 @@ homepage: http://github.com/algolia/algoliasearch-rails
|
|
|
173
167
|
licenses:
|
|
174
168
|
- MIT
|
|
175
169
|
metadata: {}
|
|
176
|
-
post_install_message:
|
|
170
|
+
post_install_message:
|
|
177
171
|
rdoc_options: []
|
|
178
172
|
require_paths:
|
|
179
173
|
- lib
|
|
@@ -188,8 +182,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
188
182
|
- !ruby/object:Gem::Version
|
|
189
183
|
version: '0'
|
|
190
184
|
requirements: []
|
|
191
|
-
rubygems_version: 3.0.
|
|
192
|
-
signing_key:
|
|
185
|
+
rubygems_version: 3.0.6
|
|
186
|
+
signing_key:
|
|
193
187
|
specification_version: 4
|
|
194
188
|
summary: AlgoliaSearch integration to your favorite ORM
|
|
195
189
|
test_files: []
|