Sha256: d513ad7cf69a540b6f61f65d25ec4dd2b4ead579a099205e9a7cc84e7cd9b9b5

Contents?: true

Size: 896 Bytes

Versions: 2

Compression:

Stored size: 896 Bytes

Contents

module SearchCop
  class QueryBuilder
    attr_accessor :query_info, :scope, :sql

    def initialize(model, query, scope, query_options)
      self.scope = scope
      self.query_info = QueryInfo.new(model, scope)

      arel = SearchCop::Parser.parse(query, query_info, query_options).optimize!

      self.sql = SearchCop::Visitors::Visitor.new(model.connection).visit(arel)
    end

    def associations
      all_associations - [query_info.model.table_name.to_sym]
    end

    private

    def all_associations
      scope.reflection.attributes.values.flatten.collect { |column| association_for column.split(".").first }.uniq
    end

    def association_for(column)
      alias_value = scope.reflection.aliases[column]

      association = alias_value.respond_to?(:table_name) ? alias_value.table_name : alias_value
      association ||= column

      association.to_sym
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
search_cop-1.2.2 lib/search_cop/query_builder.rb
search_cop-1.2.1 lib/search_cop/query_builder.rb