Sha256: 6af1c7b6c069770b82f965002cb444a977ff1de2cd2d08e9542088b17f875663

Contents?: true

Size: 1.23 KB

Versions: 12

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module PageMagic
  class Comparator
    # class Map - used to model parameter matching requirements
    class ParameterMap < Comparator
      def initialize(map)
        comparator = normalise(map).keys.each_with_object({}) do |key, params|
          params[key] = Comparator.for(map[key])
        end

        fuzzy = comparator.values.any?(&:fuzzy?)
        super(comparator, fuzzy)
      end

      def <=>(other)
        return 0 if empty? && other.empty?
        return 1 if other.empty?
        if (comparator.keys.size <=> other.comparator.keys.size).zero?
          return literal_matchers.size <=> other.literal_matchers.size
        end

        0
      end

      def empty?
        comparator.empty?
      end

      def literal_matchers
        comparator.values.find_all { |matcher| !matcher.fuzzy? }
      end

      def match?(params)
        params_copy = normalise(params)
        comparator.each do |key, value|
          param = params_copy[key]
          return false unless value&.match?(param)
        end
        true
      end

      private

      def normalise(hash)
        hash.keys.each_with_object({}) do |key, map|
          map[key.to_sym] = hash[key]
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
page_magic-2.0.13 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.12 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.11 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.10 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.9 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.6 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.5 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.4 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.3 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.2 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.1 lib/page_magic/comparator/parameter_map.rb
page_magic-2.0.0 lib/page_magic/comparator/parameter_map.rb