Class: Canon::Comparison::Dimensions::AttributeValuesDimension
- Inherits:
-
BaseDimension
- Object
- BaseDimension
- Canon::Comparison::Dimensions::AttributeValuesDimension
- Defined in:
- lib/canon/comparison/dimensions/attribute_values_dimension.rb
Overview
Attribute values dimension
Handles comparison of attribute values. Supports :strict, :strip, :compact, :normalize, and :ignore behaviors.
Behaviors:
-
:strict - Exact attribute value comparison
-
:strip - Compare with leading/trailing whitespace removed
-
:compact - Compare with internal whitespace collapsed
-
:normalize - Compare with whitespace stripped and collapsed
-
:ignore - Skip attribute value comparison
Constant Summary
Constants inherited from BaseDimension
BaseDimension::IGNORE, BaseDimension::NORMALIZE, BaseDimension::STRICT
Instance Method Summary collapse
-
#compare(data1, data2, behavior) ⇒ Boolean
Compare with custom behavior.
-
#compare_compact(attrs1, attrs2) ⇒ Boolean
Compact comparison.
-
#compare_normalize(attrs1, attrs2) ⇒ Boolean
Normalized comparison.
-
#compare_strict(attrs1, attrs2) ⇒ Boolean
Strict attribute value comparison.
-
#compare_strip(attrs1, attrs2) ⇒ Boolean
Strip comparison.
-
#extract_data(node) ⇒ Hash
Extract attribute values from a node.
Methods inherited from BaseDimension
#dimension_name, #equivalent?, #supports_normalization?
Instance Method Details
#compare(data1, data2, behavior) ⇒ Boolean
Compare with custom behavior
Supports the extended behaviors for attribute values.
104 105 106 107 108 109 110 111 112 113 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 104 def compare(data1, data2, behavior) case behavior when :strip compare_strip(data1, data2) when :compact compare_compact(data1, data2) else super end end |
#compare_compact(attrs1, attrs2) ⇒ Boolean
Compact comparison
Compare with internal whitespace collapsed.
73 74 75 76 77 78 79 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 73 def compare_compact(attrs1, attrs2) all_keys = (attrs1.keys | attrs2.keys) all_keys.all? do |key| compact_whitespace(attrs1[key].to_s) == compact_whitespace(attrs2[key].to_s) end end |
#compare_normalize(attrs1, attrs2) ⇒ Boolean
Normalized comparison
Compare with whitespace stripped and collapsed.
88 89 90 91 92 93 94 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 88 def compare_normalize(attrs1, attrs2) all_keys = (attrs1.keys | attrs2.keys) all_keys.all? do |key| normalize_text(attrs1[key].to_s) == normalize_text(attrs2[key].to_s) end end |
#compare_strict(attrs1, attrs2) ⇒ Boolean
Strict attribute value comparison
42 43 44 45 46 47 48 49 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 42 def compare_strict(attrs1, attrs2) # Get all unique attribute names all_keys = (attrs1.keys | attrs2.keys) all_keys.all? do |key| attrs1[key].to_s == attrs2[key].to_s end end |
#compare_strip(attrs1, attrs2) ⇒ Boolean
Strip comparison
Compare with leading/trailing whitespace removed.
58 59 60 61 62 63 64 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 58 def compare_strip(attrs1, attrs2) all_keys = (attrs1.keys | attrs2.keys) all_keys.all? do |key| attrs1[key].to_s.strip == attrs2[key].to_s.strip end end |
#extract_data(node) ⇒ Hash
Extract attribute values from a node
Returns a hash of attribute name to value.
27 28 29 30 31 32 33 34 35 |
# File 'lib/canon/comparison/dimensions/attribute_values_dimension.rb', line 27 def extract_data(node) return {} unless node if Canon::XmlBackend.nokogiri? extract_from_nokogiri(node) else extract_from_moxml(node) end end |