Class: Modl::Parser::Parsed::ParsedConditionTest

Inherits:
MODLParserBaseListener show all
Defined in:
lib/modl/parser/parsed.rb

Overview

Class to represent a parsed grammar object

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MODLParserBaseListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #enter_every_rule, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item, #exit_every_rule, #visit_error_node, #visit_terminal

Methods inherited from MODLParserListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item

Constructor Details

#initialize(global) ⇒ ParsedConditionTest

Returns a new instance of ParsedConditionTest.



735
736
737
738
# File 'lib/modl/parser/parsed.rb', line 735

def initialize(global)
  @global = global
  @subConditionList = []
end

Instance Attribute Details

#subConditionListObject

Returns the value of attribute subConditionList.



733
734
735
# File 'lib/modl/parser/parsed.rb', line 733

def subConditionList
  @subConditionList
end

Instance Method Details

#enterModl_condition_test(ctx) ⇒ Object



759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
# File 'lib/modl/parser/parsed.rb', line 759

def enterModl_condition_test(ctx)
  ctx_children = ctx.children
  unless ctx_children.empty?
    last_operator = nil
    should_negate = false
    ctx_children.each do |child|
      if child.is_a? MODLParser::Modl_condition_groupContext
        condition_group = ParsedConditionGroup.new @global
        child.enter_rule(condition_group)

        p2 = OpenStruct.new
        p2.a = last_operator
        p2.b = should_negate

        p1 = OpenStruct.new
        p1.a = condition_group
        p1.b = p2

        @subConditionList << p1

        last_operator = nil
        should_negate = false
      elsif child.is_a? MODLParser::Modl_conditionContext
        condition = ParsedCondition.new @global
        child.enter_rule(condition)
        p2 = OpenStruct.new
        p2.a = last_operator
        p2.b = should_negate

        p1 = OpenStruct.new
        p1.a = condition
        p1.b = p2

        @subConditionList << p1

        last_operator = nil
        should_negate = false
      else
        if child.text == '!'
          should_negate = true
        else
          last_operator = child.text
        end
      end
    end
  end
end

#evaluateObject



740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
# File 'lib/modl/parser/parsed.rb', line 740

def evaluate
  result = false
  @subConditionList.each do |s|
    last_operator = s.b.a
    should_negate = s.b.b

    partial = s.a.evaluate
    case last_operator
    when '&'
      result &= should_negate ? !partial : partial
    when '|'
      result |= should_negate ? !partial : partial
    else
      result |= should_negate ? !partial : partial
    end
  end
  result
end