Class: Inferno::Entities::Requirement

Inherits:
Entity
  • Object
show all
Includes:
Attributes
Defined in:
lib/inferno/entities/requirement.rb

Overview

A ‘Requirement` represents the specific rule or behavior a runnable is testing.

Constant Summary collapse

ATTRIBUTES =
[
  :id,
  :requirement_set,
  :url,
  :requirement,
  :conformance,
  :actors,
  :subrequirements,
  :subrequirements_string,
  :conditionality,
  :not_tested_reason,
  :not_tested_details
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Attributes

included

Methods inherited from Entity

#to_hash

Constructor Details

#initialize(params) ⇒ Requirement

Returns a new instance of Requirement.



24
25
26
27
28
29
30
# File 'lib/inferno/entities/requirement.rb', line 24

def initialize(params)
  super(params, ATTRIBUTES)

  return unless requirement_set.blank? && (id&.include?('@') || id&.include?('#'))

  self.requirement_set = id.split(/[@#]/).first
end

Class Method Details

.expand_requirement_ids(requirement_id_string, default_set = nil) ⇒ Object

Expand a comma-delimited list of requirement id references into an Array of full requirement ids

Examples:

expand_requirement_ids('example-ig@1,3,5-7')
# => ['example-ig@1','example-ig@3','example-ig@5','example-ig@6','example-ig@7']
expand_requirement_ids('example-ig')
# => []
expand_requirement_ids('1,3,5-7', 'example-ig')
# => ['example-ig@1','example-ig@3','example-ig@5','example-ig@6','example-ig@7']
expand_requirement_ids('example-ig#actor1')
# => [all requirements for actor1 from example-ig]

Parameters:

  • requirement_id_string (String)

    A comma-delimited list of requirement id references

  • default_set (String) (defaults to: nil)

    The requirement set identifier which will be used if none is included in the ‘requirement_id_string`



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/inferno/entities/requirement.rb', line 53

def self.expand_requirement_ids(requirement_id_string, default_set = nil) # rubocop:disable Metrics/CyclomaticComplexity
  return [] if requirement_id_string.blank?

  current_set = default_set
  requirement_id_string
    .split(',')
    .map(&:strip)
    .flat_map do |requirement_string|
      if requirement_string.include? '@'
        current_set, requirement_string = requirement_string.split('@')
      elsif requirement_string.include? '#'
        current_set, actor = requirement_string.split('#')
      end

      requirement_ids =
        if actor.present?
          return Repositories::Requirements.new.requirements_for_actor(current_set, actor).map(&:id)
        elsif requirement_string.include?('-') && !requirement_string.match?(/[^\d\-]/)
          start_id, end_id = requirement_string.split('-')
          if start_id.match?(/^\d+$/) && end_id.match?(/^\d+$/)
            (start_id..end_id).to_a
          else
            []
          end
        else
          [requirement_string]
        end

      requirement_ids.map { |id| "#{current_set}@#{id}" }
    end
end

Instance Method Details

#actor?(actor_to_check) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/inferno/entities/requirement.rb', line 85

def actor?(actor_to_check)
  actors.any? { |actor| actor.casecmp? actor_to_check }
end

#subrequirementsObject



32
33
34
# File 'lib/inferno/entities/requirement.rb', line 32

def subrequirements
  @subrequirements ||= self.class.expand_requirement_ids(subrequirements_string, requirement_set)
end

#tested?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/inferno/entities/requirement.rb', line 89

def tested?
  not_tested_reason.blank?
end