From aa2062c922de01e767db9f3d270edf13cbce01f0 Mon Sep 17 00:00:00 2001 From: Alexey Vasiliev Date: Sat, 14 Sep 2024 04:26:05 +0300 Subject: [PATCH] improve handling for aliases --- lib/ransack/nodes/condition.rb | 7 ------- lib/ransack/nodes/grouping.rb | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/ransack/nodes/condition.rb b/lib/ransack/nodes/condition.rb index 851d122b..4499a8a0 100644 --- a/lib/ransack/nodes/condition.rb +++ b/lib/ransack/nodes/condition.rb @@ -192,13 +192,6 @@ def key "_#{predicate.name}" end - def same_name_or_key?(val) - return false if val.nil? - - val = val.to_s - name == val || key == val - end - def eql?(other) self.class == other.class && self.attributes == other.attributes && diff --git a/lib/ransack/nodes/grouping.rb b/lib/ransack/nodes/grouping.rb index 95d64886..57d12d90 100644 --- a/lib/ransack/nodes/grouping.rb +++ b/lib/ransack/nodes/grouping.rb @@ -49,14 +49,27 @@ def conditions=(conditions) alias :c= :conditions= def [](key) - conditions.detect { |c| c.same_name_or_key?(key) } + conditions.detect do |c| + matched_condition(c, key.to_s, named_condition?(key.to_s)) + end end def []=(key, value) - conditions.reject! { |c| c.same_name_or_key?(key) } + conditions.reject! do |c| + matched_condition(c, key.to_s, named_condition?(key.to_s)) + end + self.conditions << value end + def matched_condition(c, key, named = false) + named ? c.name == key : c.key == key + end + + def named_condition?(key) + conditions.map(&:name).include?(key) + end + def values conditions + groupings end