inferno_core 0.4.7 → 0.4.8

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.
@@ -1,4 +1,5 @@
1
1
  require_relative 'repository'
2
+ require_relative '../utils/preset_processor'
2
3
 
3
4
  module Inferno
4
5
  module Repositories
@@ -42,10 +43,10 @@ module Inferno
42
43
  .map! { |result| results_repo.build_entity(result) }
43
44
  end
44
45
 
45
- def apply_preset(test_session_id, preset_id)
46
+ def apply_preset(test_session, preset_id)
46
47
  preset = presets_repo.find(preset_id)
47
- preset.inputs.each do |input|
48
- session_data_repo.save(input.merge(test_session_id:))
48
+ Utils::PresetProcessor.new(preset, test_session).processed_inputs.each do |input|
49
+ session_data_repo.save(input.merge(test_session_id: test_session.id))
49
50
  end
50
51
  end
51
52
 
@@ -1,16 +1,22 @@
1
1
  require_relative 'repositories/in_memory_repository'
2
- require_relative 'repositories/repository'
3
2
  require_relative 'repositories/validate_runnable_reference'
4
- require_relative 'repositories/headers'
5
- require_relative 'repositories/messages'
6
- require_relative 'repositories/requests'
7
- require_relative 'repositories/results'
8
3
  require_relative 'repositories/test_groups'
9
- require_relative 'repositories/test_runs'
10
- require_relative 'repositories/test_sessions'
11
4
  require_relative 'repositories/test_suites'
12
5
  require_relative 'repositories/tests'
13
6
 
7
+ # Skip loading things which require the db when not necessary, such as CLI
8
+ # commands which don't need the db
9
+ unless ENV['NO_DB']&.casecmp? 'true'
10
+ require_relative 'repositories/repository'
11
+ require_relative 'repositories/headers'
12
+ require_relative 'repositories/messages'
13
+ require_relative 'repositories/requests'
14
+ require_relative 'repositories/results'
15
+ require_relative 'repositories/session_data'
16
+ require_relative 'repositories/test_runs'
17
+ require_relative 'repositories/test_sessions'
18
+ end
19
+
14
20
  module Inferno
15
21
  # Repositories provide an abstraction layer for dealing with entity
16
22
  # persistence. All code for interacting with the database lives in
@@ -0,0 +1,49 @@
1
+ module Inferno
2
+ module Utils
3
+ # This class determines which values to use in a preset based on the suite
4
+ # options chosen in a session.
5
+ # @api private
6
+ class PresetProcessor
7
+ attr_accessor :preset, :session, :suite, :suite_inputs, :suite_options
8
+
9
+ def initialize(preset, session)
10
+ self.preset = preset
11
+ self.session = session
12
+ self.suite = session.test_suite
13
+ self.suite_inputs = suite.available_inputs.transform_values(&:to_hash)
14
+ self.suite_options = session.suite_options
15
+ end
16
+
17
+ # Returns the list of inputs which need to be persisted, with options
18
+ # applied.
19
+ def processed_inputs
20
+ preset.inputs
21
+ .map { |input| input_for_options(input) }
22
+ end
23
+
24
+ private
25
+
26
+ def input_for_options(input)
27
+ {
28
+ name: input[:name],
29
+ value: value(input),
30
+ type: suite_inputs[input[:name].to_sym][:type]
31
+ }
32
+ end
33
+
34
+ def value(input)
35
+ value_for_option(input).presence || input[:value]
36
+ end
37
+
38
+ def value_for_option(input)
39
+ input[:value_for_options]&.find do |option_value|
40
+ option_value[:options].all? do |option|
41
+ suite_options.any? do |suite_option|
42
+ suite_option.id.to_s == option[:name] && suite_option.value == option[:value]
43
+ end
44
+ end
45
+ end&.dig(:value)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -15,8 +15,12 @@ module Inferno
15
15
  # The rubocop rule is disabled because `each_value` returns the hash,
16
16
  # while `values.each` will return the array of values. We want the array
17
17
  # of values here.
18
- available_inputs.values.each do |input| # rubocop:disable Style/HashEachMethods
19
- input[:value] = (input.delete(:default) if input.key? :default)
18
+ available_inputs.values.map do |original_input|
19
+ {}.tap do |input|
20
+ input[:name] = original_input.delete(:name)
21
+ input[:value] = (original_input.delete(:default) if original_input.key? :default)
22
+ original_input.each { |key, value| input["_#{key}".to_sym] = value }
23
+ end
20
24
  end
21
25
  end
22
26
 
@@ -1,4 +1,4 @@
1
1
  module Inferno
2
2
  # Standard patterns for gem versions: https://guides.rubygems.org/patterns/
3
- VERSION = '0.4.7'.freeze
3
+ VERSION = '0.4.8'.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.4.7
4
+ version: 0.4.8
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: 2023-01-09 00:00:00.000000000 Z
13
+ date: 2023-01-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -320,6 +320,20 @@ dependencies:
320
320
  - - "~>"
321
321
  - !ruby/object:Gem::Version
322
322
  version: 1.2.1
323
+ - !ruby/object:Gem::Dependency
324
+ name: tty-markdown
325
+ requirement: !ruby/object:Gem::Requirement
326
+ requirements:
327
+ - - "~>"
328
+ - !ruby/object:Gem::Version
329
+ version: 0.7.1
330
+ type: :runtime
331
+ prerelease: false
332
+ version_requirements: !ruby/object:Gem::Requirement
333
+ requirements:
334
+ - - "~>"
335
+ - !ruby/object:Gem::Version
336
+ version: 0.7.1
323
337
  - !ruby/object:Gem::Dependency
324
338
  name: codecov
325
339
  requirement: !ruby/object:Gem::Requirement
@@ -625,6 +639,7 @@ files:
625
639
  - lib/inferno/utils/markdown_formatter.rb
626
640
  - lib/inferno/utils/middleware/request_logger.rb
627
641
  - lib/inferno/utils/migration.rb
642
+ - lib/inferno/utils/preset_processor.rb
628
643
  - lib/inferno/utils/preset_template_generator.rb
629
644
  - lib/inferno/utils/static_assets.rb
630
645
  - lib/inferno/version.rb