Class: AISpec::Core::Assertion

Inherits:
Object
  • Object
show all
Defined in:
lib/aispec/core/assertion.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.registryObject (readonly)

Returns the value of attribute registry.



28
29
30
# File 'lib/aispec/core/assertion.rb', line 28

def registry
  @registry
end

Class Method Details

.evaluate(type, response, context = {}, options = {}) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/aispec/core/assertion.rb', line 38

def evaluate(type, response, context = {}, options = {})
  handler = get(type)
  unless handler
    return AssertionResult.new(
      name: type,
      passed: false,
      message: "Unknown assertion type '#{type}'"
    )
  end

  res = handler.call(response, context, options)
  if res.is_a?(AssertionResult)
    res
  elsif res.is_a?(Array)
    # [passed, message, metadata]
    AssertionResult.new(name: type, passed: res[0], message: res[1], metadata: res[2] || {})
  elsif res == true || res == false
    AssertionResult.new(name: type, passed: res)
  else
    AssertionResult.new(name: type, passed: !!res)
  end
rescue StandardError => e
  AssertionResult.new(
    name: type,
    passed: false,
    message: "Assertion Error (#{e.class}): #{e.message}",
    metadata: { error: e }
  )
end

.get(name) ⇒ Object



34
35
36
# File 'lib/aispec/core/assertion.rb', line 34

def get(name)
  @registry[name.to_sym]
end

.register(name, &block) ⇒ Object



30
31
32
# File 'lib/aispec/core/assertion.rb', line 30

def register(name, &block)
  @registry[name.to_sym] = block
end