lib/kitchen/ancestor.rb in openstax_kitchen-2.0.0 vs lib/kitchen/ancestor.rb in openstax_kitchen-3.0.0

- old
+ new

@@ -1,29 +1,66 @@ +# frozen_string_literal: true + module Kitchen + # A wrapper for an element representing an ancestor (up the DOM tree) of another + # element; keeps track of the number of descendants it has of a particular type + # class Ancestor - attr_accessor :type + # The type, e.g. +:page+, +:term+ + # @return [Symbol] the type + # + attr_reader :type + + # The ancestor element + # @return [ElementBase] the ancestor element + # attr_accessor :element + # Create a new Ancestor + # + # @param element [ElementBase] the ancestor element + # def initialize(element) @element = element @type = element.short_type @descendant_counts = {} end + # Adds 1 to the descendant count for the given type + # + # @param descendant_type [String, Symbol] the descendent's type + # def increment_descendant_count(descendant_type) @descendant_counts[descendant_type.to_sym] = get_descendant_count(descendant_type) + 1 end + # Decreases the descendant count for the given type by some amount + # + # @param descendant_type [String, Symbol] the descendent's type + # @param by [Integer] the amount by which to decrement + # @raise [RangeError] if descendant count is a negative number + # def decrement_descendant_count(descendant_type, by: 1) + raise(RangeError, 'An element cannot have negative descendants') \ + if (get_descendant_count(descendant_type) - by).negative? + @descendant_counts[descendant_type.to_sym] = get_descendant_count(descendant_type) - by end + # Returns the descendant count for the given type + # + # @param descendant_type [String, Symbol] the descendent's type + # @return [Integer] the count + # def get_descendant_count(descendant_type) @descendant_counts[descendant_type.to_sym] || 0 end + # Makes a new Ancestor around the same element, with new counts + # def clone + # @todo Delete later if not used Ancestor.new(element) end end end