Class: Canon::Comparison::Dimensions::AttributePresenceDimension

Inherits:
BaseDimension
  • Object
show all
Defined in:
lib/canon/comparison/dimensions/attribute_presence_dimension.rb

Overview

Attribute presence dimension

Handles comparison of attribute presence (which attributes exist). Supports :strict and :ignore behaviors.

Behaviors:

  • :strict - Attribute names must match exactly

  • :ignore - Skip attribute presence comparison

Constant Summary

Constants inherited from BaseDimension

BaseDimension::IGNORE, BaseDimension::NORMALIZE, BaseDimension::STRICT

Instance Method Summary collapse

Methods inherited from BaseDimension

#compare, #compare_normalize, #dimension_name, #equivalent?, #supports_normalization?

Instance Method Details

#compare_strict(names1, names2) ⇒ Boolean

Strict attribute presence comparison

Parameters:

  • names1 (Array<Symbol>)

    First attribute names

  • names2 (Array<Symbol>)

    Second attribute names

Returns:

  • (Boolean)

    true if attribute names are exactly equal



40
41
42
# File 'lib/canon/comparison/dimensions/attribute_presence_dimension.rb', line 40

def compare_strict(names1, names2) # rubocop:disable Naming/PredicateMethod
  names1.sort == names2.sort
end

#extract_data(node) ⇒ Array<Symbol>

Extract attribute names from a node

Parameters:

  • node (Moxml::Node, Nokogiri::XML::Node)

    Node to extract from

Returns:

  • (Array<Symbol>)

    Array of attribute names



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/canon/comparison/dimensions/attribute_presence_dimension.rb', line 21

def extract_data(node)
  return [] unless node

  # Handle Moxml nodes
  if node.is_a?(Moxml::Node)
    extract_from_moxml(node)
  # Handle Nokogiri nodes
  elsif node.is_a?(Nokogiri::XML::Node)
    extract_from_nokogiri(node)
  else
    []
  end
end