Class: Eco::API::Session::Batch::RequestStats

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

Constant Summary collapse

CORE_ATTRS =
Eco::API::Common::People::PersonParser::CORE_ATTRS
ACCOUNT_ATTRS =
(Eco::API::Common::People::PersonParser:: + ["permissions_custom"]).uniq
DETAILS_ATTRS =
["fields"]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type:, requests: []) ⇒ RequestStats



46
47
48
49
50
51
# File 'lib/eco/api/session/batch/request_stats.rb', line 46

def initialize(type:, requests: [])
  raise "type should be one of #{Eco::API::Session::Batch::Job.types}. Given: #{type}"  unless self.class.valid_type?(type.to_sym)
  @type  = type.to_sym
  @count = requests && requests.length
  @stats = build(requests)
end

Instance Attribute Details

#countInteger (readonly)

the total number of requests



7
8
9
# File 'lib/eco/api/session/batch/request_stats.rb', line 7

def count
  @count
end

#statsHash (readonly)

plain Hash with the number of requests that include an attribute



7
8
9
# File 'lib/eco/api/session/batch/request_stats.rb', line 7

def stats
  @stats
end

#typeObject (readonly)

Returns the value of attribute type.



44
45
46
# File 'lib/eco/api/session/batch/request_stats.rb', line 44

def type
  @type
end

Class Method Details

.account_attrs(stats: false, all: false) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/eco/api/session/batch/request_stats.rb', line 24

def (stats: false, all: false)
  .dup.tap do |attrs|
    if stats || all
      attrs.unshift("account_remove")
      attrs.unshift("account") if all
    end
  end
end

.core_attrs(stats: false, all: false) ⇒ Object



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

def core_attrs(stats: false, all: false)
  CORE_ATTRS.dup.tap do |attrs|
    attrs.unshift("core") if stats || all
  end
end

.details_attrs(stats: false, all: false) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/eco/api/session/batch/request_stats.rb', line 33

def details_attrs(stats: false, all: false)
  DETAILS_ATTRS.dup.tap do |attrs|
    if stats || all
      attrs.unshift("details_remove")
      attrs.unshift("details") if all
    end
  end
end

.valid_type?(type) ⇒ Boolean



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

def valid_type?(type)
  Eco::API::Session::Batch::Job.valid_type?(type.to_sym)
end

Instance Method Details

#account(percent: false) ⇒ Object



79
80
81
# File 'lib/eco/api/session/batch/request_stats.rb', line 79

def (percent: false)
  attr("account", percent: percent)
end

#account_attrsObject



61
62
63
# File 'lib/eco/api/session/batch/request_stats.rb', line 61

def 
  @account_attrs ||= self.class.
end

#account_remove(percent: false) ⇒ Object



83
84
85
# File 'lib/eco/api/session/batch/request_stats.rb', line 83

def (percent: false)
  attr("account_remove", percent: percent)
end

#attr(attr, percent: false, total: count) ⇒ Object



69
70
71
72
73
# File 'lib/eco/api/session/batch/request_stats.rb', line 69

def attr(attr, percent: false, total: count)
  i = @stats["#{attr}"]
  return i unless percent
  percentage(i, total: total)
end

#core(percent: false) ⇒ Object



75
76
77
# File 'lib/eco/api/session/batch/request_stats.rb', line 75

def core(percent: false)
  attr("core", percent: percent)
end

#core_attrsObject



57
58
59
# File 'lib/eco/api/session/batch/request_stats.rb', line 57

def core_attrs
  @core_attrs    ||= self.class.core_attrs
end

#details(percent: false) ⇒ Object



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

def details(percent: false)
  attr("details", percent: percent)
end

#details_attrsObject



65
66
67
# File 'lib/eco/api/session/batch/request_stats.rb', line 65

def details_attrs
  @details_attrs ||= self.class.details_attrs
end

#details_remove(percent: false) ⇒ Object



91
92
93
# File 'lib/eco/api/session/batch/request_stats.rb', line 91

def details_remove(percent: false)
  attr("details_remove", percent: percent)
end

#fields_averageObject



95
96
97
98
99
# File 'lib/eco/api/session/batch/request_stats.rb', line 95

def fields_average
  if (fields_num = attr("fields")) && (total = details) > 0
    (fields_num.to_f / total.to_f).round(2)
  end
end

#message(percent: false) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/eco/api/session/batch/request_stats.rb', line 101

def message(percent: false)
  key_val_delimiter = ": "; attr_delimiter = " ++ "
  pairs_to_line = Proc.new do |pairs|
    pairs.map do |p|
      [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter)
    end.join(attr_delimiter)
  end

  lines = []
  lines << pairs_to_line.call(core_pairs(percent: percent))
  lines << pairs_to_line.call((percent: percent))
  lines << pairs_to_line.call(details_pairs(percent: percent))
  lines.join("\n")
end

#modelObject



116
117
118
# File 'lib/eco/api/session/batch/request_stats.rb', line 116

def model

end

#to_hObject



53
54
55
# File 'lib/eco/api/session/batch/request_stats.rb', line 53

def to_h
  @stats
end