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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inferno/apps/cli/evaluate.rb +6 -1
  3. data/lib/inferno/apps/cli/templates/lib/%library_name%/suite.rb.tt +2 -2
  4. data/lib/inferno/apps/web/controllers/requirements/show.rb +18 -0
  5. data/lib/inferno/apps/web/controllers/test_suites/requirements/index.rb +29 -0
  6. data/lib/inferno/apps/web/router.rb +7 -0
  7. data/lib/inferno/apps/web/serializers/requirement.rb +18 -0
  8. data/lib/inferno/apps/web/serializers/requirement_set.rb +13 -0
  9. data/lib/inferno/apps/web/serializers/test_suite.rb +10 -0
  10. data/lib/inferno/config/boot/requirements.rb +40 -0
  11. data/lib/inferno/dsl/fhir_evaluation/rules/all_defined_extensions_have_examples.rb +58 -0
  12. data/lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb +76 -0
  13. data/lib/inferno/dsl/fhir_evaluation/rules/all_profiles_have_examples.rb +49 -0
  14. data/lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb +79 -0
  15. data/lib/inferno/dsl/fhir_evaluation/rules/differential_content_has_examples.rb +124 -0
  16. data/lib/inferno/dsl/fhir_evaluation/rules/value_sets_demonstrate.rb +233 -0
  17. data/lib/inferno/dsl/fhir_resource_navigation.rb +11 -2
  18. data/lib/inferno/dsl/must_support_assessment.rb +15 -3
  19. data/lib/inferno/dsl/requirement_set.rb +82 -0
  20. data/lib/inferno/dsl/runnable.rb +22 -0
  21. data/lib/inferno/dsl/suite_requirements.rb +46 -0
  22. data/lib/inferno/entities/ig.rb +4 -0
  23. data/lib/inferno/entities/requirement.rb +63 -0
  24. data/lib/inferno/entities/test_suite.rb +2 -0
  25. data/lib/inferno/public/bundle.js +3 -3
  26. data/lib/inferno/repositories/igs.rb +1 -2
  27. data/lib/inferno/repositories/requirements.rb +116 -0
  28. data/lib/inferno/version.rb +1 -1
  29. 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
@@ -1,4 +1,4 @@
1
1
  module Inferno
2
2
  # Standard patterns for gem versions: https://guides.rubygems.org/patterns/
3
- VERSION = '0.6.7'.freeze
3
+ VERSION = '0.6.9'.freeze
4
4
  end
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.7
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-03-19 00:00:00.000000000 Z
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