Sha256: 7de6299669113e0971332cfcc69f3994cc5be006d7df61f834335a4ce8e31b62

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

require "rails_or/version"
require 'rails'
require 'active_record'

class ActiveRecord::Relation
  if method_defined?(:or)
    alias rails5_or or
    def or(other)
      other = self.except(:where).where(other) if other.class == Hash
      return rails5_or(other)
    end
  else
    def or(other)
      other = self.except(:where).where(other) if other.class == Hash
      combining = group_values.any? ? :having : :where
      left_values = send("#{combining}_values")
      right_values = other.send("#{combining}_values")
      common = left_values & right_values
      mine = left_values - common
      theirs = right_values - common
      if mine.any? && theirs.any?
        mine = mine.map { |x| String === x ? Arel.sql(x) : x }
        theirs = theirs.map { |x| String === x ? Arel.sql(x) : x }
        mine = [Arel::Nodes::And.new(mine)] if mine.size > 1
        theirs = [Arel::Nodes::And.new(theirs)] if theirs.size > 1
        common << Arel::Nodes::Or.new(mine.first, theirs.first)
      end
      send("#{combining}_values=", common)
      return self  
    end
  end
end
class ActiveRecord::Base
  def self.or(*args)
    self.where('').or(*args)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_or-0.0.1 lib/rails_or.rb