diff --git a/lib/searchkick/relation.rb b/lib/searchkick/relation.rb index ae7b074..613a3e4 100644 --- a/lib/searchkick/relation.rb +++ b/lib/searchkick/relation.rb @@ -136,6 +136,27 @@ module Searchkick self end + def models(*args) + spawn.models!(*args) + end + + def models!(*args) + options[:models] = Array(options[:models]) + args + self + end + + def model_includes(value) + spawn.model_includes!(value) + end + + def model_includes!(value) + options[:model_includes] ||= {} + value.each do |k, v| + options[:model_includes][k] = Array(options[:model_includes][k]) + v + end + self + end + # same as Active Record def inspect entries = results.first(11).map!(&:inspect) diff --git a/test/sql_test.rb b/test/sql_test.rb index 30ecaac..17763f8 100644 --- a/test/sql_test.rb +++ b/test/sql_test.rb @@ -169,8 +169,10 @@ class SqlTest < Minitest::Test def test_includes skip unless defined?(ActiveRecord) + store_names ["Product A"] assert Product.search("product", includes: [:store]).first.association(:store).loaded? + assert Product.search("product", relation: true).includes(:store).first.association(:store).loaded? end def test_model_includes @@ -180,10 +182,17 @@ class SqlTest < Minitest::Test store_names ["Store A"], Store associations = {Product => [:store], Store => [:products]} - result = Searchkick.search("*", models: [Product, Store], model_includes: associations) + result = Searchkick.search("*", models: [Product, Store], model_includes: associations) assert_equal 2, result.length + result.group_by(&:class).each_pair do |klass, records| + assert records.first.association(associations[klass].first).loaded? + end + skip "Not working yet" + + result = Searchkick.search("*", relation: true).models(Product, Store).model_includes(associations) + assert_equal 2, result.length result.group_by(&:class).each_pair do |klass, records| assert records.first.association(associations[klass].first).loaded? end -- libgit2 0.21.0