module Kameleoon::Targeting::TreeBuilder

Public Instance Methods

create_tree(conditions_data_json) click to toggle source
# File lib/kameleoon/targeting/tree_builder.rb, line 9
def create_tree(conditions_data_json)
  if conditions_data_json.nil?
    return nil
  end
  if conditions_data_json['firstLevel'].empty?
    conditions_data_json['firstLevelOrOperators'] = []
  end
  create_first_level(conditions_data_json)
end

Private Instance Methods

create_first_level(conditions_data_json) click to toggle source
# File lib/kameleoon/targeting/tree_builder.rb, line 22
def create_first_level(conditions_data_json)
  unless conditions_data_json['firstLevel'].empty?
    left_first_level = conditions_data_json['firstLevel'].shift
    left_child = create_second_level(left_first_level)

    unless conditions_data_json['firstLevel'].empty?
      or_operator = conditions_data_json['firstLevelOrOperators'].shift
      if or_operator
        return Tree.new(or_operator, left_child, create_first_level(conditions_data_json))
      end

      right_first_level = conditions_data_json['firstLevel'].shift
      right_child = create_second_level(right_first_level)
      tree = Tree.new(or_operator, left_child, right_child)

      unless conditions_data_json['firstLevel'].empty?
        return Tree.new(conditions_data_json['firstLevelOrOperators'].shift, tree, create_first_level(conditions_data_json))
      end
      return tree
    end
    return left_child
  end
  nil
end
create_second_level(conditions_data_json) click to toggle source
# File lib/kameleoon/targeting/tree_builder.rb, line 47
def create_second_level(conditions_data_json)

  unless conditions_data_json.nil? or conditions_data_json['conditions'].empty?
    left_child = Tree.new
    left_child.condition = get_condition(conditions_data_json['conditions'].shift)

    unless conditions_data_json['conditions'].empty?
      or_operator = conditions_data_json['orOperators'].shift
      if or_operator
        return Tree.new(or_operator, left_child, create_second_level(conditions_data_json))
      end

      right_child = Tree.new
      right_child.condition = get_condition(conditions_data_json['conditions'].shift)
      tree = Tree.new(or_operator, left_child, right_child)
      unless conditions_data_json['conditions'].empty?
        return Tree.new(conditions_data_json['orOperators'].shift, tree, create_second_level(conditions_data_json))
      end
      return tree
    end
    return left_child
  end
  nil
end