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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +22 -6
- data/docs/CHANGELOG.md +25 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/clone_table_definition.rb +9 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb +110 -9
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_definition.rb +0 -34
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_mapping_definition.rb +6 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/update_table_definition.rb +34 -29
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions.rb +2 -2
- data/lib/active_record/connection_adapters/elasticsearch/schema_dumper.rb +14 -2
- data/lib/active_record/connection_adapters/elasticsearch/schema_statements.rb +7 -1
- data/lib/active_record/connection_adapters/elasticsearch/table_statements.rb +74 -34
- data/lib/arel/collectors/elasticsearch_query.rb +10 -3
- data/lib/arel/visitors/elasticsearch_query.rb +35 -9
- data/lib/arel/visitors/elasticsearch_schema.rb +5 -4
- data/lib/elasticsearch_record/gem_version.rb +2 -2
- data/lib/elasticsearch_record/relation/calculation_methods.rb +3 -3
- data/lib/elasticsearch_record/relation/query_methods.rb +78 -49
- data/lib/elasticsearch_record/relation/result_methods.rb +1 -1
- data/lib/elasticsearch_record/result.rb +28 -15
- metadata +2 -2
@@ -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
|
-
|
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.
|
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:
|
11
|
+
date: 2023-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|