Class: Modspec::Suite
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- Modspec::Suite
- Defined in:
- lib/modspec/suite.rb
Instance Attribute Summary collapse
Class Method Summary collapse
Instance Method Summary collapse
- #combine(other_suite) ⇒ Object
- #resolve_conflicts(other_suite) ⇒ Object
- #setup_relationships ⇒ Object
- #validate ⇒ Object
Instance Attribute Details
#all_identifiers ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/modspec/suite.rb', line 66 def all_identifiers return @all_identifiers if @all_identifiers nsc = normative_statements_classes || [] cc = conformance_classes || [] @all_identifiers = (nsc.flat_map(&:normative_statements) + cc.flat_map(&:tests) + nsc + cc).map(&:identifier) end |
Class Method Details
.from_yaml_files(*files) ⇒ Object
87 88 89 90 91 92 93 94 95 |
# File 'lib/modspec/suite.rb', line 87 def self.from_yaml_files(*files) combined_suite = new files.each do |file| suite = from_yaml(File.read(file)) combined_suite = combined_suite.combine(suite) end combined_suite.name = "Combined Suite" combined_suite end |
Instance Method Details
#combine(other_suite) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/modspec/suite.rb', line 38 def combine(other_suite) unless other_suite.is_a?(Modspec::Suite) raise ArgumentError, "Argument must be a Modspec::Suite" end combined_suite = dup combined_suite.all_identifiers = nil if other_suite.normative_statements_classes combined_suite.normative_statements_classes ||= [] combined_suite.normative_statements_classes += other_suite.normative_statements_classes end if other_suite.conformance_classes combined_suite.conformance_classes ||= [] combined_suite.conformance_classes += other_suite.conformance_classes end # Ensure uniqueness of identifiers combined_suite.normative_statements_classes&.uniq!(&:identifier) combined_suite.conformance_classes&.uniq!(&:identifier) combined_suite.name = "#{name} + #{other_suite.name}" combined_suite end |
#resolve_conflicts(other_suite) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/modspec/suite.rb', line 80 def resolve_conflicts(other_suite) resolve_conflicts_for(normative_statements_classes, other_suite.normative_statements_classes) resolve_conflicts_for(conformance_classes, other_suite.conformance_classes) end |
#setup_relationships ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/modspec/suite.rb', line 97 def setup_relationships return unless normative_statements_classes && conformance_classes req_index = normative_statements_classes .flat_map(&:normative_statements) .to_h { |r| [r.identifier.to_s, r] } conformance_classes.each do |cc| cc.tests.each do |ct| targets = Array(ct.targets).map(&:to_s) ct.corresponding_requirements = targets.filter_map do |t| req_index[t] end ct.parent_class = cc end end end |
#validate ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/modspec/suite.rb', line 22 def validate setup_relationships self.all_identifiers = nil errors = super errors.concat(validate_cycles) errors.concat(validate_label_uniqueness) errors.concat(validate_dependencies) unless normative_statements_classes.nil? errors.concat(normative_statements_classes.flat_map do |n| n.validate(self) end) end errors.concat(conformance_classes.flat_map(&:validate)) unless conformance_classes.nil? errors end |