From a639a133803b2aec9ff5d32d4b70845253f86a67 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Thu, 28 May 2015 16:16:30 -0400 Subject: [PATCH] Use cleaner recursive solution --- lib/liquid/tags/if.rb | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index d7f88aa..40176bb 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -83,23 +83,16 @@ module Liquid def strict_parse(markup) p = Parser.new(markup) - - conditions = [parse_comparison(p)] - - while op = (p.id?('and'.freeze) || p.id?('or'.freeze)) - conditions << op << parse_comparison(p) - end + condition = parse_binary_comparison(p) p.consume(:end_of_string) + condition + end - condition = conditions.pop - - until conditions.empty? - op = conditions.pop - new_cond = conditions.pop - new_cond.send(op, condition) - condition = new_cond + def parse_binary_comparison(p) + condition = parse_comparison(p) + if op = (p.id?('and'.freeze) || p.id?('or'.freeze)) + condition.send(op, parse_binary_comparison(p)) end - condition end