Module: Uniword::Wordprocessingml::RunProperties::Merging
- Included in:
- Uniword::Wordprocessingml::RunProperties
- Defined in:
- lib/uniword/wordprocessingml/run_properties/merging.rb
Overview
Merge semantics for RunProperties.
Provides style-inheritance merging where override properties take precedence over base properties. Uses the model's declared attributes via read_attribute/write_attribute — fully model-driven.
Instance Method Summary collapse
-
#merged_over(base) ⇒ RunProperties
Merge with another RunProperties, using self as override.
Instance Method Details
#merged_over(base) ⇒ RunProperties
Merge with another RunProperties, using self as override.
For each declared attribute: if self has a non-default value, use it; otherwise use the other's value.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/uniword/wordprocessingml/run_properties/merging.rb', line 19 def merged_over(base) merged = RunProperties.new self.class.attributes.each_key do |attr_name| override_val = read_attribute(attr_name) base_val = base.read_attribute(attr_name) use_override = if override_val.is_a?(Lutaml::Model::Serializable) override_val.class.attributes.any? do |k, _| !override_val.using_default?(k) end else !override_val.nil? end value = use_override ? override_val : base_val next unless value merged.write_attribute(attr_name, value) end merged end |