elasticsearch_record 1.2.3 → 1.2.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdb71bb8689c67cd7a2ef1add3b7ad0ab6710cbb5833313cb3f474267c39e43e
4
- data.tar.gz: 06ec37ac16f5adb110da8ffa08c9c44fc20993be3db12bf8033315cfa9611fc3
3
+ metadata.gz: 41575ee0aefe81ed3069dc81c1c0d9062ea841998a7bb4affaab885dad0a4291
4
+ data.tar.gz: 73e98d4b6aad0fda63df0fff562537245f2d4c95fb5f53d67ad891550d8e6b1b
5
5
  SHA512:
6
- metadata.gz: 929f5df6456203e7bce466d62836805bb9a75ff5a89856c75cd1ba187a95e05f51aa3ad676c3058d7ad95d1295db1422571964240182000bef59a8cdb95181bc
7
- data.tar.gz: 7f785864f92bc6f3243ea081236327ff7c600833cdf74a11d59239f31551d928dc7b8bb1b4952ec38aadaa8d0174ac2a7ceeebae100a247c3534ef4c1609e484
6
+ metadata.gz: ed60e5fe591f92169d51f333c600338cd4fcee46ca6ca988625399ee522068e3b5c67738fe5b9f3fcc1cede6491cfb1b969c525d5b1af2f2ed03e93b7303237f
7
+ data.tar.gz: eb51b9dc16d0457905fb15589ff2542dfe0a8f59678459be910726305a3b0527e3ddcee6d7e5271e2db0d658dabd5f476eea71b4dca27c1f99375d987de50f0b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- elasticsearch_record (1.2.3)
4
+ elasticsearch_record (1.2.4)
5
5
  activerecord (~> 7.0.0)
6
6
  elasticsearch (~> 8.4)
7
7
 
@@ -28,7 +28,7 @@ GEM
28
28
  elasticsearch-api (= 8.5.2)
29
29
  elasticsearch-api (8.5.2)
30
30
  multi_json
31
- faraday (2.7.1)
31
+ faraday (2.7.2)
32
32
  faraday-net_http (>= 2.0, < 3.1)
33
33
  ruby2_keywords (>= 0.0.4)
34
34
  faraday-net_http (3.0.2)
data/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # ElasticsearchRecord - CHANGELOG
2
2
 
3
+ ## [1.2.4] - 2022-12-15
4
+ * [fix] missing `#visit_Arel_Nodes_In` method in `Arel::Visitors::ElasticsearchQuery` to build array conditions
5
+ * [fix] resolving buckets from relation `ElasticsearchRecord::Result#buckets` not recognizing sub-buckets
6
+
3
7
  ## [1.2.3] - 2022-12-12
4
8
  * [fix] `change_table` 'if_exists: true' returns at the wrong state
5
9
 
@@ -355,6 +355,23 @@ module Arel # :nodoc: all
355
355
  end
356
356
  end
357
357
 
358
+ # DIRECT ASSIGNMENT
359
+ def visit_Arel_Nodes_In(o)
360
+ self.collector.preparable = false
361
+
362
+ attr, values = o.left, o.right
363
+
364
+ if Array === values
365
+ unless values.empty?
366
+ values.delete_if { |value| unboundable?(value) }
367
+ end
368
+
369
+ return failed! if values.empty?
370
+ end
371
+
372
+ assign(:filter, [{ terms: { visit(attr) => visit(values) } }])
373
+ end
374
+
358
375
  def visit_Arel_Nodes_And(o)
359
376
  collect(o.children)
360
377
  end
@@ -393,6 +410,7 @@ module Arel # :nodoc: all
393
410
  claim(:index, o.name)
394
411
  end
395
412
 
413
+ # RAW RETURN
396
414
  def visit_Struct_Raw(o)
397
415
  o
398
416
  end
@@ -9,7 +9,7 @@ module ElasticsearchRecord
9
9
  module VERSION
10
10
  MAJOR = 1
11
11
  MINOR = 2
12
- TINY = 3
12
+ TINY = 4
13
13
  PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
@@ -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.2.4
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: 2022-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord