elasticsearch_record 1.2.3 → 1.3.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.
@@ -72,21 +72,7 @@ module ElasticsearchRecord
72
72
  # aggregations are already a hash with key => data, but to prevent reference manipulation on the hash
73
73
  # we have to create a new one here...
74
74
  aggregations.reduce({}) { |buckets, (key, agg)|
75
- # check if this agg has a bucket
76
- if agg.key?(:buckets)
77
- buckets[key] = agg[:buckets].reduce({}) { |m, b|
78
- # buckets can be a Hash or Array (of Hashes)
79
- bucket_key, bucket = b.is_a?(Hash) ? [b[:key], b] : b
80
- m[bucket_key] = bucket.except(:key, :doc_count).transform_values { |val| val[:value] }
81
-
82
- m
83
- }
84
- elsif agg.key?(:value)
85
- buckets[key] = agg[:value]
86
- elsif agg.key?(:values)
87
- buckets[key] = agg[:values]
88
- end
89
-
75
+ buckets[key] = _resolve_bucket(agg)
90
76
  buckets
91
77
  }.with_indifferent_access
92
78
  end
@@ -247,6 +233,33 @@ module ElasticsearchRecord
247
233
  end
248
234
  end
249
235
 
236
+ # resolves bucket nodes recursively
237
+ # @param [Object] node
238
+ # @return [Object]
239
+ def _resolve_bucket(node)
240
+ # check, if node is not a hash - in this case we just return it's value
241
+ return node unless node.is_a?(Hash)
242
+
243
+ # check if the node has a bucket
244
+ if node.key?(:buckets)
245
+ node[:buckets].reduce({}) { |m, b|
246
+ # buckets can be a Hash or Array (of Hashes)
247
+ bucket_key, bucket = b.is_a?(Hash) ? [b[:key], b] : b
248
+
249
+ m[bucket_key] = _resolve_bucket(bucket)
250
+ m
251
+ }
252
+ elsif node.key?(:value)
253
+ node[:value]
254
+ elsif node.key?(:values)
255
+ node[:values]
256
+ else
257
+ # resolve sub-aggregations / nodes without 'meta' keys.
258
+ # if this results in an empty hash, the return will be nil
259
+ node.except(:key, :doc_count, :doc_count_error_upper_bound, :sum_other_doc_count).transform_values { |val| _resolve_bucket(val) }.presence
260
+ end
261
+ end
262
+
250
263
  # builds computed results (used to build ActiveRecord models)
251
264
  # @return [Array]
252
265
  def computed_results
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Gonsior
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-12 00:00:00.000000000 Z
11
+ date: 2023-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord