forest_admin_datasource_customizer 1.0.0.pre.beta.59 → 1.0.0.pre.beta.60
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 546f0cd46dfa45397848a4cf173fc66573b7adf07c68e2255b7b2ee44703d440
|
4
|
+
data.tar.gz: 62ee92da96f2e7c5b4d1fd3ed90c9aff152356c26545cec579d03ff40da5f4c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b435320c4af013dcef24be9ef7bcf9095cec3deaddb32923d82a027e4149377eddb82fcfbc12e569f5ab34e6121a616d52dba920a0cf22e3558d820016f7af9c
|
7
|
+
data.tar.gz: '09f6e4b2379e15017598b9b90331f6e9bae0b9fe39a2bb4ff7da6c3a90c1e135eedf295b7d514f2927605e1a37dd91ac1efa23bd06c852521f10a938ccf1e5c7'
|
@@ -19,28 +19,36 @@ module ForestAdminDatasourceCustomizer
|
|
19
19
|
return if paths.include?(new_path)
|
20
20
|
|
21
21
|
computed = collection.get_computed(new_path)
|
22
|
-
|
23
|
-
|
22
|
+
computed_dependencies = Flattener.with_null_marker(computed.dependencies)
|
23
|
+
nested_dependencies = Projection.new(computed_dependencies)
|
24
|
+
.nest(
|
25
|
+
prefix: if new_path.include?(':')
|
26
|
+
new_path.slice(0, new_path.rindex(':'))
|
27
|
+
end
|
28
|
+
)
|
24
29
|
|
25
30
|
nested_dependencies.each do |path|
|
26
31
|
queue_field(ctx, collection, path, paths, flatten)
|
27
32
|
end
|
28
33
|
|
29
34
|
dependency_values = nested_dependencies.map { |path| flatten[paths.index(path)] }
|
35
|
+
|
30
36
|
paths.push(new_path)
|
31
37
|
|
32
|
-
flatten << compute_field(ctx, computed,
|
38
|
+
flatten << compute_field(ctx, computed, computed_dependencies, dependency_values)
|
33
39
|
end
|
34
40
|
|
35
41
|
def self.compute_from_records(ctx, collection, records_projection, desired_projection, records)
|
36
|
-
paths = records_projection
|
42
|
+
paths = Flattener.with_null_marker(records_projection)
|
37
43
|
flatten = Flattener.flatten(records, paths)
|
38
44
|
|
39
45
|
desired_projection.each do |path|
|
40
46
|
queue_field(ctx, collection, path, paths, flatten)
|
41
47
|
end
|
42
48
|
|
43
|
-
|
49
|
+
final_projection = Flattener.with_null_marker(desired_projection)
|
50
|
+
|
51
|
+
Flattener.un_flatten(final_projection.map { |path| flatten[paths.index(path)] }, final_projection)
|
44
52
|
end
|
45
53
|
|
46
54
|
def self.transform_unique_values(inputs, callback)
|
@@ -3,9 +3,55 @@ module ForestAdminDatasourceCustomizer
|
|
3
3
|
module Computed
|
4
4
|
module Utils
|
5
5
|
class Flattener
|
6
|
+
include ForestAdminDatasourceToolkit::Components::Query
|
7
|
+
|
8
|
+
class Undefined
|
9
|
+
def key?(_key)
|
10
|
+
false
|
11
|
+
end
|
12
|
+
|
13
|
+
def dig(*_keys)
|
14
|
+
self
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
MARKER_NAME = '__null_marker'.freeze
|
19
|
+
def self.with_null_marker(projection)
|
20
|
+
new_projection = Projection.new(projection)
|
21
|
+
projection.each do |path|
|
22
|
+
parts = path.split(':')
|
23
|
+
|
24
|
+
parts.slice(1, parts.size).each_with_index do |_item, index|
|
25
|
+
new_projection << "#{parts.slice(0, index + 1).join(":")}:#{MARKER_NAME}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
new_projection.uniq
|
30
|
+
end
|
31
|
+
|
6
32
|
def self.flatten(records, projection)
|
7
33
|
projection.map do |field|
|
8
|
-
|
34
|
+
parts = field.split(':')
|
35
|
+
records.map do |record|
|
36
|
+
value = record
|
37
|
+
|
38
|
+
parts.slice(0, parts.size - 1).each_with_index do |_item, index|
|
39
|
+
value = if value&.key?(parts[index])
|
40
|
+
value[parts[index]]
|
41
|
+
else
|
42
|
+
Undefined.new
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# for markers, the value tells us which fields are null so that we can set them.
|
47
|
+
if parts[parts.length - 1] == MARKER_NAME
|
48
|
+
value.nil? ? nil : Undefined.new
|
49
|
+
elsif value&.key?(parts[parts.length - 1])
|
50
|
+
value[parts[parts.length - 1]]
|
51
|
+
else
|
52
|
+
Undefined.new
|
53
|
+
end
|
54
|
+
end
|
9
55
|
end
|
10
56
|
end
|
11
57
|
|
@@ -17,11 +63,11 @@ module ForestAdminDatasourceCustomizer
|
|
17
63
|
records[record_index] = {}
|
18
64
|
|
19
65
|
projection.each_with_index do |path, path_index|
|
20
|
-
parts = path.split(':').reject { |part| part
|
66
|
+
parts = path.split(':').reject { |part| part == MARKER_NAME }
|
21
67
|
value = flatten[path_index][record_index]
|
22
68
|
|
23
69
|
# Ignore undefined values.
|
24
|
-
next if value.
|
70
|
+
next if value.is_a? Undefined
|
25
71
|
|
26
72
|
# Set all others (including null)
|
27
73
|
record = records[record_index]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: forest_admin_datasource_customizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.pre.beta.
|
4
|
+
version: 1.0.0.pre.beta.60
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthieu
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-07-
|
12
|
+
date: 2024-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|