Commit 684580b03d193dcac1223975aa6a51324dc437f3

Authored by Andrew Kane
1 parent 8fa1bd56

Build aggs relation

Showing 2 changed files with 18 additions and 1 deletions   Show diff stats
lib/searchkick/relation.rb
... ... @@ -232,7 +232,7 @@ module Searchkick
232 232  
233 233 # TODO merge options
234 234 def aggs!(*args)
235   - options[:aggs] = args.size == 1 ? args.first : args
  235 + options[:aggs] = hash_args(options[:aggs], args)
236 236 self
237 237 end
238 238  
... ... @@ -245,6 +245,18 @@ module Searchkick
245 245  
246 246 private
247 247  
  248 + def hash_args(old, new)
  249 + old ||= {}
  250 + new.each do |v|
  251 + if v.is_a?(Hash)
  252 + old.merge!(v)
  253 + else
  254 + old[v] = {}
  255 + end
  256 + end
  257 + old
  258 + end
  259 +
248 260 def sanitize_opts(attributes)
249 261 if attributes.respond_to?(:permitted?)
250 262 raise ActiveModel::ForbiddenAttributesError if !attributes.permitted?
... ...
test/aggs_test.rb
... ... @@ -21,6 +21,11 @@ class AggsTest < Minitest::Test
21 21 assert_equal ({1 => 1}), buckets_as_hash(Product.search("Product", relation: true).aggs(store_id: {where: {in_stock: true}}).aggs["store_id"])
22 22 end
23 23  
  24 + def test_relation
  25 + relation = Product.search("Product", relation: true).aggs(:store_id).aggs(color: {where: {in_stock: true}})
  26 + assert_equal ["color", "store_id"], relation.aggs.keys.sort
  27 + end
  28 +
24 29 def test_order
25 30 agg = Product.search("Product", aggs: {color: {order: {_key: "desc"}}}).aggs["color"]
26 31 assert_equal %w(red green blue), agg["buckets"].map { |b| b["key"] }
... ...