Module: Igniter::Extensions::Contracts::InvariantsPack
- Defined in:
- lib/igniter/extensions/contracts/invariants_pack.rb
Class Method Summary collapse
- .build(&block) ⇒ Object
- .check(target, invariants:) ⇒ Object
- .install_into(kernel) ⇒ Object
- .manifest ⇒ Object
- .run(environment, inputs:, invariants:, compiled_graph: nil, &block) ⇒ Object
- .unwrap_execution_result(target) ⇒ Object
- .validate!(target, invariants:) ⇒ Object
- .verify_cases(environment, cases:, invariants:, compiled_graph: nil, &block) ⇒ Object
Class Method Details
.build(&block) ⇒ Object
28 29 30 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 28 def build(&block) Invariants::Builder.build(&block) end |
.check(target, invariants:) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 32 def check(target, invariants:) execution_result = unwrap_execution_result(target) outputs = execution_result.outputs.to_h violations = invariants.invariants.filter_map { |invariant| invariant.check(outputs) } Invariants::Report.new( suite: invariants, outputs: outputs, violations: violations, execution_result: execution_result ) end |
.install_into(kernel) ⇒ Object
24 25 26 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 24 def install_into(kernel) kernel end |
.manifest ⇒ Object
17 18 19 20 21 22 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 17 def manifest Igniter::Contracts::PackManifest.new( name: :extensions_invariants, metadata: { category: :validation } ) end |
.run(environment, inputs:, invariants:, compiled_graph: nil, &block) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 52 def run(environment, inputs:, invariants:, compiled_graph: nil, &block) graph = if block environment.compile(&block) else compiled_graph || raise(ArgumentError, "invariant run requires a block or compiled_graph") end result = environment.execute(graph, inputs: inputs) check(result, invariants: invariants) end |
.unwrap_execution_result(target) ⇒ Object
80 81 82 83 84 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 80 def unwrap_execution_result(target) return target.execution_result if target.respond_to?(:execution_result) target end |
.validate!(target, invariants:) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 45 def validate!(target, invariants:) report = check(target, invariants: invariants) raise Invariants::InvariantError.new(nil, violations: report.violations) if report.invalid? report end |
.verify_cases(environment, cases:, invariants:, compiled_graph: nil, &block) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/igniter/extensions/contracts/invariants_pack.rb', line 64 def verify_cases(environment, cases:, invariants:, compiled_graph: nil, &block) graph = if block environment.compile(&block) else compiled_graph || raise(ArgumentError, "verify_cases requires a block or compiled_graph") end reports = Array(cases).map do |inputs| result = environment.execute(graph, inputs: inputs) check(result, invariants: invariants) end Invariants::CasesReport.new(reports: reports) end |