Sha256: aea0988997b36c8650e7d805aa883f410dd1ca800d0dc3c18d82baa326c420cb

Contents?: true

Size: 1.16 KB

Versions: 27

Compression:

Stored size: 1.16 KB

Contents

module ForestAdminDatasourceToolkit
  module Components
    module Query
      class ProjectionFactory
        include ForestAdminDatasourceToolkit::Utils
        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'

            if schema.type == 'OneToOne' || schema.type == 'ManyToOne' || schema.type == 'PolymorphicOneToOne'
              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
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
forest_admin_datasource_toolkit-1.0.0.pre.beta.89 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.88 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.87 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.86 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.85 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.83 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.82 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.81 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.80 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.79 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.78 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.77 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.76 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.75 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.74 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.73 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.72 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.71 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.70 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.69 lib/forest_admin_datasource_toolkit/components/query/projection_factory.rb