Sha256: 7cb4eeb07f6b2ba0c77c549774bd5ba445e05c010552747f82bc3b9a3d77867f
Contents?: true
Size: 1.61 KB
Versions: 2
Compression:
Stored size: 1.61 KB
Contents
module Ransack module Nodes class Condition def arel_predicate attributes.map { |attribute| association = attribute.parent if negative? && attribute.associated_collection? query = context.build_correlated_subquery(association) query.where(format_predicate(attribute).not) context.remove_association(association) Arel::Nodes::NotIn.new(context.primary_key, Arel.sql(query.to_sql)) else format_predicate(attribute) end }.reduce(combinator_method) end private def combinator_method combinator === Constants::OR ? :or : :and end def format_predicate(attribute) arel_pred = arel_predicate_for_attribute(attribute) arel_values = formatted_values_for_attribute(attribute) predicate = attribute.attr.public_send(arel_pred, arel_values) if in_predicate?(predicate) predicate.right = predicate.right.map do |predicate| casted_array?(predicate) ? format_values_for(predicate) : predicate end end predicate end def in_predicate?(predicate) return unless defined?(Arel::Nodes::Casted) predicate.class == Arel::Nodes::In end def casted_array?(predicate) predicate.respond_to?(:val) && predicate.val.is_a?(Array) end def format_values_for(predicate) predicate.val.map do |value| value.is_a?(String) ? Arel::Nodes.build_quoted(value) : value end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ransack-1.8.2 | lib/ransack/adapters/active_record/ransack/nodes/condition.rb |
ransack-1.8.1 | lib/ransack/adapters/active_record/ransack/nodes/condition.rb |