Class: Inferno::Entities::Requirement

Inherits:
Entity
  • Object
show all
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 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