Sha256: 5638833044328484698078083da13d9b5e59888fe481d6bc0c34ecd6127e2acf

Contents?: true

Size: 1.25 KB

Versions: 26

Compression:

Stored size: 1.25 KB

Contents

require "digest"

module PgSearch
  class Configuration
    class Association
      attr_reader :columns

      def initialize(model, name, column_names)
        @model = model
        @name = name
        @columns = Array(column_names).map do |column_name, weight|
          ForeignColumn.new(column_name, weight, @model, self)
        end
      end

      def table_name
        @model.reflect_on_association(@name).table_name
      end

      def join(primary_key)
        "LEFT OUTER JOIN (#{relation(primary_key).to_sql}) #{subselect_alias} ON #{subselect_alias}.id = #{primary_key}"
      end

      def subselect_alias
        Configuration.alias(table_name, @name, "subselect")
      end

      private

      def selects
        postgresql_version = @model.connection.send(:postgresql_version)

        columns.map do |column|
          case postgresql_version
          when 0..90000
            "array_to_string(array_agg(#{column.full_name}::text), ' ') AS #{column.alias}"
          else
            "string_agg(#{column.full_name}::text, ' ') AS #{column.alias}"
          end
        end.join(", ")
      end

      def relation(primary_key)
        @model.unscoped.joins(@name).select("#{primary_key} AS id, #{selects}").group(primary_key)
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
pg_search-1.0.6 lib/pg_search/configuration/association.rb
pg_search-1.0.5 lib/pg_search/configuration/association.rb
pg_search-1.0.4 lib/pg_search/configuration/association.rb
pg_search-1.0.3 lib/pg_search/configuration/association.rb
pg_search-1.0.2 lib/pg_search/configuration/association.rb
pg_search-1.0.1 lib/pg_search/configuration/association.rb
pg_search-1.0.0 lib/pg_search/configuration/association.rb
pg_search-0.7.9 lib/pg_search/configuration/association.rb
pg_search-0.7.8 lib/pg_search/configuration/association.rb
pg_search-0.7.7 lib/pg_search/configuration/association.rb
pg_search-0.7.6 lib/pg_search/configuration/association.rb
pg_search-0.7.5 lib/pg_search/configuration/association.rb
pg_search-0.7.4 lib/pg_search/configuration/association.rb
pg_search-0.7.3 lib/pg_search/configuration/association.rb
pg_search-0.7.2 lib/pg_search/configuration/association.rb
pg_search-0.7.1 lib/pg_search/configuration/association.rb
pg_search-0.7.0 lib/pg_search/configuration/association.rb
pg_search-0.6.4 lib/pg_search/configuration/association.rb
pg_search-0.6.3 lib/pg_search/configuration/association.rb
pg_search-0.6.2 lib/pg_search/configuration/association.rb