Class: Eco::API::Session::Batch::Feedback

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

Instance Attribute Summary collapse

Job shortcut methods collapse

Pure feedback methods collapse

Instance Method Summary collapse

Constructor Details

#initialize(job:) ⇒ Feedback

Returns a new instance of Feedback.

Parameters:



11
12
13
14
# File 'lib/eco/api/session/batch/feedback.rb', line 11

def initialize(job:)
  raise "A Eco::API::Session::Batch::Job object is required. Given: #{job}" unless job.is_a?(Eco::API::Session::Batch::Job)
  @job  = job
end

Instance Attribute Details

#jobEco::API::Session::Batch::Job (readonly)

batch job the feedback is associated with

Returns:



6
7
8
# File 'lib/eco/api/session/batch/feedback.rb', line 6

def job
  @job
end

Instance Method Details

#as_update(entry, add_feedback: true) ⇒ Object

Note:

for better feedback

Slightly modifies the behaviour of Ecoportal::API::Common::BaseModel#as_update, so schema details fields show the alt_id It also fixes possible patch updates that are incomplete or unnecessary.

Parameters:



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/eco/api/session/batch/feedback.rb', line 52

def as_update(entry, add_feedback: true)
  case
  when entry.is_a?(Hash)
    hash = entry
  else #entry.is_a?(Ecoportal::API::V1::Person)
    if only_ids?
      hash = entry.as_json.slice("id", "external_id", "email")
    else
      hash = entry.as_update

      if add_feedback && details = hash["details"]
        if hfields = details["fields"]
          hfields.each do |fld|
            fld.merge!("alt_id" => entry.details.get_field(fld["id"]).alt_id)
          end
        end
      end

      if  = hash["account"]
        if .keys == ["send_invites"] && !["send_invites"]
          hash.delete("account")
          hash.delete("id") if hash.keys == ["id"]
        end
      end
    end
  end
  hash || {}
end

#generate(requests = nil, max_chars: 800, only_stats: false) ⇒ String

Note:

if requests is not provided, it uses the last requests of the parent Batch::Job job

Generates the lines of feedback of the current requests

Parameters:

  • requests (Enumerable<Hash>) (defaults to: nil)

    raw requests as they would be sent to the Server

  • max_chars (Integer) (defaults to: 800)

    the max number of characters for the current feedback message

  • only_stats (Boolean) (defaults to: false)

    whether or not should only include a brief summary of stats

Returns:

  • (String)

    the feedback message



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/eco/api/session/batch/feedback.rb', line 96

def generate(requests = nil, max_chars: 800, only_stats: false)
  requests ||= job.requests
  [].tap do |msg|
    if !requests || !requests.is_a?(Enumerable) || requests.empty?
      msg << "#{"*" * 10} Nothing for #{signature} so far :)  #{"*" * 10}"
    else
      header = "#{"*"*10}  #{signature} - Feedback Sample #{"*"*10}"
      msg << header unless only_stats
      unless only_stats
        sample_length = 1
        sample = requests.slice(0, 20).map do |request|
          max_chars     -= request.pretty_inspect.length
          sample_length += 1 if max_chars > 0
          request
        end
        msg << "#{sample.slice(0, sample_length).pretty_inspect}"
      end
      stats_str = "#{"+"*3}  #{type.to_s.upcase} length: #{requests.length}  #{"+"*3}  STATS  (job '#{name}')  #{"+"*3}"
      msg << "#{"-"*stats_str.length}" if only_stats
      msg << stats_str
      msg << "#{request_stats(requests).message}"
      msg << "#{"-"*stats_str.length}" if only_stats
      msg << "*" * header.length unless only_stats
    end
  end.join("\n")
end

#job_requestsObject

See Also:



40
41
42
# File 'lib/eco/api/session/batch/feedback.rb', line 40

def job_requests
  job.requests
end

#nameString

Returns name of the batch job.

Returns:

  • (String)

    name of the batch job

See Also:



20
21
22
# File 'lib/eco/api/session/batch/feedback.rb', line 20

def name
  job.name
end

#optionsObject

See Also:



35
36
37
# File 'lib/eco/api/session/batch/feedback.rb', line 35

def options
  job.options
end

#request_stats(requests = nil) ⇒ Eco::API::Session::Batch::RequestStats

Note:

if requests is not provided, it uses the last requests of the parent Batch::Job job

Returns the stats object of the current requests.

Parameters:

  • requests (Enumerable<Hash>) (defaults to: nil)

    raw requests as they would be sent to the Server

Returns:



84
85
86
87
88
# File 'lib/eco/api/session/batch/feedback.rb', line 84

def request_stats(requests = nil)
  requests ||= job.requests
  return @request_stats if @request_stats && requests == job.requests
  @request_stats ||= Eco::API::Session::Batch::RequestStats.new(type: type, requests: requests)
end

#setsObject

See Also:



30
31
32
# File 'lib/eco/api/session/batch/feedback.rb', line 30

def sets
  job.sets
end

#typeObject

See Also:



25
26
27
# File 'lib/eco/api/session/batch/feedback.rb', line 25

def type
  job.type
end