inferno_core 0.6.7 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/inferno/apps/cli/evaluate.rb +6 -1
- data/lib/inferno/apps/cli/templates/lib/%library_name%/suite.rb.tt +2 -2
- data/lib/inferno/apps/web/controllers/requirements/show.rb +18 -0
- data/lib/inferno/apps/web/controllers/test_suites/requirements/index.rb +29 -0
- data/lib/inferno/apps/web/router.rb +7 -0
- data/lib/inferno/apps/web/serializers/requirement.rb +18 -0
- data/lib/inferno/apps/web/serializers/requirement_set.rb +13 -0
- data/lib/inferno/apps/web/serializers/test_suite.rb +10 -0
- data/lib/inferno/config/boot/requirements.rb +40 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/all_defined_extensions_have_examples.rb +58 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb +76 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/all_profiles_have_examples.rb +49 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb +79 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/differential_content_has_examples.rb +124 -0
- data/lib/inferno/dsl/fhir_evaluation/rules/value_sets_demonstrate.rb +233 -0
- data/lib/inferno/dsl/fhir_resource_navigation.rb +11 -2
- data/lib/inferno/dsl/must_support_assessment.rb +15 -3
- data/lib/inferno/dsl/requirement_set.rb +82 -0
- data/lib/inferno/dsl/runnable.rb +22 -0
- data/lib/inferno/dsl/suite_requirements.rb +46 -0
- data/lib/inferno/entities/ig.rb +4 -0
- data/lib/inferno/entities/requirement.rb +63 -0
- data/lib/inferno/entities/test_suite.rb +2 -0
- data/lib/inferno/public/bundle.js +3 -3
- data/lib/inferno/repositories/igs.rb +1 -2
- data/lib/inferno/repositories/requirements.rb +116 -0
- data/lib/inferno/version.rb +1 -1
- metadata +17 -2
@@ -18,8 +18,7 @@ module Inferno
|
|
18
18
|
def find_or_load(id_or_path)
|
19
19
|
return find(id_or_path) if exists?(id_or_path)
|
20
20
|
|
21
|
-
ig_by_path = find_by_path(id_or_path)
|
22
|
-
|
21
|
+
ig_by_path = find_by_path(id_or_path) || find_by_path(find_local_file(id_or_path))
|
23
22
|
return ig_by_path if ig_by_path
|
24
23
|
|
25
24
|
load(id_or_path)
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'csv'
|
2
|
+
require_relative 'in_memory_repository'
|
3
|
+
require_relative '../entities/requirement'
|
4
|
+
|
5
|
+
module Inferno
|
6
|
+
module Repositories
|
7
|
+
# Repository that deals with persistence for the `Requirement` entity.
|
8
|
+
class Requirements < InMemoryRepository
|
9
|
+
def insert_from_file(path)
|
10
|
+
result = []
|
11
|
+
|
12
|
+
CSV.foreach(path, headers: true, header_converters: :symbol) do |row|
|
13
|
+
req_set = row[:req_set]
|
14
|
+
id = row[:id]
|
15
|
+
sub_requirements_field = row[:subrequirements]
|
16
|
+
|
17
|
+
combined_id = "#{req_set}@#{id}"
|
18
|
+
|
19
|
+
# Processing sub requirements: e.g. "170.315(g)(31)_hti-2-proposal@5,17,23,26,27,32,35,38-41"
|
20
|
+
sub_requirements = Inferno::Entities::Requirement.expand_requirement_ids(sub_requirements_field)
|
21
|
+
|
22
|
+
result << {
|
23
|
+
requirement_set: req_set,
|
24
|
+
id: combined_id,
|
25
|
+
url: row[:url],
|
26
|
+
requirement: row[:requirement],
|
27
|
+
conformance: row[:conformance],
|
28
|
+
actor: row[:actor],
|
29
|
+
sub_requirements: sub_requirements,
|
30
|
+
conditionality: row[:conditionality]&.downcase
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
result.each do |raw_req|
|
35
|
+
requirement = Entities::Requirement.new(raw_req)
|
36
|
+
|
37
|
+
insert(requirement)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def filter_requirements_by_ids(ids)
|
42
|
+
all.select { |requirement| ids.include?(requirement.id) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def requirements_for_suite(test_suite_id, test_session_id = nil)
|
46
|
+
test_suite = Inferno::Repositories::TestSuites.new.find(test_suite_id)
|
47
|
+
selected_suite_options =
|
48
|
+
if test_session_id.present?
|
49
|
+
Inferno::Repositories::TestSessions.new.find(test_session_id).suite_options
|
50
|
+
else
|
51
|
+
[]
|
52
|
+
end
|
53
|
+
|
54
|
+
requirement_sets =
|
55
|
+
test_suite
|
56
|
+
.requirement_sets
|
57
|
+
.select do |set|
|
58
|
+
set.suite_options.all? { |set_option| selected_suite_options.include? set_option }
|
59
|
+
end
|
60
|
+
|
61
|
+
requirements =
|
62
|
+
complete_requirement_set_requirements(requirement_sets) +
|
63
|
+
filtered_requirement_set_requirements(requirement_sets)
|
64
|
+
|
65
|
+
add_referenced_requirement_set_requirements(requirements, requirement_sets).uniq
|
66
|
+
end
|
67
|
+
|
68
|
+
def complete_requirement_set_requirements(requirement_sets)
|
69
|
+
requirement_sets.select(&:complete?)
|
70
|
+
.flat_map do |requirement_set|
|
71
|
+
all.select do |requirement|
|
72
|
+
requirement.requirement_set == requirement_set.identifier && requirement.actor == requirement_set.actor
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def filtered_requirement_set_requirements(requirement_sets)
|
78
|
+
requirement_sets.select(&:filtered?)
|
79
|
+
.flat_map do |requirement_set|
|
80
|
+
requirement_set
|
81
|
+
.expand_requirement_ids
|
82
|
+
.map { |requirement_id| find(requirement_id) }
|
83
|
+
.select { |requirement| requirement.actor == requirement_set.actor }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def add_referenced_requirement_set_requirements( # rubocop:disable Metrics/CyclomaticComplexity
|
88
|
+
requirements_to_process,
|
89
|
+
requirement_sets,
|
90
|
+
processed_requirements = []
|
91
|
+
)
|
92
|
+
return processed_requirements if requirements_to_process.blank?
|
93
|
+
|
94
|
+
referenced_requirement_sets = requirement_sets.select(&:referenced?)
|
95
|
+
|
96
|
+
referenced_requirement_ids =
|
97
|
+
requirements_to_process
|
98
|
+
.flat_map(&:sub_requirements)
|
99
|
+
.select do |requirement_id|
|
100
|
+
referenced_requirement_sets.any? do |set|
|
101
|
+
requirement_id.start_with?("#{set.identifier}@") && (find(requirement_id).actor == set.actor)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
new_requirements =
|
106
|
+
referenced_requirement_ids.map { |id| find(id) } - requirements_to_process - processed_requirements
|
107
|
+
|
108
|
+
add_referenced_requirement_set_requirements(
|
109
|
+
new_requirements,
|
110
|
+
referenced_requirement_sets,
|
111
|
+
(processed_requirements + requirements_to_process).uniq
|
112
|
+
)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
data/lib/inferno/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inferno_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2025-
|
13
|
+
date: 2025-04-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -465,6 +465,7 @@ files:
|
|
465
465
|
- lib/inferno/apps/web/application.rb
|
466
466
|
- lib/inferno/apps/web/controllers/controller.rb
|
467
467
|
- lib/inferno/apps/web/controllers/requests/show.rb
|
468
|
+
- lib/inferno/apps/web/controllers/requirements/show.rb
|
468
469
|
- lib/inferno/apps/web/controllers/test_runs/create.rb
|
469
470
|
- lib/inferno/apps/web/controllers/test_runs/destroy.rb
|
470
471
|
- lib/inferno/apps/web/controllers/test_runs/results/index.rb
|
@@ -479,6 +480,7 @@ files:
|
|
479
480
|
- lib/inferno/apps/web/controllers/test_sessions/show.rb
|
480
481
|
- lib/inferno/apps/web/controllers/test_suites/check_configuration.rb
|
481
482
|
- lib/inferno/apps/web/controllers/test_suites/index.rb
|
483
|
+
- lib/inferno/apps/web/controllers/test_suites/requirements/index.rb
|
482
484
|
- lib/inferno/apps/web/controllers/test_suites/show.rb
|
483
485
|
- lib/inferno/apps/web/index.html.erb
|
484
486
|
- lib/inferno/apps/web/router.rb
|
@@ -489,6 +491,8 @@ files:
|
|
489
491
|
- lib/inferno/apps/web/serializers/message.rb
|
490
492
|
- lib/inferno/apps/web/serializers/preset.rb
|
491
493
|
- lib/inferno/apps/web/serializers/request.rb
|
494
|
+
- lib/inferno/apps/web/serializers/requirement.rb
|
495
|
+
- lib/inferno/apps/web/serializers/requirement_set.rb
|
492
496
|
- lib/inferno/apps/web/serializers/result.rb
|
493
497
|
- lib/inferno/apps/web/serializers/serializer.rb
|
494
498
|
- lib/inferno/apps/web/serializers/session_data.rb
|
@@ -505,6 +509,7 @@ files:
|
|
505
509
|
- lib/inferno/config/boot/ig_files.rb
|
506
510
|
- lib/inferno/config/boot/logging.rb
|
507
511
|
- lib/inferno/config/boot/presets.rb
|
512
|
+
- lib/inferno/config/boot/requirements.rb
|
508
513
|
- lib/inferno/config/boot/sidekiq.rb
|
509
514
|
- lib/inferno/config/boot/suites.rb
|
510
515
|
- lib/inferno/config/boot/validator.rb
|
@@ -534,9 +539,15 @@ files:
|
|
534
539
|
- lib/inferno/dsl/fhir_evaluation/profile_conformance_helper.rb
|
535
540
|
- lib/inferno/dsl/fhir_evaluation/reference_extractor.rb
|
536
541
|
- lib/inferno/dsl/fhir_evaluation/rule.rb
|
542
|
+
- lib/inferno/dsl/fhir_evaluation/rules/all_defined_extensions_have_examples.rb
|
543
|
+
- lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb
|
537
544
|
- lib/inferno/dsl/fhir_evaluation/rules/all_must_supports_present.rb
|
545
|
+
- lib/inferno/dsl/fhir_evaluation/rules/all_profiles_have_examples.rb
|
538
546
|
- lib/inferno/dsl/fhir_evaluation/rules/all_references_resolve.rb
|
539
547
|
- lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb
|
548
|
+
- lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb
|
549
|
+
- lib/inferno/dsl/fhir_evaluation/rules/differential_content_has_examples.rb
|
550
|
+
- lib/inferno/dsl/fhir_evaluation/rules/value_sets_demonstrate.rb
|
540
551
|
- lib/inferno/dsl/fhir_resource_navigation.rb
|
541
552
|
- lib/inferno/dsl/fhir_resource_validation.rb
|
542
553
|
- lib/inferno/dsl/fhir_validation.rb
|
@@ -553,11 +564,13 @@ files:
|
|
553
564
|
- lib/inferno/dsl/oauth_credentials.rb
|
554
565
|
- lib/inferno/dsl/primitive_type.rb
|
555
566
|
- lib/inferno/dsl/request_storage.rb
|
567
|
+
- lib/inferno/dsl/requirement_set.rb
|
556
568
|
- lib/inferno/dsl/results.rb
|
557
569
|
- lib/inferno/dsl/resume_test_route.rb
|
558
570
|
- lib/inferno/dsl/runnable.rb
|
559
571
|
- lib/inferno/dsl/suite_endpoint.rb
|
560
572
|
- lib/inferno/dsl/suite_option.rb
|
573
|
+
- lib/inferno/dsl/suite_requirements.rb
|
561
574
|
- lib/inferno/dsl/tcp_exception_handler.rb
|
562
575
|
- lib/inferno/dsl/value_extractor.rb
|
563
576
|
- lib/inferno/entities.rb
|
@@ -570,6 +583,7 @@ files:
|
|
570
583
|
- lib/inferno/entities/message.rb
|
571
584
|
- lib/inferno/entities/preset.rb
|
572
585
|
- lib/inferno/entities/request.rb
|
586
|
+
- lib/inferno/entities/requirement.rb
|
573
587
|
- lib/inferno/entities/result.rb
|
574
588
|
- lib/inferno/entities/session_data.rb
|
575
589
|
- lib/inferno/entities/test.rb
|
@@ -604,6 +618,7 @@ files:
|
|
604
618
|
- lib/inferno/repositories/presets.rb
|
605
619
|
- lib/inferno/repositories/repository.rb
|
606
620
|
- lib/inferno/repositories/requests.rb
|
621
|
+
- lib/inferno/repositories/requirements.rb
|
607
622
|
- lib/inferno/repositories/results.rb
|
608
623
|
- lib/inferno/repositories/session_data.rb
|
609
624
|
- lib/inferno/repositories/tags.rb
|