Sha256: 174157f58a9461fb305a4b4858690cb4e458712da1512392d0d54ab9ac4b6a65
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 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) return rails5_or(parse_or_parameter(*other)) end else def or(*other) other = parse_or_parameter(*other) 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.map!{|x| String === x ? Arel.sql(x) : x } 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) self.bind_values = self.bind_values + other.bind_values return self end end private def parse_or_parameter(*other) other = other.first if other.size == 1 case other when Hash ; klass.where(other) when Array ; klass.where(other) when String ; klass.where(other) else ; other 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-1.0.1 | lib/rails_or.rb |