class Eco::API::Common::People::Entries

@attr_reader entries [Array<Eco::API::Common::PersonEntry] a pure ‘Array` object.
Class meant to offer a collection of entries, normally used to get parsed input data.

def [](id_or_ext)

def [](id_or_ext)
  id(id_or_ext) || external_id(id_or_ext)
end

def email_id_maps

def email_id_maps
  email_present.group_by(:email).transform_values { |person| person.id }
end

def entry(id: nil, external_id: nil, email: nil)

def entry(id: nil, external_id: nil, email: nil)
  init_caches
  pers = nil
  pers = @by_id[id]&.first if id
  pers = @by_external_id[external_id&.strip]&.first    if !pers && !external_id.to_s.strip.empty?
  pers = @by_email[email&.downcase.strip]&.first       if !pers && !email.to_s.strip.empty?
  pers = @by_external_id[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
  pers
end

def exclude(object)

def exclude(object)
  exclude_people(into_a(object))
end

def exclude_people(list)

def exclude_people(list)
  discarded = list.map do |person|
    find(person)
  end.compact
  newFrom to_a - discarded
end

def external_id(*args)

def external_id(*args)
  attr('external_id', *args).first
end

def find(object)

def find(object)
  id          = object.respond_to?("id")?          object.send("id") : nil
  external_id = object.respond_to?("external_id")? object.send("external_id") : nil
  email       = object.respond_to?("email")?       object.send("email") : nil
  entry(id: id, external_id: external_id, email: email)
end

def group_by_supervisor

def group_by_supervisor
  to_h(:supervisor_id)
end

def id(*args)

def id(*args)
  attr('id', *args).first
end

def init_caches

def init_caches
  return if @caches_init
  @by_id          = to_h
  @by_external_id = to_h('external_id')
  @by_email       = to_h('email')
  @caches_init = true
end

def initialize(data = [], klass:, factory:)

def initialize(data = [], klass:, factory:)
  super(data, klass: klass, factory: factory)
  @caches_init = false
end

def on_change

def on_change
  @caches_init = false
end

def to_h(attr = "id")

def to_h(attr = "id")
  super(attr || "id")
end