6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb', line 6
def self.all(collection)
projection_fields = collection.schema[:fields].reduce([]) do |memo, path|
column_name = path[0]
schema = path[1]
memo += [column_name] if schema.type == 'Column'
to_one_relations = %w[OneToOne ManyToOne PolymorphicOneToOne]
if to_one_relations.include?(schema.type)
relation = collection.datasource.get_collection(schema.foreign_collection)
relation_columns = relation.schema[:fields]
.select { |_column_name, relation_column| relation_column.type == 'Column' }
.keys
.map { |relation_column_name| "#{column_name}:#{relation_column_name}" }
memo += relation_columns
end
memo += ["#{column_name}:*"] if schema.type == 'PolymorphicManyToOne'
memo
end
Projection.new projection_fields
end
|