algoliasearch-rails 1.23.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +9 -0
- data/{ChangeLog → CHANGELOG.MD} +37 -0
- data/Gemfile +9 -35
- data/Gemfile.lock +123 -115
- data/README.md +35 -7
- data/algoliasearch-rails.gemspec +5 -5
- data/lib/algoliasearch-rails.rb +50 -69
- 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 +12 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d738368dd1684b9fa58b5507e65d0d7522930a6894e0e9684139fbd5def1a583
|
4
|
+
data.tar.gz: 8fdd59e52471fd184cf51092706fb345d699cd9d135385bd0a7ade084ec8dc2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f4a61d1eafcda6ffbca4c585026ca54d9aed7fb3b03b36143c19b5ee504196b10e2a8be88b7083004fb0b070dfd12bb0dbfecaa987c1761c8afca31326eeea
|
7
|
+
data.tar.gz: 6a8fb2b05c4798965164fc2f651624b2a69935dfa3a22d7704bb312424b7e0f796e7c3d5e9bbdc6d9058f17fe06cc0ec40bd41ee06233f11ce98435906f2a235
|
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,42 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## [Unreleased](https://github.com/algolia/algoliasearch-rails/compare/2.0.0...master)
|
4
|
+
|
5
|
+
## [2.0.0](https://github.com/algolia/algoliasearch-rails/compare/2.0.0...1.25.0)
|
6
|
+
|
7
|
+
### Breaking changes
|
8
|
+
- Adds support for `algolia` gem.
|
9
|
+
- Drops support for Ruby < 2.4
|
10
|
+
- Drops support for Rails < 5.1
|
11
|
+
|
12
|
+
## [1.25.0](https://github.com/algolia/algoliasearch-rails/compare/1.24.1...1.25.0) (2020-11-24)
|
13
|
+
|
14
|
+
### Added
|
15
|
+
- Pass array argument to geoloc ([#372](https://github.com/algolia/algoliasearch-rails/pull/372))
|
16
|
+
- Containerize the repo ([#391](https://github.com/algolia/algoliasearch-rails/pull/391))
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
- Use Zeitwerk for loading models in Rails 6 ([#364](https://github.com/algolia/algoliasearch-rails/pull/364))
|
20
|
+
|
21
|
+
## [1.24.1](https://github.com/algolia/algoliasearch-rails/releases/tag/1.24.1) (2020-07-15)
|
22
|
+
|
23
|
+
**Fixed**
|
24
|
+
|
25
|
+
* Fixes ruby warning 'Proc.new is deprecated'
|
26
|
+
|
27
|
+
## [1.24.0](https://github.com/algolia/algoliasearch-rails/releases/tag/1.24.0) (2020-02-21)
|
28
|
+
|
29
|
+
**Added**
|
30
|
+
|
31
|
+
* Adds indexLanguages in index settings
|
32
|
+
|
33
|
+
## [1.23.2](https://github.com/algolia/algoliasearch-rails/releases/tag/1.23.2) (2019-06-26)
|
34
|
+
|
35
|
+
**Fixed**
|
36
|
+
|
37
|
+
* Use `copy_index` when initiating a temporary index to preserve settings, synonyms, and rules.
|
38
|
+
|
39
|
+
|
3
40
|
## [1.23.0](https://github.com/algolia/algoliasearch-rails/releases/tag/1.23.0) (2019-06-25)
|
4
41
|
|
5
42
|
**Added**
|
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,66 @@ 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
|
-
mini_portile2 (2.4.0)
|
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
|
+
minitest (5.14.4)
|
116
|
+
multi_json (1.15.0)
|
112
117
|
multipart-post (2.1.1)
|
113
118
|
net-http-persistent (2.9.4)
|
114
119
|
net-http-pipeline (1.0.1)
|
115
|
-
nio4r (2.
|
116
|
-
nokogiri (1.
|
117
|
-
|
120
|
+
nio4r (2.5.7)
|
121
|
+
nokogiri (1.11.3-x86_64-darwin)
|
122
|
+
racc (~> 1.4)
|
118
123
|
pusher-client (0.6.2)
|
119
124
|
json
|
120
125
|
websocket (~> 1.0)
|
121
|
-
|
126
|
+
racc (1.5.2)
|
127
|
+
rack (2.2.3)
|
122
128
|
rack-test (1.1.0)
|
123
129
|
rack (>= 1.0, < 3)
|
124
|
-
rails (
|
125
|
-
actioncable (=
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
130
|
+
rails (6.1.3.1)
|
131
|
+
actioncable (= 6.1.3.1)
|
132
|
+
actionmailbox (= 6.1.3.1)
|
133
|
+
actionmailer (= 6.1.3.1)
|
134
|
+
actionpack (= 6.1.3.1)
|
135
|
+
actiontext (= 6.1.3.1)
|
136
|
+
actionview (= 6.1.3.1)
|
137
|
+
activejob (= 6.1.3.1)
|
138
|
+
activemodel (= 6.1.3.1)
|
139
|
+
activerecord (= 6.1.3.1)
|
140
|
+
activestorage (= 6.1.3.1)
|
141
|
+
activesupport (= 6.1.3.1)
|
142
|
+
bundler (>= 1.15.0)
|
143
|
+
railties (= 6.1.3.1)
|
136
144
|
sprockets-rails (>= 2.0.0)
|
137
145
|
rails-dom-testing (2.0.3)
|
138
146
|
activesupport (>= 4.2.0)
|
139
147
|
nokogiri (>= 1.6)
|
140
|
-
rails-html-sanitizer (1.0
|
141
|
-
loofah (~> 2.
|
142
|
-
railties (
|
143
|
-
actionpack (=
|
144
|
-
activesupport (=
|
148
|
+
rails-html-sanitizer (1.3.0)
|
149
|
+
loofah (~> 2.3)
|
150
|
+
railties (6.1.3.1)
|
151
|
+
actionpack (= 6.1.3.1)
|
152
|
+
activesupport (= 6.1.3.1)
|
145
153
|
method_source
|
146
154
|
rake (>= 0.8.7)
|
147
|
-
thor (
|
155
|
+
thor (~> 1.0)
|
148
156
|
rake (10.1.1)
|
149
|
-
rdoc (6.
|
157
|
+
rdoc (6.3.0)
|
150
158
|
redgreen (1.2.2)
|
151
159
|
rspec (2.99.0)
|
152
160
|
rspec-core (~> 2.99.0)
|
@@ -156,18 +164,17 @@ GEM
|
|
156
164
|
rspec-expectations (2.99.2)
|
157
165
|
diff-lcs (>= 1.1.3, < 2.0)
|
158
166
|
rspec-mocks (2.99.4)
|
159
|
-
sequel (5.
|
160
|
-
sprockets (
|
167
|
+
sequel (5.43.0)
|
168
|
+
sprockets (4.0.2)
|
161
169
|
concurrent-ruby (~> 1.0)
|
162
170
|
rack (> 1, < 3)
|
163
|
-
sprockets-rails (3.2.
|
171
|
+
sprockets-rails (3.2.2)
|
164
172
|
actionpack (>= 4.0)
|
165
173
|
activesupport (>= 4.0)
|
166
174
|
sprockets (>= 3.0.0)
|
167
|
-
sqlite3 (1.
|
168
|
-
thor (
|
169
|
-
|
170
|
-
travis (1.8.10)
|
175
|
+
sqlite3 (1.4.2)
|
176
|
+
thor (1.1.0)
|
177
|
+
travis (1.8.13)
|
171
178
|
backports
|
172
179
|
faraday (~> 0.9)
|
173
180
|
faraday_middleware (~> 0.9, >= 0.9.1)
|
@@ -178,34 +185,35 @@ GEM
|
|
178
185
|
typhoeus (~> 0.6, >= 0.6.8)
|
179
186
|
typhoeus (0.8.0)
|
180
187
|
ethon (>= 0.8.0)
|
181
|
-
tzinfo (
|
182
|
-
|
183
|
-
websocket (1.2.
|
184
|
-
websocket-driver (0.7.
|
188
|
+
tzinfo (2.0.4)
|
189
|
+
concurrent-ruby (~> 1.0)
|
190
|
+
websocket (1.2.9)
|
191
|
+
websocket-driver (0.7.3)
|
185
192
|
websocket-extensions (>= 0.1.0)
|
186
|
-
websocket-extensions (0.1.
|
187
|
-
will_paginate (3.
|
193
|
+
websocket-extensions (0.1.5)
|
194
|
+
will_paginate (3.3.0)
|
195
|
+
zeitwerk (2.4.2)
|
188
196
|
|
189
197
|
PLATFORMS
|
190
|
-
|
198
|
+
x86_64-darwin-19
|
191
199
|
|
192
200
|
DEPENDENCIES
|
193
201
|
active_model_serializers
|
194
202
|
activerecord-jdbc-adapter
|
195
203
|
activerecord-jdbcsqlite3-adapter
|
196
|
-
|
204
|
+
algolia (< 3.0.0)
|
197
205
|
jdbc-sqlite3
|
198
|
-
json (
|
199
|
-
kaminari
|
200
|
-
rails (
|
206
|
+
json (>= 1.5.1)
|
207
|
+
kaminari (< 1)
|
208
|
+
rails (~> 6.1)
|
201
209
|
rake (~> 10.1.0)
|
202
210
|
rdoc
|
203
211
|
redgreen
|
204
212
|
rspec (>= 2.5.0, < 3.0)
|
205
213
|
sequel (>= 4.0)
|
206
|
-
sqlite3 (
|
214
|
+
sqlite3 (~> 1.4.0)
|
207
215
|
travis
|
208
216
|
will_paginate (>= 2.3.15)
|
209
217
|
|
210
218
|
BUNDLED WITH
|
211
|
-
2.
|
219
|
+
2.2.15
|
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,13 +246,7 @@ module AlgoliaSearch
|
|
248
246
|
v = get_setting(k)
|
249
247
|
settings[k] = v if !v.nil?
|
250
248
|
end
|
251
|
-
if !@options[:
|
252
|
-
settings[:slaves] = additional_indexes.select { |opts, s| opts[:slave] }.map do |opts, s|
|
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
|
+
if !@options[:replica]
|
258
250
|
settings[:replicas] = additional_indexes.select { |opts, s| opts[:replica] }.map do |opts, s|
|
259
251
|
name = opts[:index_name]
|
260
252
|
name = "#{name}_#{Rails.env.to_s}" if opts[:per_environment]
|
@@ -266,27 +258,20 @@ module AlgoliaSearch
|
|
266
258
|
end
|
267
259
|
|
268
260
|
def add_index(index_name, options = {}, &block)
|
269
|
-
raise ArgumentError.new('Cannot specify additional index on a replica index') if @options[:
|
261
|
+
raise ArgumentError.new('Cannot specify additional index on a replica index') if @options[:replica]
|
270
262
|
raise ArgumentError.new('No block given') if !block_given?
|
271
263
|
raise ArgumentError.new('Options auto_index and auto_remove cannot be set on nested indexes') if options[:auto_index] || options[:auto_remove]
|
272
264
|
@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
265
|
options[:index_name] = index_name
|
275
|
-
@additional_indexes[options] = IndexSettings.new(options,
|
266
|
+
@additional_indexes[options] = IndexSettings.new(options, &block)
|
276
267
|
end
|
277
268
|
|
278
269
|
def add_replica(index_name, options = {}, &block)
|
279
|
-
raise ArgumentError.new('Cannot specify additional replicas on a replica index') if @options[:
|
270
|
+
raise ArgumentError.new('Cannot specify additional replicas on a replica index') if @options[:replica]
|
280
271
|
raise ArgumentError.new('No block given') if !block_given?
|
281
272
|
add_index(index_name, options.merge({ :replica => true, :primary_settings => self }), &block)
|
282
273
|
end
|
283
274
|
|
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
275
|
def additional_indexes
|
291
276
|
@additional_indexes || {}
|
292
277
|
end
|
@@ -304,11 +289,11 @@ module AlgoliaSearch
|
|
304
289
|
# are correctly logged or thrown depending on the `raise_on_failure` option
|
305
290
|
class SafeIndex
|
306
291
|
def initialize(name, raise_on_failure)
|
307
|
-
@index =
|
292
|
+
@index = AlgoliaSearch.client.init_index(name)
|
308
293
|
@raise_on_failure = raise_on_failure.nil? || raise_on_failure
|
309
294
|
end
|
310
295
|
|
311
|
-
::Algolia::Index.instance_methods(false).each do |m|
|
296
|
+
::Algolia::Search::Index.instance_methods(false).each do |m|
|
312
297
|
define_method(m) do |*args, &block|
|
313
298
|
SafeIndex.log_or_throw(m, @raise_on_failure) do
|
314
299
|
@index.send(m, *args, &block)
|
@@ -329,7 +314,7 @@ module AlgoliaSearch
|
|
329
314
|
SafeIndex.log_or_throw(:get_settings, @raise_on_failure) do
|
330
315
|
begin
|
331
316
|
@index.get_settings(*args)
|
332
|
-
rescue Algolia::
|
317
|
+
rescue Algolia::AlgoliaHttpError => e
|
333
318
|
return {} if e.code == 404 # not fatal
|
334
319
|
raise e
|
335
320
|
end
|
@@ -339,7 +324,7 @@ module AlgoliaSearch
|
|
339
324
|
# expose move as well
|
340
325
|
def self.move_index(old_name, new_name)
|
341
326
|
SafeIndex.log_or_throw(:move_index, true) do
|
342
|
-
|
327
|
+
AlgoliaSearch.client.move_index(old_name, new_name)
|
343
328
|
end
|
344
329
|
end
|
345
330
|
|
@@ -389,7 +374,7 @@ module AlgoliaSearch
|
|
389
374
|
end
|
390
375
|
|
391
376
|
def algoliasearch(options = {}, &block)
|
392
|
-
self.algoliasearch_settings = IndexSettings.new(options,
|
377
|
+
self.algoliasearch_settings = IndexSettings.new(options, &block)
|
393
378
|
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
379
|
|
395
380
|
attr_accessor :highlight_result, :snippet_result
|
@@ -511,7 +496,7 @@ module AlgoliaSearch
|
|
511
496
|
algolia_configurations.each do |options, settings|
|
512
497
|
next if algolia_indexing_disabled?(options)
|
513
498
|
index = algolia_ensure_init(options, settings)
|
514
|
-
next if options[:
|
499
|
+
next if options[:replica]
|
515
500
|
last_task = nil
|
516
501
|
|
517
502
|
algolia_find_in_batches(batch_size) do |group|
|
@@ -531,7 +516,7 @@ module AlgoliaSearch
|
|
531
516
|
end
|
532
517
|
last_task = index.save_objects(objects)
|
533
518
|
end
|
534
|
-
index.wait_task(last_task["taskID"]) if last_task and (synchronous || options[:synchronous])
|
519
|
+
index.wait_task(last_task.raw_response["taskID"]) if last_task and (synchronous || options[:synchronous])
|
535
520
|
end
|
536
521
|
nil
|
537
522
|
end
|
@@ -541,7 +526,7 @@ module AlgoliaSearch
|
|
541
526
|
return if algolia_without_auto_index_scope
|
542
527
|
algolia_configurations.each do |options, settings|
|
543
528
|
next if algolia_indexing_disabled?(options)
|
544
|
-
next if options[:
|
529
|
+
next if options[:replica]
|
545
530
|
|
546
531
|
# fetch the master settings
|
547
532
|
master_index = algolia_ensure_init(options, settings)
|
@@ -549,20 +534,25 @@ module AlgoliaSearch
|
|
549
534
|
master_settings.merge!(JSON.parse(settings.to_settings.to_json)) # convert symbols to strings
|
550
535
|
|
551
536
|
# remove the replicas of the temporary index
|
552
|
-
master_settings.delete :slaves
|
553
|
-
master_settings.delete 'slaves'
|
554
537
|
master_settings.delete :replicas
|
555
538
|
master_settings.delete 'replicas'
|
556
539
|
|
557
540
|
# init temporary index
|
558
|
-
|
559
|
-
|
541
|
+
src_index_name = algolia_index_name(options)
|
542
|
+
tmp_index_name = "#{src_index_name}.tmp"
|
543
|
+
tmp_options = options.merge({ :index_name => tmp_index_name })
|
560
544
|
tmp_options.delete(:per_environment) # already included in the temporary index_name
|
561
545
|
tmp_settings = settings.dup
|
562
|
-
tmp_index = algolia_ensure_init(tmp_options, tmp_settings, master_settings)
|
563
546
|
|
564
|
-
|
565
|
-
|
547
|
+
if options[:check_settings] == false
|
548
|
+
@client.copy_index!(src_index_name, tmp_index_name, %w(settings synonyms rules))
|
549
|
+
tmp_index = SafeIndex.new(tmp_index_name, !!options[:raise_on_failure])
|
550
|
+
else
|
551
|
+
tmp_index = algolia_ensure_init(tmp_options, tmp_settings, master_settings)
|
552
|
+
end
|
553
|
+
|
554
|
+
algolia_find_in_batches(batch_size) do |group|
|
555
|
+
if algolia_conditional_index?(options)
|
566
556
|
# select only indexable objects
|
567
557
|
group = group.select { |o| algolia_indexable?(o, tmp_options) }
|
568
558
|
end
|
@@ -570,8 +560,8 @@ module AlgoliaSearch
|
|
570
560
|
tmp_index.save_objects(objects)
|
571
561
|
end
|
572
562
|
|
573
|
-
move_task = SafeIndex.move_index(tmp_index.name,
|
574
|
-
master_index.wait_task(move_task["taskID"]) if synchronous || options[:synchronous]
|
563
|
+
move_task = SafeIndex.move_index(tmp_index.name, src_index_name)
|
564
|
+
master_index.wait_task(move_task.raw_response["taskID"]) if synchronous || options[:synchronous]
|
575
565
|
end
|
576
566
|
nil
|
577
567
|
end
|
@@ -580,8 +570,6 @@ module AlgoliaSearch
|
|
580
570
|
algolia_configurations.each do |options, settings|
|
581
571
|
if options[:primary_settings] && options[:inherit]
|
582
572
|
primary = options[:primary_settings].to_settings
|
583
|
-
primary.delete :slaves
|
584
|
-
primary.delete 'slaves'
|
585
573
|
primary.delete :replicas
|
586
574
|
primary.delete 'replicas'
|
587
575
|
final_settings = primary.merge(settings.to_settings)
|
@@ -591,7 +579,7 @@ module AlgoliaSearch
|
|
591
579
|
|
592
580
|
index = SafeIndex.new(algolia_index_name(options), true)
|
593
581
|
task = index.set_settings(final_settings)
|
594
|
-
index.wait_task(task["taskID"]) if synchronous
|
582
|
+
index.wait_task(task.raw_response["taskID"]) if synchronous
|
595
583
|
end
|
596
584
|
end
|
597
585
|
|
@@ -599,9 +587,9 @@ module AlgoliaSearch
|
|
599
587
|
algolia_configurations.each do |options, settings|
|
600
588
|
next if algolia_indexing_disabled?(options)
|
601
589
|
index = algolia_ensure_init(options, settings)
|
602
|
-
next if options[:
|
590
|
+
next if options[:replica]
|
603
591
|
task = index.save_objects(objects.map { |o| settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o, options) })
|
604
|
-
index.wait_task(task["taskID"]) if synchronous || options[:synchronous]
|
592
|
+
index.wait_task(task.raw_response["taskID"]) if synchronous || options[:synchronous]
|
605
593
|
end
|
606
594
|
end
|
607
595
|
|
@@ -611,13 +599,13 @@ module AlgoliaSearch
|
|
611
599
|
next if algolia_indexing_disabled?(options)
|
612
600
|
object_id = algolia_object_id_of(object, options)
|
613
601
|
index = algolia_ensure_init(options, settings)
|
614
|
-
next if options[:
|
602
|
+
next if options[:replica]
|
615
603
|
if algolia_indexable?(object, options)
|
616
604
|
raise ArgumentError.new("Cannot index a record with a blank objectID") if object_id.blank?
|
617
605
|
if synchronous || options[:synchronous]
|
618
|
-
index.
|
606
|
+
index.save_object!(settings.get_attributes(object).merge 'objectID' => algolia_object_id_of(object, options))
|
619
607
|
else
|
620
|
-
index.
|
608
|
+
index.save_object(settings.get_attributes(object).merge 'objectID' => algolia_object_id_of(object, options))
|
621
609
|
end
|
622
610
|
elsif algolia_conditional_index?(options) && !object_id.blank?
|
623
611
|
# remove non-indexable objects
|
@@ -638,7 +626,7 @@ module AlgoliaSearch
|
|
638
626
|
algolia_configurations.each do |options, settings|
|
639
627
|
next if algolia_indexing_disabled?(options)
|
640
628
|
index = algolia_ensure_init(options, settings)
|
641
|
-
next if options[:
|
629
|
+
next if options[:replica]
|
642
630
|
if synchronous || options[:synchronous]
|
643
631
|
index.delete_object!(object_id)
|
644
632
|
else
|
@@ -652,8 +640,8 @@ module AlgoliaSearch
|
|
652
640
|
algolia_configurations.each do |options, settings|
|
653
641
|
next if algolia_indexing_disabled?(options)
|
654
642
|
index = algolia_ensure_init(options, settings)
|
655
|
-
next if options[:
|
656
|
-
synchronous || options[:synchronous] ? index.
|
643
|
+
next if options[:replica]
|
644
|
+
synchronous || options[:synchronous] ? index.clear_objects! : index.clear_objects
|
657
645
|
@algolia_indexes[settings] = nil
|
658
646
|
end
|
659
647
|
nil
|
@@ -662,8 +650,6 @@ module AlgoliaSearch
|
|
662
650
|
def algolia_raw_search(q, params = {})
|
663
651
|
index_name = params.delete(:index) ||
|
664
652
|
params.delete('index') ||
|
665
|
-
params.delete(:slave) ||
|
666
|
-
params.delete('slave') ||
|
667
653
|
params.delete(:replica) ||
|
668
654
|
params.delete('replica')
|
669
655
|
index = algolia_index(index_name)
|
@@ -728,13 +714,11 @@ module AlgoliaSearch
|
|
728
714
|
def algolia_search_for_facet_values(facet, text, params = {})
|
729
715
|
index_name = params.delete(:index) ||
|
730
716
|
params.delete('index') ||
|
731
|
-
params.delete(:slave) ||
|
732
|
-
params.delete('slave') ||
|
733
717
|
params.delete(:replica) ||
|
734
718
|
params.delete('replicas')
|
735
719
|
index = algolia_index(index_name)
|
736
720
|
query = Hash[params.map { |k, v| [k.to_s, v.to_s] }]
|
737
|
-
index.
|
721
|
+
index.search_for_facet_values(facet, text, query)['facetHits']
|
738
722
|
end
|
739
723
|
|
740
724
|
# deprecated (renaming)
|
@@ -763,7 +747,7 @@ module AlgoliaSearch
|
|
763
747
|
# Loop over each index to see if a attribute used in records has changed
|
764
748
|
algolia_configurations.each do |options, settings|
|
765
749
|
next if algolia_indexing_disabled?(options)
|
766
|
-
next if options[:
|
750
|
+
next if options[:replica]
|
767
751
|
return true if algolia_object_id_changed?(object, options)
|
768
752
|
settings.get_attribute_names(object).each do |k|
|
769
753
|
return true if algolia_attribute_changed?(object, k)
|
@@ -808,13 +792,10 @@ module AlgoliaSearch
|
|
808
792
|
options[:check_settings] = true if options[:check_settings].nil?
|
809
793
|
|
810
794
|
if !algolia_indexing_disabled?(options) && options[:check_settings] && algoliasearch_settings_changed?(current_settings, index_settings)
|
811
|
-
used_slaves = !current_settings.nil? && !current_settings['slaves'].nil?
|
812
795
|
replicas = index_settings.delete(:replicas) ||
|
813
|
-
index_settings.delete('replicas')
|
814
|
-
|
815
|
-
|
816
|
-
index_settings[used_slaves ? :slaves : :replicas] = replicas unless replicas.nil? || options[:inherit]
|
817
|
-
@algolia_indexes[settings].set_settings(index_settings)
|
796
|
+
index_settings.delete('replicas')
|
797
|
+
index_settings[:replicas] = replicas unless replicas.nil? || options[:inherit]
|
798
|
+
@algolia_indexes[settings].set_settings!(index_settings)
|
818
799
|
end
|
819
800
|
|
820
801
|
@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:
|
4
|
+
version: 2.0.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-05-03 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.23.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.23.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,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
182
|
- !ruby/object:Gem::Version
|
189
183
|
version: '0'
|
190
184
|
requirements: []
|
191
|
-
|
192
|
-
|
185
|
+
rubyforge_project:
|
186
|
+
rubygems_version: 2.7.6.2
|
187
|
+
signing_key:
|
193
188
|
specification_version: 4
|
194
189
|
summary: AlgoliaSearch integration to your favorite ORM
|
195
190
|
test_files: []
|