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) ⇒ Object

Note:

for better feedback

Slightly modifies the behaviour of Ecoportal::API::Common::BaseModel#as_update, so schema details fields show the alt_id



50
51
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
80
81
82
# File 'lib/eco/api/session/batch/feedback.rb', line 50

def as_update(entry)
  case
  when entry.is_a?(Hash)
    hash = entry
  else #entry.is_a?(Ecoportal::API::V1::Person)
    if only_ids?
      hash = {
        "id"          => entry.id,
        "external_id" => entry.external_id,
        "email"       => entry.email
      }
      hash = entry.as_json.slice("id", "external_id", "email")
    else
      hash = entry.as_update
      #if entry.details
      if hash["details"]
        if hfields = hash.dig("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



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

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:



87
88
89
90
91
# File 'lib/eco/api/session/batch/feedback.rb', line 87

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