Sha256: ed9ce1c79ed4e2669421fbe08a0c9774366bc03059286b1f796a53053acd0dc8

Contents?: true

Size: 1.17 KB

Versions: 24

Compression:

Stored size: 1.17 KB

Contents

module Searchlogic
  module ActiveRecord
    # Active Record is pretty inconsistent with how their SQL is constructed. This
    # method attempts to close the gap between the various inconsistencies.
    module Consistency
      def self.included(klass)
        klass.class_eval do
          alias_method_chain :merge_joins, :searchlogic
        end
      end
      
      # In AR multiple joins are sometimes in a single join query, and other times they
      # are not. The merge_joins method in AR should account for this, but it doesn't.
      # This fixes that problem. This way there is one join per string, which allows
      # the merge_joins method to delete duplicates.
      def merge_joins_with_searchlogic(*args)
        joins = merge_joins_without_searchlogic(*args)
        joins = joins.collect { |j| j.is_a?(String) ? j.split("  ") : j }.flatten.uniq
        joins = joins.collect do |j|
          if j.is_a?(String) && !j =~ / (AND|OR) /i
            j.gsub(/(.*) ON (.*) = (.*)/) do |m|
              sorted = [$2,$3].sort
              "#{$1} ON #{sorted[0]} = #{sorted[1]}"
            end
          else
            j
          end
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 4 rubygems

Version Path
binarylogic-searchlogic-2.3.5 lib/searchlogic/active_record/consistency.rb
searchlogic-donotuse-2.3.9 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.7 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.6 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.5 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.4 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.3 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.2 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.1 lib/searchlogic/active_record/consistency.rb
searchlogic-2.4.0 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.16 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.15 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.14 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.13 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.12 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.11 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.10 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.9 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.8 lib/searchlogic/active_record/consistency.rb
searchlogic-2.3.7 lib/searchlogic/active_record/consistency.rb