Class: Eco::API::Session::Batch::Errors

Inherits:
Object
  • Object
show all
Defined in:
lib/eco/api/session/batch/errors.rb

Overview

Helper object linked to a Batch::Status. Its aim is to manage the errors of the batch status.

Defined Under Namespace

Classes: ErrorCache

Instance Attribute Summary collapse

Status object shortcuts collapse

Pure errors helper methods collapse

Messaging methods collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:) ⇒ Errors

Returns a new instance of Errors.

Parameters:



14
15
16
17
# File 'lib/eco/api/session/batch/errors.rb', line 14

def initialize(status:)
  "Expected Batch::Status as root. Given: #{status.class}" unless status.is_a?(Eco::API::Session::Batch::Status)
  @status = status
end

Instance Attribute Details

#statusObject (readonly)



9
10
11
# File 'lib/eco/api/session/batch/errors.rb', line 9

def status
  @status
end

Instance Method Details

#any?Boolean

Was there any Sever (reply) error as a result of this batch?

Returns:

  • (Boolean)

    true if any of the queried entries got an unsuccessful Ecoportal::API::Common::BatchResponse



56
57
58
# File 'lib/eco/api/session/batch/errors.rb', line 56

def any?
  queue.any? {|query| !status[query].success?}
end

#by_type(only_entries: true) ⇒ Hash

Groups entries with error type

Returns:

  • (Hash)

    where each key is a type error and each value is an Array of:

    1. entries that got that error, if only_entries is true
    2. ErrorCache objects, if only_entries is false


64
65
66
67
68
69
70
71
72
73
74
# File 'lib/eco/api/session/batch/errors.rb', line 64

def by_type(only_entries: true)
  errors.group_by do |e|
    e.type
  end.transform_values do |arr|
    if only_entries
      arr.map {|e| e.entry}
    else
      arr
    end
  end
end

#countInteger

Returns the number of entries that got error.

Returns:

  • (Integer)

    the number of entries that got error.



50
51
52
# File 'lib/eco/api/session/batch/errors.rb', line 50

def count
  entries.length
end

#errorsArray<Eco::API::Session::Batch::Errors::ErrorCache>

For all the entries with errors generates an Array of ErrorCache objects

Returns:

  • (Array<Eco::API::Session::Batch::Errors::ErrorCache>)

    where each object has

    1. type -> the error type Class
    2. err -> an instance object of that error class type
    3. entry -> the entry that generated the error
    4. response -> the original response from the server that carries the error


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/eco/api/session/batch/errors.rb', line 83

def errors
  entries.each_with_object([]) do |entry, arr|
    response = status[entry]
    if body = response.body
      errs = []
      case body
      when Hash
        if errs = (body["errors"] || body["error"])
          errs = [errs].flatten(1).compact
        end
        if errs.empty? && !response.success?
          errs = [body["response"]].flatten(1).compact
        end
      when String
        errs = [body]
      end
      errs.each do |msg|
        arr.push(ErrorCache.new(
          klass = Eco::API::Error.get_type(msg),
          klass.new(err_msg: msg, entry: entry, session: session),
          entry,
          response
        ))
      end
    end
  end
end

#loggerObject



42
43
44
# File 'lib/eco/api/session/batch/errors.rb', line 42

def logger
  status.logger
end

#messageObject



113
114
115
116
117
118
119
120
# File 'lib/eco/api/session/batch/errors.rb', line 113

def message
  msgs = strs
  if msgs.length > 0
    "There were #{msgs.length} errors:\n" + msgs.join("\n")
  else
    "There were no errors for the current batch '#{method}'!! ;)"
  end
end

#methodObject

See Also:

  • Eco::API::Session::Batch::Errors.[Eco[Eco::API[Eco::API::Session[Eco::API::Session::Batch[Eco::API::Session::Batch::Status[Eco::API::Session::Batch::Status#method]


27
28
29
# File 'lib/eco/api/session/batch/errors.rb', line 27

def method
  status.method
end

#person_ref(entry) ⇒ Object



132
133
134
# File 'lib/eco/api/session/batch/errors.rb', line 132

def person_ref(entry)
  Eco::API::Session::Batch::Feedback.person_ref(entry)
end


122
123
124
125
126
127
128
129
# File 'lib/eco/api/session/batch/errors.rb', line 122

def print
  msgs = strs
  if msgs.length > 0
    logger.error("There were #{msgs.length} errors:\n" + msgs.join("\n"))
  else
    logger.info("There were no errors for the current batch '#{method}'!! ;)")
  end
end

#queueObject

See Also:

  • Eco::API::Session::Batch::Errors.[Eco[Eco::API[Eco::API::Session[Eco::API::Session::Batch[Eco::API::Session::Batch::Status[Eco::API::Session::Batch::Status#queue]


22
23
24
# File 'lib/eco/api/session/batch/errors.rb', line 22

def queue
  status.queue
end

#sessionEco::API::Session

Returns currently active session.

Returns:



38
39
40
# File 'lib/eco/api/session/batch/errors.rb', line 38

def session
  status.session
end

#to_index(*args) ⇒ Object

Parameters:

  • key (Integer, Hash, Ecoportal::API::V1::Person, Ecoportal::API::Internal::Person)

See Also:

  • Eco::API::Session::Batch::Errors.[Eco[Eco::API[Eco::API::Session[Eco::API::Session::Batch[Eco::API::Session::Batch::Status[Eco::API::Session::Batch::Status#to_index]


33
34
35
# File 'lib/eco/api/session/batch/errors.rb', line 33

def to_index(*args)
  status.to_index(*args)
end