Class: Kotoshu::Models::Result::DocumentResult

Inherits:
Lutaml::Model::Serializable
  • Object
show all
Defined in:
lib/kotoshu/core/models/result/document_result.rb

Overview

Result object for checking a document or file.

Serialized via lutaml-model. Holds an Array in errors.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file: nil, errors: [], word_count: 0, metadata: {}, **kwargs) ⇒ DocumentResult

Accept framework-private keywords (e.g. lutaml_register) from lutaml-model's from_hash so the round-trip works without lutaml having to poke ivars directly.



20
21
22
23
24
25
26
27
28
# File 'lib/kotoshu/core/models/result/document_result.rb', line 20

def initialize(file: nil, errors: [], word_count: 0, metadata: {}, **kwargs)
  super(
    file: file,
    word_count: word_count,
    errors: errors,
    metadata: ,
    **kwargs
  )
end

Class Method Details

.failure(file: nil, errors: [], word_count: 0) ⇒ Object



106
107
108
# File 'lib/kotoshu/core/models/result/document_result.rb', line 106

def self.failure(file: nil, errors: [], word_count: 0)
  new(file: file, errors: errors, word_count: word_count)
end

.merge(results) ⇒ Object



110
111
112
113
114
115
116
117
118
# File 'lib/kotoshu/core/models/result/document_result.rb', line 110

def self.merge(results)
  return new if results.empty?

  new(
    file: nil,
    errors: results.flat_map(&:errors),
    word_count: results.sum(&:word_count)
  )
end

.success(file: nil, word_count: 0) ⇒ Object



102
103
104
# File 'lib/kotoshu/core/models/result/document_result.rb', line 102

def self.success(file: nil, word_count: 0)
  new(file: file, errors: [], word_count: word_count)
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



76
77
78
79
80
# File 'lib/kotoshu/core/models/result/document_result.rb', line 76

def ==(other)
  return false unless other.is_a?(DocumentResult)

  file == other.file && errors == other.errors
end

#each_errorObject



54
55
56
57
58
# File 'lib/kotoshu/core/models/result/document_result.rb', line 54

def each_error(&)
  return enum_for(:each_error) unless block_given?

  errors.each(&)
end

#each_unique_errorObject



60
61
62
63
64
# File 'lib/kotoshu/core/models/result/document_result.rb', line 60

def each_unique_error(&)
  return enum_for(:each_unique_error) unless block_given?

  errors.group_by(&:word).each(&)
end

#error_countObject



38
39
40
# File 'lib/kotoshu/core/models/result/document_result.rb', line 38

def error_count
  Array(errors).size
end

#error_summaryObject



70
71
72
73
74
# File 'lib/kotoshu/core/models/result/document_result.rb', line 70

def error_summary
  summary = Hash.new(0)
  each_error { |error| summary[error.word] += 1 }
  summary
end

#errors_for(word) ⇒ Object



50
51
52
# File 'lib/kotoshu/core/models/result/document_result.rb', line 50

def errors_for(word)
  errors.select { |e| e.word == word }
end

#failed?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/kotoshu/core/models/result/document_result.rb', line 34

def failed?
  !success?
end

#first_errors(n = 10) ⇒ Object



66
67
68
# File 'lib/kotoshu/core/models/result/document_result.rb', line 66

def first_errors(n = 10)
  errors.first(n)
end

#has_error_for?(word) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/kotoshu/core/models/result/document_result.rb', line 46

def has_error_for?(word)
  errors.any? { |e| e.word == word }
end

#hashObject



83
84
85
# File 'lib/kotoshu/core/models/result/document_result.rb', line 83

def hash
  [file, errors].hash
end

#success?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/kotoshu/core/models/result/document_result.rb', line 30

def success?
  Array(errors).empty?
end

#to_sObject Also known as: inspect



87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/kotoshu/core/models/result/document_result.rb', line 87

def to_s
  if success?
    if file
      "File '#{file}': No spelling errors found (#{word_count} words checked)"
    else
      "No spelling errors found (#{word_count} words checked)"
    end
  else
    prefix = file ? "File '#{file}':" : ""
    "#{prefix} #{error_count} spelling error(s) found " \
      "(#{unique_error_count} unique) in #{word_count} words"
  end
end

#unique_error_countObject



42
43
44
# File 'lib/kotoshu/core/models/result/document_result.rb', line 42

def unique_error_count
  errors.map(&:word).uniq.size
end