Class: ForestAdminDatasourceToolkit::Components::Query::ProjectionFactory

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb

Class Method Summary collapse

Class Method Details

.all(collection) ⇒ Object



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