forest_admin_agent 1.11.1 → 1.11.2

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: 445f354ed8eaf9567eccc0f7cac0848fd9eedf04b2af637a74c940c366ac557c
4
- data.tar.gz: 46b039da25c0b2fe290d5dda07fc1b94f2e5596acd0d09ac3381f23fb6037072
3
+ metadata.gz: b86976d2835d4456be6e3567a955b4c76531e8c63b25a255b323a004e3c5a591
4
+ data.tar.gz: 6ad7b65f13b25434df78c7a36307e78d8e994bddf706960867312e94ee953c59
5
5
  SHA512:
6
- metadata.gz: 5755b0d455dd80662106e8cd81a0681851b75f97a1600dd8f38a3818d202e58676f9e1d33c7938050a1c25f8b21abdbc4c52df884466ee120cd480950327a0fe
7
- data.tar.gz: 40ed85fee7edc930a766155f13aa3c659ae71a0501612ae665dee82118687a2ece666f216513a95d9b5f2ce1bf06c3c6ce8fe86ac799ed95cdf74931df50d68f
6
+ metadata.gz: 92375da8ac656dcfe69872c2879393e2a1a71e64fceebb4c133ef4036d5edbde8dcec8e09f18fbccd1ea3c469ae017e3267c605b4d27aed49ec7a62c934e588f
7
+ data.tar.gz: 6755b2702df3445af65f3ceb7d6652bcfd9c59ad3a0615682797743380f73eb76f384eed00493ddcbd641833caa0d9852cc765995b1ad21c47bb19eb567a1f1a
@@ -35,22 +35,44 @@ module ForestAdminAgent
35
35
 
36
36
  return ProjectionFactory.all(collection) unless fields != '' && !fields.nil?
37
37
 
38
- fields = fields.split(',').map do |field_name|
39
- column = collection.schema[:fields][field_name.strip]
38
+ requested_field_names = fields.split(',').map(&:strip)
39
+ add_polymorphic_type_fields(collection, requested_field_names)
40
+ projection_fields = build_projection_fields(collection, requested_field_names, args)
41
+
42
+ projection = Projection.new(projection_fields)
43
+ ForestAdminDatasourceToolkit::Validations::ProjectionValidator.validate?(collection, projection)
44
+
45
+ projection
46
+ end
47
+
48
+ def self.add_polymorphic_type_fields(collection, requested_field_names)
49
+ polymorphic_relations = collection.schema[:fields].select { |_, field| field.type == 'PolymorphicManyToOne' }
50
+
51
+ polymorphic_relations.each do |relation_name, relation_field|
52
+ foreign_key = relation_field.foreign_key
53
+ type_field = relation_field.foreign_key_type_field
54
+
55
+ relation_requested = requested_field_names.include?(relation_name)
56
+ foreign_key_requested = requested_field_names.include?(foreign_key)
57
+ type_field_missing = !requested_field_names.include?(type_field)
58
+
59
+ requested_field_names << type_field if (relation_requested || foreign_key_requested) && type_field_missing
60
+ end
61
+ end
62
+
63
+ def self.build_projection_fields(collection, requested_field_names, args)
64
+ requested_field_names.map do |field_name|
65
+ column = collection.schema[:fields][field_name]
40
66
  if column.type == 'Column'
41
- field_name.strip
67
+ field_name
42
68
  elsif column.type == 'PolymorphicManyToOne'
43
- "#{field_name.strip}:*"
69
+ "#{field_name}:*"
44
70
  else
45
- "#{field_name.strip}:#{args[:params][:fields][field_name.strip]}"
71
+ "#{field_name}:#{args[:params][:fields][field_name]}"
46
72
  end
47
73
  end
48
-
49
- projection = Projection.new(fields)
50
- ForestAdminDatasourceToolkit::Validations::ProjectionValidator.validate?(collection, projection)
51
-
52
- projection
53
74
  end
75
+ private_class_method :add_polymorphic_type_fields, :build_projection_fields
54
76
 
55
77
  def self.parse_projection_with_pks(collection, args)
56
78
  projection = parse_projection(collection, args)
@@ -6,7 +6,7 @@ module ForestAdminAgent
6
6
  module Schema
7
7
  class SchemaEmitter
8
8
  LIANA_NAME = "agent-ruby"
9
- LIANA_VERSION = "1.11.1"
9
+ LIANA_VERSION = "1.11.2"
10
10
 
11
11
  def self.generate(datasource)
12
12
  datasource.collections
@@ -1,3 +1,3 @@
1
1
  module ForestAdminAgent
2
- VERSION = "1.11.1"
2
+ VERSION = "1.11.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.1
4
+ version: 1.11.2
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: 2025-10-21 00:00:00.000000000 Z
12
+ date: 2025-10-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport