lib/kameleoon/targeting/conditions/page_url_condition.rb



# frozen_string_literal: true

require 'kameleoon/data/manager/data_map_storage'
require 'kameleoon/data/manager/page_view_visit'
require_relative 'string_value_condition'

module Kameleoon
  # @api private
  module Targeting
    # PageUrlCondition is a condition for checking url of a page
    class PageUrlCondition < StringValueCondition
      def initialize(json_condition)
        super(json_condition, json_condition['url'])
      end

      def check(page_view_visit_storage)
        return false unless page_view_visit_storage.is_a?(Kameleoon::DataManager::DataMapStorage)
        return !page_view_visit_storage.get(condition_value).nil? if operator == Operator::EXACT

        is_targeted = false
        page_view_visit_storage.enumerate do |visit|
          is_targeted = check_page_view_visit(visit)
          break if is_targeted
        end
        is_targeted
      end

      private

      def check_page_view_visit(visit)
        visit.is_a?(Kameleoon::DataManager::PageViewVisit) && check_targeting(visit.page_view.url)
      end
    end
  end
end