Class: Uniword::Validation::ValidationResult

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/validation/validation_result.rb

Overview

Represents the result of validating a single link or reference.

Responsibility: Store validation outcome for a single link check. Single Responsibility: Only represents validation results.

A validation result includes:

  • Status (success, failure, warning)

  • The link being validated

  • Error message if validation failed

  • Optional metadata

Examples:

Create a success result

result = ValidationResult.success(hyperlink)

Create a failure result

result = ValidationResult.failure(hyperlink, "URL not accessible")

Create a warning result

result = ValidationResult.warning(hyperlink, "Slow response time")

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:, link:, message: nil, metadata: {}) ⇒ ValidationResult

Initialize a new ValidationResult.

Examples:

Create a result

result = ValidationResult.new(
  status: :failure,
  link: hyperlink,
  message: "404 Not Found"
)

Parameters:

  • status (Symbol)

    Validation status (:success, :failure, :warning)

  • link (Object)

    The link being validated

  • message (String, nil) (defaults to: nil)

    Error or warning message

  • metadata (Hash) (defaults to: {})

    Additional metadata



50
51
52
53
54
55
# File 'lib/uniword/validation/validation_result.rb', line 50

def initialize(status:, link:, message: nil, metadata: {})
  @status = status
  @link = link
  @message = message
  @metadata =  || {}
end

Instance Attribute Details

Returns The link or reference being validated.

Returns:

  • (Object)

    The link or reference being validated



29
30
31
# File 'lib/uniword/validation/validation_result.rb', line 29

def link
  @link
end

#messageString? (readonly)

Returns Error or warning message.

Returns:

  • (String, nil)

    Error or warning message



32
33
34
# File 'lib/uniword/validation/validation_result.rb', line 32

def message
  @message
end

#metadataHash (readonly)

Returns Additional metadata.

Returns:

  • (Hash)

    Additional metadata



35
36
37
# File 'lib/uniword/validation/validation_result.rb', line 35

def 
  @metadata
end

#statusSymbol (readonly)

Returns Status of validation (:success, :failure, :warning).

Returns:

  • (Symbol)

    Status of validation (:success, :failure, :warning)



26
27
28
# File 'lib/uniword/validation/validation_result.rb', line 26

def status
  @status
end

Class Method Details

.failure(link, message, metadata: {}) ⇒ ValidationResult

Factory method: Create a failure result.

Examples:

result = ValidationResult.failure(hyperlink, "URL not found")

Parameters:

  • link (Object)

    The validated link

  • message (String)

    Error message

  • metadata (Hash) (defaults to: {})

    Optional metadata

Returns:



78
79
80
# File 'lib/uniword/validation/validation_result.rb', line 78

def self.failure(link, message, metadata: {})
  new(status: :failure, link: link, message: message, metadata: )
end

.success(link, metadata: {}) ⇒ ValidationResult

Factory method: Create a success result.

Examples:

result = ValidationResult.success(hyperlink)

Parameters:

  • link (Object)

    The validated link

  • metadata (Hash) (defaults to: {})

    Optional metadata

Returns:



65
66
67
# File 'lib/uniword/validation/validation_result.rb', line 65

def self.success(link, metadata: {})
  new(status: :success, link: link, metadata: )
end

.unknown(link, message = "No checker available", metadata: {}) ⇒ ValidationResult

Factory method: Create an unknown/skipped result.

Examples:

result = ValidationResult.unknown(hyperlink, "No checker available")

Parameters:

  • link (Object)

    The link that was skipped

  • message (String) (defaults to: "No checker available")

    Optional explanation

  • metadata (Hash) (defaults to: {})

    Optional metadata

Returns:



104
105
106
# File 'lib/uniword/validation/validation_result.rb', line 104

def self.unknown(link, message = "No checker available", metadata: {})
  new(status: :unknown, link: link, message: message, metadata: )
end

.warning(link, message, metadata: {}) ⇒ ValidationResult

Factory method: Create a warning result.

Examples:

result = ValidationResult.warning(hyperlink, "Redirect detected")

Parameters:

  • link (Object)

    The validated link

  • message (String)

    Warning message

  • metadata (Hash) (defaults to: {})

    Optional metadata

Returns:



91
92
93
# File 'lib/uniword/validation/validation_result.rb', line 91

def self.warning(link, message, metadata: {})
  new(status: :warning, link: link, message: message, metadata: )
end

Instance Method Details

#error_messageString?

Get error message (alias for message).

Examples:

result.error_message # => "URL not found"

Returns:

  • (String, nil)

    Error message



174
175
176
# File 'lib/uniword/validation/validation_result.rb', line 174

def error_message
  @message
end

#failure?Boolean

Check if validation failed.

Examples:

result.failure? # => false

Returns:

  • (Boolean)

    true if status is :failure



124
125
126
# File 'lib/uniword/validation/validation_result.rb', line 124

def failure?
  @status == :failure
end

#inspectString

Detailed inspection for debugging.

Returns:

  • (String)

    Detailed representation



209
210
211
212
# File 'lib/uniword/validation/validation_result.rb', line 209

def inspect
  "#<ValidationResult status=#{@status} link=#{link_identifier.inspect} " \
    "message=#{@message.inspect}>"
end

Get the link identifier (URL, anchor, etc.).

Examples:

result.link_identifier # => "https://example.com"

Returns:

  • (String)

    Link identifier



154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/uniword/validation/validation_result.rb', line 154

def link_identifier
  if @link.respond_to?(:url) && @link.url
    @link.url
  elsif @link.respond_to?(:anchor) && @link.anchor
    "##{@link.anchor}"
  elsif @link.respond_to?(:id)
    @link.id.to_s
  elsif @link.respond_to?(:name)
    @link.name
  else
    @link.to_s
  end
end

#to_hHash

Convert to hash representation.

Examples:

result.to_h # => { status: :success, link: "...", ... }

Returns:

  • (Hash)

    Hash representation



184
185
186
187
188
189
190
191
# File 'lib/uniword/validation/validation_result.rb', line 184

def to_h
  {
    status: @status,
    link: link_identifier,
    message: @message,
    metadata: @metadata,
  }.compact
end

#to_sString

Convert to string for display.

Examples:

result.to_s # => "[SUCCESS] https://example.com"

Returns:

  • (String)

    String representation



199
200
201
202
203
204
# File 'lib/uniword/validation/validation_result.rb', line 199

def to_s
  status_str = @status.to_s.upcase
  link_str = link_identifier
  msg_str = @message ? ": #{@message}" : ""
  "[#{status_str}] #{link_str}#{msg_str}"
end

#unknown?Boolean

Check if validation status is unknown.

Examples:

result.unknown? # => false

Returns:

  • (Boolean)

    true if status is :unknown



144
145
146
# File 'lib/uniword/validation/validation_result.rb', line 144

def unknown?
  @status == :unknown
end

#valid?Boolean

Check if validation was successful.

Examples:

result.valid? # => true

Returns:

  • (Boolean)

    true if status is :success



114
115
116
# File 'lib/uniword/validation/validation_result.rb', line 114

def valid?
  @status == :success
end

#warning?Boolean

Check if validation produced a warning.

Examples:

result.warning? # => false

Returns:

  • (Boolean)

    true if status is :warning



134
135
136
# File 'lib/uniword/validation/validation_result.rb', line 134

def warning?
  @status == :warning
end