Class: GuardrailsRuby::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/guardrails_ruby/result.rb

Direct Known Subclasses

FinalResult

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_text: nil, violations: []) ⇒ Result

Returns a new instance of Result.



7
8
9
10
# File 'lib/guardrails_ruby/result.rb', line 7

def initialize(original_text: nil, violations: [])
  @original_text = original_text
  @violations = violations
end

Instance Attribute Details

#original_text ⇒ Object (readonly)

Returns the value of attribute original_text.



5
6
7
# File 'lib/guardrails_ruby/result.rb', line 5

def original_text
  @original_text
end

#violations ⇒ Object (readonly)

Returns the value of attribute violations.



5
6
7
# File 'lib/guardrails_ruby/result.rb', line 5

def violations
  @violations
end

Instance Method Details

#blocked? ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/guardrails_ruby/result.rb', line 33

def blocked?
  @violations.any? { |v| v.action == :block }
end

#merge(other) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/guardrails_ruby/result.rb', line 21

def merge(other)
  merged_violations = @violations + other.violations

  # Use the most recent sanitized text as the base
  merged_text = other.original_text || @original_text

  self.class.new(
    original_text: merged_text,
    violations: merged_violations
  )
end

#passed? ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/guardrails_ruby/result.rb', line 12

def passed?
  @violations.empty?
end

#redactions ⇒ Object



41
42
43
# File 'lib/guardrails_ruby/result.rb', line 41

def redactions
  @violations.select { |v| v.action == :redact }
end

#sanitized ⇒ Object



16
17
18
19
# File 'lib/guardrails_ruby/result.rb', line 16

def sanitized
  redact_violation = @violations.find { |v| v.action == :redact && v.sanitized }
  redact_violation ? redact_violation.sanitized : @original_text
end

#to_s ⇒ Object



45
46
47
48
49
50
51
# File 'lib/guardrails_ruby/result.rb', line 45

def to_s
  if passed?
    "Result: passed"
  else
    "Result: #{violations.size} violation(s) - #{violations.map(&:to_s).join('; ')}"
  end
end

#warnings ⇒ Object



37
38
39
# File 'lib/guardrails_ruby/result.rb', line 37

def warnings
  @violations.select { |v| v.action == :warn }
end