Sha256: 608c3fbacb9576e9b2cff1894727279796a8fbf59d5181caff0837799b0ab945
Contents?: true
Size: 1.67 KB
Versions: 4
Compression:
Stored size: 1.67 KB
Contents
module CukeModeler # @api private # # A mix-in module containing methods used by models that are nested inside # of other models. Internal helper class. module Nested # @api # # The parent model that contains this model attr_accessor :parent_model # TODO: Use an Enum type instead of symbols as arguments? # @api # # Returns the ancestor model of this model that matches the given type. Available # types are simply snake_case versions of the model Class names. Additionally, a # special type *:test* will return either a Scenario or an Outline model. # # @example # model.get_ancestor(:directory) # # @param ancestor_type [Symbol] The ancestor type to get # @raise [ArgumentError] If the passed type is not a valid model type # @return [Model, nil] The ancestor model, if one is found def get_ancestor(ancestor_type) target_classes = classes_for_type(ancestor_type) raise(ArgumentError, "Unknown ancestor type '#{ancestor_type}'.") if target_classes.nil? ancestor = parent_model ancestor = ancestor.parent_model until target_classes.include?(ancestor.class) || ancestor.nil? ancestor end private def classes_for_type(type) { directory: [Directory], feature_file: [FeatureFile], feature: [Feature], rule: [Rule], test: [Scenario, Outline, Background], background: [Background], scenario: [Scenario], outline: [Outline], step: [Step], table: [Table], example: [Example], row: [Row] }[type] end end end
Version data entries
4 entries across 4 versions & 1 rubygems