Commit 2055b70997e4306569af32fffe2b81e8b625a76c
1 parent
5d050c74
Exists in
relation
and in
1 other branch
Added model and model_includes
Showing
2 changed files
with
31 additions
and
1 deletions
Show diff stats
lib/searchkick/relation.rb
... | ... | @@ -136,6 +136,27 @@ module Searchkick |
136 | 136 | self |
137 | 137 | end |
138 | 138 | |
139 | + def models(*args) | |
140 | + spawn.models!(*args) | |
141 | + end | |
142 | + | |
143 | + def models!(*args) | |
144 | + options[:models] = Array(options[:models]) + args | |
145 | + self | |
146 | + end | |
147 | + | |
148 | + def model_includes(value) | |
149 | + spawn.model_includes!(value) | |
150 | + end | |
151 | + | |
152 | + def model_includes!(value) | |
153 | + options[:model_includes] ||= {} | |
154 | + value.each do |k, v| | |
155 | + options[:model_includes][k] = Array(options[:model_includes][k]) + v | |
156 | + end | |
157 | + self | |
158 | + end | |
159 | + | |
139 | 160 | # same as Active Record |
140 | 161 | def inspect |
141 | 162 | entries = results.first(11).map!(&:inspect) | ... | ... |
test/sql_test.rb
... | ... | @@ -169,8 +169,10 @@ class SqlTest < Minitest::Test |
169 | 169 | |
170 | 170 | def test_includes |
171 | 171 | skip unless defined?(ActiveRecord) |
172 | + | |
172 | 173 | store_names ["Product A"] |
173 | 174 | assert Product.search("product", includes: [:store]).first.association(:store).loaded? |
175 | + assert Product.search("product", relation: true).includes(:store).first.association(:store).loaded? | |
174 | 176 | end |
175 | 177 | |
176 | 178 | def test_model_includes |
... | ... | @@ -180,10 +182,17 @@ class SqlTest < Minitest::Test |
180 | 182 | store_names ["Store A"], Store |
181 | 183 | |
182 | 184 | associations = {Product => [:store], Store => [:products]} |
183 | - result = Searchkick.search("*", models: [Product, Store], model_includes: associations) | |
184 | 185 | |
186 | + result = Searchkick.search("*", models: [Product, Store], model_includes: associations) | |
185 | 187 | assert_equal 2, result.length |
188 | + result.group_by(&:class).each_pair do |klass, records| | |
189 | + assert records.first.association(associations[klass].first).loaded? | |
190 | + end | |
186 | 191 | |
192 | + skip "Not working yet" | |
193 | + | |
194 | + result = Searchkick.search("*", relation: true).models(Product, Store).model_includes(associations) | |
195 | + assert_equal 2, result.length | |
187 | 196 | result.group_by(&:class).each_pair do |klass, records| |
188 | 197 | assert records.first.association(associations[klass].first).loaded? |
189 | 198 | end | ... | ... |